#node.js #express #heroku #deployment #nodemailer
#node.js #экспресс #heroku #развертывание #nodemailer
Вопрос:
Я использую nodemailer
для отправки электронной почты на свой сервер с помощью express
. На локальном хостинге все работало отлично, но когда я развертываю его на Heroku, он больше не работает, похоже, он не поддерживается nodemailer
на Heroku (это то, что я исследовал). Это мой код, не могли бы вы помочь мне разобраться с этим. Большое вам спасибо и хорошего дня
This is sending single mail
exports.send_mail = (req, res, next) => {
var {subjectTo, mailList, content} = req.body;
var {attachURL} = req;
var transporter = nodemailer.createTransport({
service: 'gmail',
secure: false,
port: 465,
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
});
var mailOptions = {
from: 'sale.shopeeholic@gmail.com',
to: mailList,
cc: mailList,
subject: subjectTo,
text: `${content} n Attached files: ${attachURL}`,
};
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
console.log(err);
return res.status(400).json({err});
} else {
return res.status(200).json({message: `Mail sent to ${mailList}`});
}
});
};
This is sending merge mail/multiple mail
exports.merge_mail = (req, res, next) => {
console.log('merge mail begin');
const mailOptionList = req.body;
// {mails, mailContent, mailTitle}
var counter = 0;
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
});
for (var i = 0; i < mailOptionList.length; i ) {
var mailOptions = {
from: 'sale.shopeeholic@gmail.com',
to: mailOptionList[i].mails.join(','),
cc: mailOptionList[i].mails.join(','),
subject: mailOptionList[i].mailTitle,
text: mailOptionList[i].mailContent,
};
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
console.log(err);
return res
.status(400)
.json({err, message: `trouble in sending mail at index ${i}`});
} else {
console.log(`mail sent to ${JSON.stringify(mailOptionList[i].mails)}`);
counter ;
}
});
console.log(`mail sent to ${JSON.stringify(mailOptionList[i].mails)}`);
counter ;
console.log(counter);
}
if (counter === mailOptionList.length) {
return res.status(200).json({message: 'mail sent all'});
}
Ответ №1:
Вероятно process.env.EMAIL
, и process.env.PASSWORD
не определены. Вы должны установить переменные env в Heroku. Вот как:
Комментарии:
1. Вы пробовали заменить
service: "gmail"
наhost: "smtp.gmail.com"
?2. о, я еще не добавил для него хост, но я установил для него порт, я исследовал и, похоже, это порт по умолчанию для nodemailer на Heroku
3. Попробуйте эту конфигурацию:
host: 'smtp.gmail.com'
,port: 587
,secure: false