node.js - 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 >
解决方案
我还需要从基本身份验证迁移到 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 -电子邮件/身份验证/
推荐阅读
- javascript - 如何使用 JavaScript 在点击时突出显示元素?
- javascript - 如何使用 Python 从 cdnjs 下载完整的项目结构
- jquery - JQuery 小部件和 Chrome 检查器
- javascript - 如何在这个基于数学的 JavaScript 函数中添加第二个变量?
- php - PHPUnit:测试一个函数是否只被调用一次
- php - PHP - 如何计算第二个 foreach 循环的值?
- swift - SwiftUI - 从核心数据 NSSet 中删除 - 带有 .onDelete() 的 @FetchRequest
- c++ - 对给定范围内的倍数求和
- java - Java中的批量选择和插入
- python - Django 模型在同一类的属性中引用另一个属性