Nodejs Nodemailer:使用现有代码将Sendgrid SMTP用户名和密码发送到API密钥错误:550

时间:2020-10-21 19:30:04

标签: node.js email sendgrid nodemailer sendgrid-api-v3

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

config:

 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密钥 在响应中传递api_key时收到此错误“邮件命令失败:550个未经身份验证的发件人”

选项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”“,”名称“:”错误“,”堆栈“:”错误:缺少凭据 “普通” \ 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
        }
    },

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

选项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
        }
    },

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

2 个答案:

答案 0 :(得分:1)

我还需要从基本身份验证迁移到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-email/authentication/

答案 1 :(得分:0)

您可以安装nodemailer-sendgrid软件包,然后创建如下传输:

const nodemailer = require('nodemailer');
const nodemailerSendgrid = require('nodemailer-sendgrid');
const transport = nodemailer.createTransport(
    nodemailerSendgrid({
        apiKey: process.env.SENDGRID_API_KEY
    })
);

如果您使用的是TypeScript,还可以使用npm install --save @types/nodemailer-sendgrid安装相应的类型。

似乎这已取代了过时的nodemailer-sendgrid-transport,并由author of nodemailer所写。不利的一面是它在后台使用供应商特定的库。