[英]Nodemailer is not sending e-mail, but no errors occur
我目前正在為我的網站進行注冊確認 email function,我以前做過類似的事情。 只有這一次我遇到了問題; 電子郵件未發送,而 package 未返回任何錯誤。
我把代碼斷章取義,讓它一啟動就給我發電子郵件,但即使這樣它也不起作用(雖然說它起作用)
我的代碼(斷章取意):
const nodemailer = require('nodemailer')
const mailTransporter = nodemailer.createTransport({
host: `smtp.gmail.com`,
port: 465,
secure: true,
auth: {
"user": "<theemail>@gmail.com",
"pass": "<thekey>"
}
})
mailTransporter.sendMail({
from: `<the-email>@gmail.com`,
to: `<myemail>@gmail.com`,
subject: `some subject`,
text: `some text`
}, (err, data) => {
if (err)
console.log(err)
else
console.log(`success`)
})
運行此代碼時,控制台中會記錄success
。
在回復之前,請記住我已經是:
編輯:代碼放在我的主文件(index.js)的末尾時有效:
const nodemailer = require('nodemailer')
const mailTransporter = nodemailer.createTransport({
host: `smtp.gmail.com`,
port: 465,
secure: true,
auth: {
user: "<email>@gmail.com",
pass: "<pass>"
}
})
mailTransporter.sendMail({
from: `<sendemail>@gmail.com`,
to: `<myemail>@gmail.com`,
subject: `some subject`,
text: `some text`
}, (err, data) => {
if (err)
console.log(err)
else
console.log(`success`)
})
但是,代碼在我的模塊中不起作用(記錄了“set”參數,但沒有進一步發生,然后我的進程似乎也停止運行,express 停止回復請求):
module.exports = (set) => {
let success = undefined
console.log(set)
const mt = nodemailer.createTransport({
host: `smtp.gmail.com`,
port: 465,
secure: true,
auth: {
user: "<email>@gmail.com",
pass: "<pass>"
}
})
mt.sendMail({
from: `<sendemail>@gmail.com`,
to: `<myemail@gmail.com`,
subject: `some subject`,
text: `some text`
}, (err, data) => {
if (err)
console.log(err)
else
console.log(`success`)
})
while (success == undefined) {}
return success
}
我理解你的問題,我看到一個永無止境的 while 循環可能會導致問題,所以如果你需要成功發生一些事情,比如res.sendStatus(200)
(因為你提到了 express )只需將“回調”function 傳遞給你的功能是這樣的:
module.exports = (set,callback) => {
let success = undefined
console.log(set)
const mt = nodemailer.createTransport({
host: `smtp.gmail.com`,
port: 465,
secure: true,
auth: {
user: "<email>@gmail.com",
pass: "<pass>"
}
})
mt.sendMail({
from: `<sendemail>@gmail.com`,
to: `<myemail@gmail.com`,
subject: `some subject`,
text: `some text`
}, callback)
}
在你的路由器中:
router.post("sendEmail",(req,res)=>{
send(yourset,(err, data) => {
if (err)
console.log(err)
res.sendStatus(500)
else{
console.log(`success`)
res.sendStatus(200)
}
}}
})
您也可以嘗試使用此方法為 Gmail 創建傳輸
transport = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: setting.mailService.user,
pass: setting.mailService.pass,
}
})
我認為您的 email 已根據 Google 規則進入垃圾郵件文件夾。
如果郵件不在垃圾郵件文件夾中,您可能需要降低 Gmail 安全設置。
當 email 在導出的 function ( module.exports = () => {}
) 中時,它似乎根本無法工作,當我將它直接放在文件中而不是要求並調用它作為外部 function 時,它起作用了.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.