2015-04-15 1 views
1

Я хотел бы знать, почему nodemailer не отправляет электронные письма, но он не возвращает никаких ошибок, поэтому я не знаю, что делать. Вот мой код (в значительной степени скопирована из документации nodemailer):Nodemailer не отправляет электронные письма и не возвращает сообщение об ошибке

var cors = require('cors'); 
var corsOptions = { 
    origin: 'http://davidmichael.me', 
    allowedHeaders: 'accept, content-type', 
    methods: 'GET, POST' 
}; 

var nodemailer = require('nodemailer'); 

module.exports = function(app){ 
    app.options('/email', cors(corsOptions)); 
    app.post('/email', cors(corsOptions), function(req, res){ 
     var transporter = nodemailer.createTransport({ 
      service: 'Gmail', 
      auth: { 
       user: 'my-email', 
       pass: 'my-password' 
      } 
     }); 

     var mailOptions = { 
      from: 'David Michael <my-email>', 
      to: 'recipient-email', 
      subject: 'Just verifying your email address ✔', 
      text: 'Hello to myself!', 
      html: '<p><b>Hello</b> to myself</p>' 
     }; 
     var emailMessage = ""; 

     transporter.sendMail(mailOptions, function(error, info){ 
      if(error){ 
       emailMessage = "there was an error :-(, and it was this: " + error.message; 
      }else{ 
       emailMessage = "Message sent: " + info.response; 
      } 
     }); 
     //transporter.close(); 
     return res.json({ 
      message: "success", 
      email: emailMessage 
     }); 
    }); 
}; 

Каждый раз, когда я пытаюсь его, он успешно возвращает объект JSON в конце следующим образом:

{"message":"success","email":""} 

Возможно, я должен отметить, что Я использую CORS, потому что я хочу использовать адрес электронной почты пользователя. Приложение на стороне клиента отправляет HTTP-запрос POST с объектом JSON, содержащим их адрес электронной почты, однако текущий код ничего не делает с этим. Я хочу сначала запустить основной механизм.

Я использую Openshift. Может ли это изменить ситуацию?

Кроме того, я пробовал использовать адреса электронной почты, отличные от Gmail, и то же самое происходит.

Любые идеи о том, где я ошибаюсь?

ответ

1

Похоже, вы возвращаете ответ JSON до того, как возвращается асинхронный метод. Попробуйте поместить ответ в обратный вызов:

transporter.sendMail(mailOptions, function(error, info){ 
     if(error){ 
      emailMessage = "there was an error :-(, and it was this: " + error.message; 
     }else{ 
      emailMessage = "Message sent: " + info.response; 
     } 
     return res.json({ 
      message: "success", 
      email: emailMessage 
     }); 
    }); 
    //transporter.close(); 

Возможно, вы не захотите использовать это на практике. Ожидание отправки электронной почты может занять много времени, и я подозреваю, что вы увидите много тайм-аутов. Это должно помочь вам в правильном направлении!

Это также предполагает, что ваш адрес электронной почты настроен, и вы также ввели настоящих получателей. Я знаю, что у меня были проблемы с Gmail, потому что они действительно хороши в обнаружении ботов :)

+0

Большое спасибо! Ваше предложение работает. Я не собирался возвращать что-либо на практике; это было просто для тестирования. –

+0

Счастливый я мог бы помочь. – Brennan

Смежные вопросы