Nodemailer 未发送电子邮件,但未发生错误
Nodemailer is not sending e-mail, but no errors occur
我目前正在为我的网站制作一个注册确认电子邮件功能,我以前做过类似的事情。只是这次我 运行 遇到了问题;电子邮件未发送,而包裹 returns 没有错误。
我把代码断章取义,让它一启动就给我发电子邮件,但即使这样它也不起作用(虽然说它起作用)
我的代码(断章取义一):
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
将记录在控制台中。
在回复之前,请记住我已经是:
- 使用 google 16 个字符的密码。
- 使用真实值,只是出于隐私原因替换了它们。
编辑:代码放在我的主文件末尾时有效(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' 参数,但没有进一步发生,然后我的进程似乎也停止了 运行ning,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
}
您也可以尝试使用此方法为 Gmail 创建 Transport
transport = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: setting.mailService.user,
pass: setting.mailService.pass,
}
})
而且我认为您的电子邮件已根据 Google 规则进入垃圾邮件文件夹。
如果邮件不在垃圾邮件文件夹中,您可能需要降低 Gmail 安全设置。
当电子邮件在导出函数 (module.exports = () => {}
) 中时,它似乎根本无法工作,当我将它直接放在文件中而不是要求并调用它作为外部函数时,它工作了.
我理解你的问题,我看到一个永无止境的 while 循环可能会导致问题,所以如果你需要成功发生的事情,比如 res.sendStatus(200)
(因为你提到了 express )
只需将 'callback' 函数传递给您的函数,如下所示:
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)
}
}}
})
我目前正在为我的网站制作一个注册确认电子邮件功能,我以前做过类似的事情。只是这次我 运行 遇到了问题;电子邮件未发送,而包裹 returns 没有错误。
我把代码断章取义,让它一启动就给我发电子邮件,但即使这样它也不起作用(虽然说它起作用)
我的代码(断章取义一):
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
将记录在控制台中。
在回复之前,请记住我已经是:
- 使用 google 16 个字符的密码。
- 使用真实值,只是出于隐私原因替换了它们。
编辑:代码放在我的主文件末尾时有效(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' 参数,但没有进一步发生,然后我的进程似乎也停止了 运行ning,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
}
您也可以尝试使用此方法为 Gmail 创建 Transport
transport = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: setting.mailService.user,
pass: setting.mailService.pass,
}
})
而且我认为您的电子邮件已根据 Google 规则进入垃圾邮件文件夹。
如果邮件不在垃圾邮件文件夹中,您可能需要降低 Gmail 安全设置。
当电子邮件在导出函数 (module.exports = () => {}
) 中时,它似乎根本无法工作,当我将它直接放在文件中而不是要求并调用它作为外部函数时,它工作了.
我理解你的问题,我看到一个永无止境的 while 循环可能会导致问题,所以如果你需要成功发生的事情,比如 res.sendStatus(200)
(因为你提到了 express )
只需将 'callback' 函数传递给您的函数,如下所示:
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)
}
}}
})