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 将记录在控制台中。

在回复之前,请记住我已经是:

编辑:代码放在我的主文件末尾时有效(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 安全设置。

https://nodemailer.com/usage/using-gmail/

https://www.google.com/settings/security/lesssecureapps

当电子邮件在导出函数 (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)
           }
    }}
})