首页 > 解决方案 > Nodejs Nodemailer:使用现有代码向 API 密钥发送网格 SMTP 用户名和密码错误:550

问题描述

目前我正在使用使用nodejs库“('nodemailer')”TransporterOption的sendgrid:

配置:

 transporterOption: {
        host: process.env.SMTP_HOST, // smtp.sendgrid.net
        pool: true,
        maxConnections: 20,
        rateDelta: 1000,
        rateLimit: 150,        
        auth: {
            user: process.env.USER_NAME,
            pass: process.env.PASSWORD
        }
    },

发送代码:

const config = require('./config');
const nodeMailer = require('nodemailer');
const htmlToText = require('nodemailer-html-to-text').htmlToText;



const transporter = nodeMailer.createTransport(config.transporterOption);

transporter.use('compile', htmlToText());


try {

    let mailOptions = {
        headers: { 'X-SMTPAPI': `{"category":["${myid}"]}` },
        from: `"myname" <${toemail}>`,
        replyTo: `"myname" <${toemail}>`,
        to: `"name" <${emailAdr}>`,
        subject: mysubject,
        text: mytextbody,
        html: myhtmlbodymsg

    }
} catch (e) {

    console.log(e);
}

工作正常,没有问题。

传递 api_key 以响应收到此错误“邮件命令失败:550 不允许未经身份验证的发件人”时,从用户名/密码迁移到 API 密钥</p>

选项1:

transporterOption: {
        host: process.env.SMTP_HOST, // smtp.sendgrid.net
        pool: true,
        maxConnections: 20,
        rateDelta: 1000,
        rateLimit: 150,        
        auth: {
            api_key: process.env.SENDGRID_API_KEY // fakeKEY.kashdkjhjkdhsakjdhksajhd
        }
    },

"err":{"message":"缺少 "PLAIN" 的凭据","name":"Error","stack":"错误: 缺少 "PLAIN" 的凭据\n

选项 2:

transporterOption: {
        host: process.env.SMTP_HOST, // smtp.sendgrid.net
        pool: true,
        maxConnections: 20,
        rateDelta: 1000,
        rateLimit: 150,        
        auth: {
            Username: process.env.USER_NAME, //’apikey’
            Password: process.env.SENDGRID_API_KEY // fakekeyssssjhkjsahdkjsahdkjhsa
        }
    },

错误:“{“message”:“邮件命令失败:550 不允许未经身份验证的发件人”,“名称”:“错误”,“堆栈”:“错误:邮件命令失败:550 不允许未经身份验证的发件人\n”</p >

选项 3:

transporterOption: {
        host: process.env.SMTP_HOST, // smtp.sendgrid.net
        pool: true,
        maxConnections: 20,
        rateDelta: 1000,
        rateLimit: 150,        
        auth: {
            api_user: 'apikey',
        api_key: process.env.SENDGRID_API_KEY // fakekeyssssjhkjsahdkjsahdkjhsa
        }
    },

错误:“{“message”:“邮件命令失败:550 不允许未经身份验证的发件人”,“名称”:“错误”,“堆栈”:“错误:邮件命令失败:550 不允许未经身份验证的发件人\n”</p >

标签: node.jsemailsendgridnodemailersendgrid-api-v3

解决方案


我还需要从基本身份验证迁移到 Sendgrid 的 API 密钥。
我尝试通过以下方式使用 API 密钥,并且可能有效,但不知道我们是否仍在通过这种方式使用基本身份验证,由于强制 2FA 很快就会失败。
让我知道我们在这里所做的是否正确。

// This below auth object is specific to NODEMAILER configuration options
// This is NOT the same for sendgrid native API configuration

// you can try with your keys named Username/Password but mine works with user/pass
auth: {
  'user': 'apikey', // <--- keep as is
  'pass': 'SG.aslknwefn_RANDOM_FAKE_KEY', // <--- your api key
}

sendgrid 参考链接:
https ://sendgrid.com/docs/for-developers/sending-email/upgrade-your-authentication-method-to-api-keys
https://sendgrid.com/docs/for-developers/sending -电子邮件/身份验证/


推荐阅读