目前,我使用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”
答案 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所写。不利的一面是它在后台使用供应商特定的库。