SendGrid似乎阻止我的节点js服务器发送电子邮件。
我在发送电子邮件的回复中收到此错误消息:
"提供的授权许可无效,已过期或已撤销"
我也有一个API密钥设置,并遵循文档。
答案 0 :(得分:66)
您需要使用API KEY GENERATED
请勿使用API密钥ID
如果您在创建密钥时未将其记录在某处,则需要创建新密钥,然后您可能希望删除旧密钥,因为如果您不知道它是什么就没用是
仅供参考:上面屏幕截图中的API密钥已被删除。我立刻删除了它,所以请不要担心我泄漏了那把钥匙。
答案 1 :(得分:2)
这是一个迟到的答案和JAVA导向..但我只是复制了文档,并没有注意到..
M3dEntities m3d = new M3dEntities();
private void EnrollMedSelectionFrm_Load(object sender, EventArgs e)
{
var items = from i in m3d.items
where i.ItemGroup == "Medicine"
select new
{
i.PK_Items,
i.ItemID,
i.ItemDesc,
i.GenericName
};
if (items != null)
{
DataTable dt = new DataTable();
foreach (DataGridViewColumn col in ItemSelectionDataGridView.Columns)
{
dt.Columns.Add(col.Name);
col.DataPropertyName = col.Name;
};
foreach (var element in items)
{
var row = dt.NewRow();
row["PK_Items"] = element.PK_Items;
row["ItemID"] = element.ItemID;
row["ItemDesc"] = element.ItemDesc;
row["GenericName"] = element.GenericName;
dt.Rows.Add(row);
}
ItemSelectionDataGridView.DataSource = dt;
}
}
private void SelectBtn_Click(object sender, EventArgs e)
{
EnrollMedicationFrm enrollfrm = (EnrollMedicationFrm)Application.OpenForms["EnrollMedicationFrm"];
DataTable dt = new DataTable();
dt = (DataTable)ItemSelectionDataGridView.DataSource;
DataRow[] result = dt.Select("SelectedChkBox = 1");
if (result.Count() < 1)
{
enrollfrm.SelectedItems = null;
}
else
{
enrollfrm.SelectedItems = result.CopyToDataTable();
}
this.DialogResult = DialogResult.OK;
}
我只是把钥匙放在那里,没有看到getEnv 。愚蠢当然..但是当试图让事情快速起作用时......
答案 2 :(得分:2)
在Sendgrid v3中,我在Node JS中使用env变量时遇到了类似的问题。如果我使用env变量,我会得到上述问题。但是,如果我将字符串放入require流程,它就可以工作。
不起作用
SENDGRID_API_KEY=SG.XXXXXXXXXXXXXXXXXXX
var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);
<强>作品强>
var sg = require('sendgrid')('SG.XXXXXXXXXXXXXXXXXXX');
将SG.XXXXXXXXXXXXXXXXXXX替换为生成的API密钥(在密钥生成期间只能看到一次)。
修改强>
注意:请确保不要将其保存到公共存储库。如果您这样做,任何人都可以使用您的API密钥,并且您的帐户将暂时被Sendgrid团队暂停,直到您从存储库中删除它。
答案 3 :(得分:1)
对我来说,我只需要生成一个新的API密钥即可。由于某些奇怪的原因,以前的API密钥已失效,因此我还针对这种情况添加了警报
答案 4 :(得分:0)
如果您正在使用节点js,请确保在需要sendgrid / nodemailer模块的文件中包含 require('dotenv')。config()行。如果没有它,则sendgrid传输器将具有未定义的值,而不是api_key。
答案 5 :(得分:0)
就我而言,我尝试使用 telnet 调试连接并一直被拒绝。
事实证明这两个不等价,echo
将在编码字符串中包含 \n
。
echo 'apikey' | base64
printf 'apikey' | base64
是的,请确保 API 密钥中不包含换行符。
答案 6 :(得分:0)
这是我的解决方案:
安装 dotenv 包:npm i dotenv
转到应用程序的最早入口点(即 index.js)并将其放在顶部:
const dotenv = require('dotenv').config();
创建一个 .env 文件并添加 SENDGRID_API_KEY=
在您使用 sendgrid 的文件中,将此添加到顶部:
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
完成。
答案 7 :(得分:-1)
我遇到了同样的问题,在我验证了我的电子邮件地址并启用了 2FA 后它就消失了。