Nodemailer登录无效:451 4.7.0临时服务器错误

时间:2017-07-10 14:13:53

标签: node.js outlook office365 azure-active-directory nodemailer

我正在尝试使用oauth2

从office 365 Outlook帐户发送电子邮件

但我收到了以下错误

Invalid login: 451 4.7.0 Temporary server error. Please try again later. PRX4  [MA1PR01CA0110.INDPRD01.PROD.OUTLOOK.COM]

这是我的代码

let sendEmail: (accessToken) => {
    return new Promise((resolve, reject) => {
        let options = {
            "to": "xxx",
            "subject": "hello from nodemailer",
            "text": "Hello from nodemailer again"
            "from": 'xxx'
        }
        let transporter = nodemailer.createTransport({
            host: 'smtp.office365.com',
            port: 587,
            secure: true,
            auth: {
                type: 'OAuth2',
                user: options.from,
                accessToken: accessToken
            },
            tls: { ciphers: 'SSLv3' }
        })
        transporter.sendMail(options, (err, info) => {
            return err ? reject(err) : resolve(info);
        })
    })
}  

还尝试使用端口:465 ,但收到错误

connect ETIMEDOUT 40.100.136.18:465

我在创建访问令牌时也提供了“以用户身份发送邮件”权限。

我错过了什么吗?请提出解决方案。

1 个答案:

答案 0 :(得分:1)

根据代码,您似乎将SMTP身份验证与Oauth2混合使用。

经过一番研究,Office 365不支持此功能(请参阅this thread)。要使用SMTP,您需要提供用于连接服务器的用户名/密码。您可以参考this thread获取详细的代码示例,以连接Office365的SMTP服务器。

如果您想通过Oauth身份验证检索邮件,可以参考此blog。作者(Jason Johnston [MSFT])也在his's GitHub上提供了完整的代码示例。