-1

所以有可能得到更多的选票,这里是我的问题(很好!):我花了数小时试图弄清楚如何让Heroku接受我刚添加的ENV变量(heroku config:设置PASS_CODE ='密码')。未在Heroku中发送HTML表单数据。 ENV变量问题

我在Express应用程序中有一个简单的HTML联系表单,我使用npm包nodemailer,在.env文件中添加ENV变量以与detenv一起使用,并使用下面的代码调用它们。 Heroku的状态是以相同的方式调用它们的ENV变量,但是表单数据没有发送,而且我仍然在Heroku日志中发现以下错误:{Error:Invalid login:535 5.0.0 Authentication Failed。 dotenv和heroku都说使用.process.env来调用ENV变量。它在我的本地node.js服务器中完美工作,但当我推送到heroku时无法正常工作。

这里是我的代码片段:

require('dotenv').config(); 
 

 
var express = require('express'); 
 
var router = express.Router(); 
 
var bodyParser = require('body-parser'); 
 
var nodemailer = require('nodemailer'); 
 

 
router.get('/', function(req, res, next) { 
 
\t res.render('contact'); 
 
}); 
 

 
router.post('/send', function(req, res, next){ 
 

 
\t // create reusable transporter object using the default SMTP transport 
 
\t var transporter = nodemailer.createTransport({ 
 
\t  host: 'smtp-mail.outlook.com', 
 
\t  port: 587, 
 
\t  secure: false, // secure:true for port 465, secure:false for port 587 
 
\t  tls: { 
 
\t  \t ciphers: 'SSLv3' 
 
\t  }, 
 
\t  auth: { 
 
\t   user: 'example.outlook.com', 
 
\t   pass: process.env.PASS_CODE 
 
\t  } 
 
\t }); 
 

 
\t // setup email data with unicode symbols 
 
\t var mailOptions = { 
 
\t  from: '"Fred Foo " <[email protected]>', // sender address 
 
\t  to: 'example.outlook.com', // list of receivers 
 
\t  subject: ' New message from your website!', // Subject line 
 
\t  text: ' You have a new message from your website with the following details: Name: ' +req.body.first_name + 'Surname: ' + req.body.last_name + 'Email: ' + req.body.email + 'Phone Number: ' + req.body.number + 'Message: ' + req.body.message, // plain text body 
 
\t  html: '<b> You have a new message from your website with the following details: </b><br><ul><li>First Name: ' + req.body.first_name + '</li><li>Surname: ' + req.body.last_name + '</li><li>Email: ' + req.body.email + '</li><li>Phone Number: ' + req.body.number + '</li><li>Message: ' + req.body.message + '</li></ul>' // html body 
 
\t }; 
 

 
\t // send mail with defined transport object 
 
\t transporter.sendMail(mailOptions, function(error, info) { 
 
\t  if (error) { 
 
\t   console.log(error); 
 
\t   res.redirect('/'); 
 
\t  } else { 
 
\t  \t console.log('Message sent: ' + info.response); 
 
\t  \t res.redirect('/'); 
 
\t  \t 
 
\t  } 
 
\t  
 
\t }); 
 
});

我也宣布在.ENV文件中的ENV变量,像这样:PASS_CODE=password,你可以看到我需要dotenv。

当我通过node.js服务器本地运行时,它工作正常,但是当我推送到Heroku时没有问题。我已经在Heroku中设置了ENV变量,并通过输入heroku config进行了检查。

为了完整起见,这里是我的package.json文件的副本:

确实
{ 
    "name": "podeg", 
    "version": "0.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www", 
    "debug": "node --debug ./bin/www" 
    }, 
    "dependencies": { 
    "body-parser": "~1.17.1", 
    "cookie-parser": "~1.4.3", 
    "debug": "~2.6.3", 
    "express": "~4.15.2", 
    "jade": "~1.11.0", 
    "morgan": "~1.8.1", 
    "multer": "^1.3.0", 
    "nodemailer": "^4.0.1", 
    "serve-favicon": "~2.4.2", 
    "dotenv": "^4.0.0" 
    }, 
    "engines": { 
    "node": "7.10.0" 
    } 
} 

非常感谢!

回答

0

我不知道为什么我会得到一个向下箭头,因为我认为其他人在我的情况(初学者)也会发现这个问题,并需要帮助。所以谢谢你的帮助。 ANYWAY,我设法找到了答案,这与使用outlook.com作为我的交易电子邮件客户端有关。我换了sendinblue(这是一个完全免费的服务,而不是sendgrid等谁只提供免费试用,然后收费)。我根据自己的账户更改了API的详细信息,还使用了npm - heroku-dotenv的一个包,它与dotenv一起将环境变量发送给heroku。

这两个作品和我的组合,现在可以通过我的联系人表单通过heroku和开发中接收电子邮件,而无需更改任何env编码。