Sendgrid简介会引发禁止的错误

时间:2020-04-14 15:34:32

标签: python sendgrid

我正在遍历Sendgrid的intro material for Python,但是执行示例代码会引发403-Forbidden错误。

我采取的步骤:

  1. 按照说明创建API密钥和sendgrid.env文件。
  2. 使用python 3.5创建一个conda环境:conda create -n sendgrid python=3.5
  3. 安装sendgrid:(sendgrid) pip install sendgrid
  4. 运行示例:(sendgrid) python main.py

main.py包含从上面链接的示例页面复制的确切代码。

问题:运行main.py会引发错误HTTP Error 403: Forbidden

我尝试过的事情:

  • 在该示例中,我尝试在电子邮件之间进行切换,但没有改变结果。
  • 我也尝试了相同的流程,但使用NodeJS但结果相同。

关于我在做什么错的任何想法?

1 个答案:

答案 0 :(得分:0)

赋予API Key完整访问权限,请按照以下步骤操作:

  1. 设置
  2. API密钥
  3. 编辑API密钥
  4. 完全访问权限
  5. 更新

将您的域列入白名单,请按照以下步骤操作:

  1. 设置
  2. 发件人身份验证
  3. 域身份验证
  4. 选择DNS主机
  5. 输入您的域名
  6. 复制所有记录并将其放入高级DNS管理控制台

注意:添加记录时,请确保主机中没有域名。裁剪出来。

如果您不想对域进行身份验证,也可以尝试使用单方发件人验证

注意:记录可能需要一些时间才能开始起作用。


如果您使用的是pylinter,e.message会说

Instance of 'Exception' has no 'message' member

这是因为message属性是由sendgrid动态生成的,由于运行时之前pylinter不存在,因此pylinter无法访问。

因此,为防止这种情况,在文件顶部或print(e.message)行上方,您需要添加以下任意一项,它们含义相同-

# pylint: disable=no-member

E1101是no-member的代码,可以罚款here

# pylint: disable=E1101

现在下面的代码应该可以为您工作了。只需确保在环境中设置了SENDGRID_API_KEY。如果不是,您也可以直接将其替换为os.environ.get("SENDGRID_API_KEY"),但这不是一个好习惯。

# pylint: disable=E1101

import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

message = Mail(
    from_email="from_email@your-whitelisted-domain.com",
    to_emails=("recipient1@example.com", "recipient2@example.com"),
    subject="Sending with Twilio SendGrid is Fun",
    html_content="<strong>and easy to do anywhere, even with Python</strong>")
try:
    sg = SendGridAPIClient(os.environ.get("SENDGRID_API_KEY"))
    response = sg.send(message)
    print(response.status_code)
    print(response.body)
    print(response.headers)
except Exception as e:
    print(e.message)