我目前正在為我的網站制作注冊確認電子郵件功能,我之前也做過類似的事情。只有這一次我遇到了問題;電子郵件沒有發送,而包裹沒有回傳錯誤。
我把代碼斷章取意,讓它一啟動就給我發電子郵件,即使那樣它也不起作用(雖然說它起作用)
我的代碼(斷章取義):
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”引數,但沒有進一步發生,我的行程似乎也停止運行,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: `<[email protected]`,
subject: `some subject`,
text: `some text`
}, (err, data) => {
if (err)
console.log(err)
else
console.log(`success`)
})
while (success == undefined) {}
return success
}
uj5u.com熱心網友回復:
廣告我理解你的問題,我看到一個永無止境的while回圈可能會導致問題,所以如果你需要成功發生一些事情res.sendStatus(200)(因為你提到了express),只需將一個“回呼”函式傳遞給你的函式,如下所示:
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: `<[email protected]`,
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)
}
}}
})
uj5u.com熱心網友回復:
您也可以嘗試此方法為 Gmail 創建傳輸
transport = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: setting.mailService.user,
pass: setting.mailService.pass,
}
})
而且我認為您的電子郵件已根據 Google 規則進入垃圾郵件檔案夾。
如果郵件不在垃圾郵件檔案夾中,您可能需要降低 Gmail 安全設定。
https://nodemailer.com/usage/using-gmail/
https://www.google.com/settings/security/lesssecureapps
uj5u.com熱心網友回復:
似乎電子郵件在匯出函式module.exports = () => {}(
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484487.html
標籤:javascript 节点.js npm 节点邮件程序
