Javascript 未从heroku nodejs应用程序发送电子邮件(在本地工作正常)

Javascript 未从heroku nodejs应用程序发送电子邮件(在本地工作正常),javascript,node.js,express,heroku,nodemailer,Javascript,Node.js,Express,Heroku,Nodemailer,我正在尝试创建一个电子邮件计划程序,在选定的时间向用户发送电子邮件。当我在本地运行该系统时,该系统工作正常。但当我将其部署到heroku上时,不会发送电子邮件,控制台上也不会显示任何错误。 我已经尝试过允许从不太安全的应用程序进行访问,但似乎仍然不起作用 heroku日志 2019-10-22T08:31:47.237225+00:00 app[web.1]: Server started on port 31589 2019-10-22T08:31:47.333128+00:00 herok

我正在尝试创建一个电子邮件计划程序,在选定的时间向用户发送电子邮件。当我在本地运行该系统时,该系统工作正常。但当我将其部署到heroku上时,不会发送电子邮件,控制台上也不会显示任何错误。 我已经尝试过允许从不太安全的应用程序进行访问,但似乎仍然不起作用

heroku日志


2019-10-22T08:31:47.237225+00:00 app[web.1]: Server started on port 31589
2019-10-22T08:31:47.333128+00:00 heroku[web.1]: State changed from starting to up
2019-10-22T08:31:47.741159+00:00 app[web.1]: mongodb connected
2019-10-22T08:35:53.528505+00:00 heroku[router]: at=info method=GET path="/entries/search" host=diarygenie.herokuapp.com request_id=813c26df-4a70-40d3-a69c-5560354d11fb fwd="42.107.205.105" dyno=web.1 connect=0ms service=35ms status=302 bytes=393 protocol=https
2019-10-22T08:35:53.851462+00:00 heroku[router]: at=info method=GET path="/users/login" host=diarygenie.herokuapp.com request_id=87131056-e50f-4276-8b7e-90df4c36dadb fwd="42.107.205.105" dyno=web.1 connect=0ms service=27ms status=200 bytes=2660 protocol=https
2019-10-22T08:36:10.811904+00:00 heroku[router]: at=info method=POST path="/users/login" host=diarygenie.herokuapp.com request_id=d5efc1ea-8fd7-42da-8d43-31a7448cc0cd fwd="42.107.205.105" dyno=web.1 connect=0ms service=271ms status=302 bytes=261 protocol=https
2019-10-22T08:36:11.161024+00:00 heroku[router]: at=info method=GET path="/dashboard" host=diarygenie.herokuapp.com request_id=41445986-47c2-4f5d-a40b-1dd172c8d116 fwd="42.107.205.105" dyno=web.1 connect=0ms service=48ms status=200 bytes=3314 protocol=https
2019-10-22T08:36:14.226747+00:00 heroku[router]: at=info method=GET path="/email" host=diarygenie.herokuapp.com request_id=d35ba608-cd0d-4223-8c35-30afef184e62 fwd="42.107.205.105" dyno=web.1 connect=1ms service=43ms status=200 bytes=4121 protocol=https
2019-10-22T08:36:50.777252+00:00 heroku[router]: at=info method=POST path="/email" host=diarygenie.herokuapp.com request_id=55b0bcfa-be8f-4762-b562-edef914ee36b fwd="42.107.205.105" dyno=web.1 connect=0ms service=48ms status=302 bytes=261 protocol=https
2019-10-22T08:36:51.108211+00:00 heroku[router]: at=info method=GET path="/dashboard" host=diarygenie.herokuapp.com request_id=9e156601-51e7-4e7c-a9f4-14c8d28e3ba7 fwd="42.107.205.105" dyno=web.1 connect=0ms service=45ms status=200 bytes=3597 protocol=https
路由/email.js

router.post('/',ensureAuthenticated,(req,res) => {
    const {title,email,date,time} =req.body;
    var temp = time.split(':');
    var hour = parseInt(temp[0],10);
    var minute = parseInt(temp[1],10);
    //console.log(hour,minute);
    var mailAccountUser = 'diarygenie123@gmail.com'
    var mailAccountPassword = process.env.PASSWORD;
    var transport = nodemailer.createTransport(smtpTransport({
    service: 'gmail',
    auth: {
        user: mailAccountUser,
        pass: mailAccountPassword
    }
    }));


      const message = {
        from: 'genie@diarygenie.com', // Sender address
        to: req.user.email,         // List of recipients
        subject: title, // Subject line
        text: email // Plain text body
    };
    var mailDate = new Date(date); 
    //console.log(hour,minute);
    mailDate.setHours(hour);
    mailDate.setMinutes(minute);
    temp = new Date();

    //check if date is past date
    if(mailDate < new Date()){
      var dtToday = new Date();

      var month = dtToday.getMonth() + 1;
      var day = dtToday.getDate();
      var year = dtToday.getFullYear();
      if(month < 10)
        month = '0' + month.toString();
      if(day < 10)
        day = '0' + day.toString();

      var maxDate = year + '-' + month + '-' + day;
      var alert = [{msg:"Genie can't sent mails to the past XD .Please enter a future date and time"}];
      res.render('email',{errors:alert,name:req.user.name,maxDate:maxDate,title:title,email:email});
      return;
    }

    //validation passed

    mailDate.setSeconds(temp.getSeconds());

    //console.log(mailDate); //this date is in UTC


    //scheduling job to sent email at a given time
    nodeSchedule.scheduleJob(mailDate,() =>{
        transport.sendMail(message, function(err, info) {
            if (err) {
              console.log(err)
            } else {
              console.log(info);
              console.log('email sent successfully');
            }
            transport.close();
        });

    });
    req.flash('success_msg','Email scheduled successfully')
    res.redirect('/dashboard');  

});

module.exports = router;

router.post('/',确保重新验证,(req,res)=>{
const{title,email,date,time}=req.body;
var temp=时间分割(“:”);
var hour=parseInt(温度[0],10);
变量分钟=parseInt(温度[1],10);
//控制台日志(小时、分钟);
var mailAccountUser='1〕diarygenie123@gmail.com'
var mailAccountPassword=process.env.PASSWORD;
var transport=nodeEmailer.createTransport(smtpTransport({
服务:“gmail”,
认证:{
用户:mailAccountUser,
密码:mailAccountPassword
}
}));
常量消息={
发件人:'genie@diarygenie.com“,//发件人地址
收件人:req.user.email,//收件人列表
主题:标题,//主题行
文本:电子邮件//纯文本正文
};
var mailDate=新日期(日期);
//控制台日志(小时、分钟);
mailDate.setHours(小时);
mailDate.setMinutes(分钟);
临时=新日期();
//检查日期是否为过期日期
如果(邮件日期<新日期()){
var dtToday=新日期();
var month=dtToday.getMonth()+1;
var day=dtToday.getDate();
var year=dtToday.getFullYear();
如果(月<10)
month='0'+month.toString();
如果(第10天)
day='0'+day.toString();
变量maxDate=年+'-'+月+'-'+日;
var alert=[{msg:“精灵无法向过去的XD发送邮件。请输入未来的日期和时间”}];
res.render('email',{errors:alert,name:req.user.name,maxDate:maxDate,title:title,email:email});
返回;
}
//通过验证
mailDate.setSeconds(temp.getSeconds());
//console.log(mailDate);//此日期以UTC为单位
//安排作业在给定时间发送电子邮件
nodeSchedule.scheduleJob(mailDate,()=>{
transport.sendMail(消息、函数(错误、信息){
如果(错误){
console.log(错误)
}否则{
控制台日志(信息);
console.log(“电子邮件发送成功”);
}
transport.close();
});
});
请求flash('success_msg','Email scheduled successfully')
res.redirect('/dashboard');
});
module.exports=路由器;
  • 如果您确实将process.env.PASSWORD和所有其他env变量添加到heroku环境中,但仍然无法工作,请签出。
    • 这里也有类似的情况

是的,我在Herokooh中添加了所有环境变量!好的,您可以尝试记录req.body和您的.env,以查看传入的数据是否与您预期的相同,