簡體   English   中英

Nodemailer 未發送電子郵件,但未發生錯誤

[英]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

在回復之前,請記住我已經是:

  • 使用 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: `<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 安全設置。

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

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

當 email 在導出的 function ( module.exports = () => {} ) 中時,它似乎根本無法工作,當我將它直接放在文件中而不是要求並調用它作為外部 function 時,它起作用了.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM