在 Node.js 服务器上使用 NodeMailer 生成电子邮件时出错 - '451 4.7.0 临时服务器错误。 PRX4'

时间:2021-07-11 23:57:22

标签: node.js smtp office365 nodemailer

我使用托管在 GoDaddy 上的 Microsoft 365 Outlook 帐户。

当用户单击 [联系我们] 按钮时,我试图让我的 Node 服务器向我的 Outlook 帐户发送电子邮件。代码如下:

const nodemailer = require('nodemailer');

app.post('/contact', function(req, res){
    res.send(JSON.stringify(req.body));
    
    //generate email
    let transporter = nodemailer.createTransport({
        host: 'smtp.office365.com',
        port: 587,
        secure: false,
        auth: {
            user: 'myemail@mysite.com',
            pass:  'mypass'
        }
       });
    
    const mailOptions = {
        from: '"Administrator" <myemail@mysite.com>', 
        to: 'myemail@mysite.com', 
        subject: "Someone has messaged your website", 
        html: "<p>Name: " + req.body.fullName + "<br>Email: " + req.body.email + "<br>Message: " + req.body.msg + "</p>"
    };
    
    transporter.sendMail(mailOptions, function (err, info) {
        if(err)
          console.log(err)
        else
          console.log(info.messageId);
     });
     
});

记录到控制台的错误是:

'451 4.7.0 Temporary server error. Please try again later. PRX4  [CO2PR04CA0181.namprd04.prod.outlook.com]'

7/13 更新 另一个可能更有用的错误消息(如错误堆栈中的第一行)如下:

at SMTPConnection._formatError

2 个答案:

答案 0 :(得分:0)

我正在使用此功能向 Outlook 发送邮件,试试看是否有效。

我唯一能怀疑的就是 tls。


module.exports.sendEmail = function (options) {
    if(!options){
        throw new Error("invalid options");
    } else if(!options.auth) {
        throw new Error("missing user and pass");
    }

    var transporter = nodemailer.createTransport({
        host: 'smtp.office365.com', // Office 365 server
        port: 587,     // secure SMTP
        secure:false, // false for TLS - 
        auth: options.auth,
        tls: {ciphers: 'SSLv3'} // <<< try adding it
    });
    transporter.sendMail({
        from: options.from,
        sender: options.sender,
        replyTo: options.replyTo,
        to: options.to,
        subject: options.subject,
        cc:options.cc,
        bcc:options.bcc,
        text:options.text,
        html:options.html,
        attachments:options.attachments,
    }, function (err, info) {
        if (err && options.onError) {
            options.onError(err);
        }
        else if(options.onSuccess) {
            options.onSuccess(info);
        }
    });
}

****** caller ******
nodeoutlook.sendEmail({
    auth: {
        user: "user@outlook.com",
        pass: "********"
    },
    from: 'from@outlook.com',
    to: 'to@gmail.com',
    subject: 'subject',
    html: '<b>html</b>',
    text: 'text',
    replyTo: 'replyTo@gmail.com',
    attachments: [],

    onError: (e) => console.log(e),
    onSuccess: (i) => console.log(i)
}

答案 1 :(得分:0)

理解这是一个非常蹩脚的答案......但它是事实!!

我更改了我的电子邮件帐户的密码 (mypass) 然后它起作用了。