通过Sendgrid API发送电子邮件时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Sendgrid API发送电子邮件时出错相关的知识,希望对你有一定的参考价值。

在生产服务器上,我收到以下错误

init()获得了意外的关键字参数'apikey'”]

开发服务器上的相同代码正在工作。

我的生产服务器正在运行gunicorn,并且我已将环境变量SENDGRID_API_KEY添加到gunicorn.service文件中。我已经重新启动了gunicorn和nginx。我可以看到环境变量已加载。

我呼叫发送电子邮件的方法如下:

def sendtestemail(to):
    sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
    from_email = Email("<myemail>@<mydomain>.com")
    to_email = Email(to)
    subject = "Sending with SendGrid is Fun"
    content = Content("text/plain", "and easy to do anywhere, even with Python")
    mail = Mail(from_email, subject, to_email, content)
    response = sg.client.mail.send.post(request_body=mail.get())
    return [response.status_code, response.body, response.headers]
答案

该问题源于sendgrid 6.0中引入的重大更改。 apikey的关键字参数已删除,并替换为位置参数。

为了解决您的示例,请从参数中删除apikey=,然后将api_key作为位置参数传递。

    sg = sendgrid.SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))

[回顾所有先前的示例以及GitHub文档时,这可能会有些混乱,但是this example on the official documentation确实正确。


注意:我确实在询问您的问题时,确实确实在遵循我上面链接的文档。在few issues opened中,文档在相当一段时间内仍不准确,但在5月便已解决。

以上是关于通过Sendgrid API发送电子邮件时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 sendgrid/mail 发送时,如何向我的电子邮件添加取消订阅链接

将 SendGrid SMTP 集成用于批量电子邮件

通过 Firebase 函数发送电子邮件时出现 Firebase SendGrid 错误 - 错误:错误请求

Vercel 不发送电子邮件

Azure : 通过 SendGrid 发送邮件

Sendgrid - 活动显示已发送电子邮件但未收到电子邮件