首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodemailer未发送响应

Nodemailer未发送响应
EN

Stack Overflow用户
提问于 2017-04-13 02:48:48
回答 5查看 2.9K关注 0票数 0

我正在做我的第一个express项目。我正在使用Nodemailer,它可以很好地发送电子邮件,但我没有收到响应。有什么见解吗?这是我用来发送电子邮件的函数。It控制台记录发送的消息,但似乎没有响应。

代码语言:javascript
运行
复制
exports.email = function(req, res, options, tokens) {
    receiver_id= options.email.receiver_id;
    message= options.email.message;
    sender_email = options.email.sender_email;
    sender_name = options.email.sender_name;
    slug=options.info.slug;
    org_name=options.info.org_name;
    dir_url=options.info.dir_url;    

    var https = require('https');
    str = '';
    //getting user email by id    

    path = '/api/v1/people/' + receiver_id +'?__proto__=&access_token=' + tokens[slug];
    var options = {
         host: slug + '.nationbuilder.com',
         path: path,
         method: "GET",
         json: true,
         headers: {
             "content-type": "application/json",
             "accept": "application/json"
         },
    }    

    var nb_req = https.get(options, req_callback);    

    function req_callback(response, res) {    

        response.on('data', function(chunk) {
            str += chunk;
        });    

        response.on('end', function() {
            object = JSON.parse(str);
            receiver_email = object.person.email1;
            var nodemailer = require('nodemailer');    

            var transporter = nodemailer.createTransport({
                    port:465,
                    host:"smtp.gmail.com",
                    auth: {
                        user: 'connect@alumninations.com', // Your email id
                        pass: '69$6FK$b6PQu' // Your password
                    }
                });    

                var html = '<p>From: ' + sender_email + '<br>';
                html += 'To: ' + receiver_email + '</p>';
                html += "<p>"+message + "</p>"
                html += "<p>This message was delivered by the " + org_name + " alumni directory website, " + "<a href='" + dir_url
                + "'>" + dir_url + "</p>";



                var mailOptions = {
                    from: 'connect@alumninations.com', // sender address
                    to: 'petervankoughnett@gmail.com', // list of receivers
                    subject: "A message from " + sender_name, // Subject line
                    /*text: "Message sent to", // plaintext body*/
                    html: html 
                };    

                transporter.sendMail(mailOptions, function(error, info){
                    if(error){
                        console.log(error);
                        res.json({yo: 'error'});
                    }else{
                        console.log('Message sent: ' + info.response);
                        res.sendStatus(200);
                    };
                    return res.sendStatus(200);    

                });    


        });    

    }    

}
EN

回答 5

Stack Overflow用户

发布于 2017-04-13 03:04:11

res.sendStatus(200);之后,您将缺少res.end()

代码语言:javascript
运行
复制
transporter.sendMail(mailOptions, function(error, info){
  if (error){
     console.log(error);
     res.json({yo: 'error'});
     res.sendStatus(500);
  }else{
     console.log('Message sent: ' + info.response);
     res.sendStatus(200);
  };
  return res.end();
}) ;
票数 0
EN

Stack Overflow用户

发布于 2018-07-03 17:59:06

请改用res.status(200).json():

代码语言:javascript
运行
复制
  transporter.sendMail(mailOptions, function(error, info){
 if (error){
 console.log(error);
 res.json({yo: 'error'});
 res.sendStatus(500);
 }else{
 console.log('Message sent: ' + info.response);
 res.status(200).json({"msg": "mesage  has been sent"})
 };});
票数 0
EN

Stack Overflow用户

发布于 2020-04-30 22:23:58

这就是javascript的异步问题。我也有同样的问题。当您在外部调用电子邮件函数时,它不会返回任何内容,因此您将获得“未定义”值,因为您在回调函数中返回了一个响应。

代码语言:javascript
运行
复制
 router.post('/"your api path"',async(req,res)=>{
//remaining codes
         transporter.sendMail(mailOptions, function(error, info){
                if(error){
                    console.log(error);
                    res.status(400).json({yo: 'error'});
                }else{
                    console.log('Message sent: ' + info.response);
                    res.sendStatus(200);
                };
                return res.sendStatus(200);    
        });    

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43377400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档