You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成SendGrid发邮件报错:'SendGridAPIClient'无'send'属性

解决AttributeError: 'SendGridAPIClient' object has no attribute 'send'

这个问题很典型——你使用的SendGrid Python SDK版本(3.6.5)不支持send()这个简化调用方法,这个便捷方法是在更高版本的库中才引入的,旧版本的客户端需要通过API端点的方式发起请求。

我给你两个可行的解决思路:

方案一:升级SendGrid库(推荐)

这是最省心的方案,升级后不仅能解决这个错误,还能拿到新版的功能和Bug修复。

  1. 先执行升级命令:
pip install --upgrade sendgrid
  1. 然后调整你的代码(还有两个容易踩的坑要修正):
    • dynamic_template_data不需要用json.dumps()处理,直接传Python字典就行,SendGrid会自动处理序列化
    • template_id应该单独设置,而不是塞进dynamic_template_data里,不然模板会找不到ID
    • 新版的send()方法可以直接接收Mail对象,不用额外调用.get()

修改后的代码如下:

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

sg = SendGridAPIClient("the_api_key")
email_data = Mail(
    from_email="support@email.africa",
    to_email="example@email.com",
    subject="YOUR EVENT IS NOW LIVE ON SITE!",
    template_id="transactional template id"  # 在这里直接指定模板ID
)
# 直接赋值字典,去掉json.dumps()
email_data.dynamic_template_data = {
    "username": "example username",
    "item_name": "example item name",
    "item_slug": "path to example item slug",
    "message_type": "EMAIL"
}
# 新版send方法直接传入email_data即可
response = sg.send(email_data)

方案二:适配旧版本调用(不升级)

如果项目依赖限制不能升级库,那你就需要用旧版本的API端点调用方式,替换掉报错的那一行:

# 把原来的response = sg.send(request_body=email_data.get())
# 替换成下面这行
response = sg.client.mail.send.post(request_body=email_data.get())

同样要记得修正dynamic_template_data和template_id的问题,不然即使发送成功,模板也无法正确渲染。

内容的提问来源于stack exchange,提问作者Newton Karanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:38:04