首页 > 编程问答 >通过 Sendgrid API 发送电子邮件时出错

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

时间:2024-07-26 07:20:25浏览次数:8  
标签:python django sendgrid sendgrid-api-v3

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

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]

错误信息 " init () got an unexpected keyword argument 'apikey'" 说明你正在使用的 SendGrid 库版本不支持将 apikey 作为 SendGridAPIClient 构造函数中的关键字参数。这可能是由于生产服务器和开发服务器上的 SendGrid 库版本不同造成的。

以下是如何解决这个问题的步骤:

1. 检查 SendGrid 库版本:

  • 在你的生产服务器和开发服务器上,分别运行以下命令,检查 SendGrid 库版本: bash pip freeze | grep sendgrid

  • 确保两个版本相同。如果不是,请在你的生产服务器上更新 SendGrid 库: bash pip install --upgrade sendgrid

2. 如果 SendGrid 库版本相同,尝试将 API 密钥传递为位置参数,而不是关键字参数:

  • sendtestemail 函数中的这行代码:

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

  • 替换为:

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

3. 重启 Gunicorn 和 Nginx:

  • 完成上述任何更改后,请确保重启 Gunicorn 和 Nginx 以使更改生效。

    bash sudo systemctl restart gunicorn sudo systemctl restart nginx

其他建议:

  • 虚拟环境: 为了避免此类版本冲突,最好在开发和生产环境中使用虚拟环境。
  • 错误处理: 考虑在你的代码中添加错误处理机制,以更好地诊断和处理 API 调用期间可能出现的任何问题。

如果问题仍然存在,请提供以下信息,以便我进一步帮助:

  • 生产服务器和开发服务器上 SendGrid 库的确切版本。
  • 你正在使用的 SendGrid 库文档链接。
  • 完整的错误跟踪信息。

标签:python,django,sendgrid,sendgrid-api-v3
From: 55799362

相关文章

  • Python 和 ReportLab。如何更改 Table 对象中的字体和字体大小?
    我需要更改表对象(ReportLab)中特定单元格的文本样式。据我了解,它可以通过TableStayle类完成,但我找不到示例。my_table=Table(data,colWidths=column_widths,rowHeights=row_heghts)my_colour_black=[0,0,0]my_colour_ligt_gray=[0.8,0.8,0.8]my_colour_gra......
  • 如何在Python中查找字符串中所有出现的子字符串,同时忽略某些字符?
    我想找到所有出现的子字符串,同时忽略某些字符。我怎样才能在Python中做到这一点?示例:long_string='thisisat`es"t.Doesthetestwork?'small_string="test"chars_to_ignore=['"','`']print(find_occurrences(long_string,small_string......
  • 如何让 python 为我提供正确的函数解决方案并根据符号更改零的格式?
    我正在尝试制作一个二次公式计算器。一切看起来都很好,但是,当我输入一些函数(例如x^2-2x+1和x^2+2x+1)时,当它们有不同的解决方案时,它会给我相同的零。我遇到的另一个问题是,在代码的末尾,format_solution(root),我希望它能够根据符号改变格式。例如,如果零是(x-1),我不希望它输入(......
  • PYTHON 代码执行错误 - 冻结 importlib._bootstrap>(1165)_find_and_load()?
    在MACOS10.15(CATALINA)上执行此PYTHON代码时出现以下错误。我正在使用IDLEShell编写PYTHON3.11。Python3.11.4(v3.11.4:d2340ef257,Jun 62023,19:15:51)[Clang13.0.0(clang-1300.0.29.30)]ondarwinType"help","copyright","credits"o......
  • 如何修复我的 python flet 音频可视化工具在终端中不出现错误的情况下无法工作
    标题:音频播放,但频谱可视化未在FletAudioVisualizer中显示我正在使用Flet框架开发音频可视化器。声音播放正确,但频谱可视化未显示。这是我的代码:importfletasftimportnumpyasnpfrompydubimportAudioSegmentfrompydub.utilsimportmake_chunksimportm......
  • 使用隐式 __init__ 方法向 python 数据类添加显式 dunder 方法
    我在python中创建了一个数据类,选择使用隐式定义的__init__方法。然后,我尝试显式重写比较dunder方法之一(__eq__)。因为没有明确的__init__方法,所以'this'参数不存在,所以python抛出了一个NameError。为了做到这一点,即使自动生成的很好,我是否也必......
  • 84 我正在使用 Python 开发 selenium 自动化项目。我收到错误 .NoSuchElementExceptio
    场景是这样的,我将打开一个网页,在使用selenium单击该网页后,它会要求位置访问权限,屏幕上会出现一堆按钮,我正在尝试定位其中一个按钮,但即使正确给出了Xpath地址,我得到.NoSuchElementException:错误能够单击目标按钮你正在使用Selenium在Python中开发自动化项目,并遇到......
  • 在Python 3中删除两个指定字符串之间的字符串
    我正在从事一个NLP项目,该项目要求我从一段文本中删除计算机代码。代码包含在标签<pre><code>和</code></pre>之间。现在我可以做一个简单的正则表达式匹配,但我想概括这个函数,以便它可以删除任何两个指定字符串之间的文本,即使它们是嵌套的。例如,如果我有一个......
  • Azure Open AI - Python 和 Java API 之间 gpt4o 的结果截然不同
    我使用Java和PythonAPI对AzureOpenAI进行相同的调用,但收到截然不同的结果:相同的系统提示相同的用户提示适用于Java和Python的azureai包的相同(最新)版本尽管输入的用户和系统提示完全相同,但响应却非常不同-python提示是“正确的”并......
  • leetcode 输出错误? (Python)
    我的VSCode/本地终端给出了[1,4,1,5,1,6]的正确输出,但不知何故leetcode给了我完全不同的输出。我在这里错过了什么吗?这怎么可能?顺便说一下,这是wigglesort2将我的本地代码复制粘贴到leetcode中给出了不同的输出数组很难在没有看到你的代码的情况下......