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

通过变量传递收件人信息到SendGrid脚本时报400错误如何解决

问题根因

  • 你构造的to_address是字符串类型,并非Mail类要求的To对象列表,框架无法从字符串中解析出收件人信息,因此返回参数中personalizations的to字段为空,触发400错误。硬编码时直接传入To对象列表可被正常识别,所以能正常发送。
  • 你构造字符串时误将邮箱的@符号写为",即使后续格式转换正确也会触发收件人格式错误。

解决方法

方案1:直接传递原生列表(优先选择)

不要将收件人拼接为字符串,直接在生成变量的脚本中构造To对象列表,跨脚本传递原生Python对象即可:

# 生成变量的脚本代码
from sendgrid.helpers.mail import To
to_address = [To('test1@example.com'), To('test2@example.com')]

传递到发邮件脚本后直接赋值即可,原有发件逻辑无需修改:

to_emails = to_address
# 后续构造Mail对象的代码保持不变

方案2:传递逗号分隔的邮箱字符串后转换

如果受脚本传递规则限制只能传字符串,可以先传逗号分隔的纯邮箱地址,在发邮件脚本中再转换为To对象列表:

# 生成变量的脚本代码
to_address = 'test1@example.com,test2@example.com'
# 发邮件的脚本转换代码
from sendgrid.helpers.mail import To
to_emails = [To(email.strip()) for email in to_address.split(',')]
# 后续构造Mail对象的代码保持不变

方案3:解析现有格式的字符串(仅临时应急使用)

如果无法修改生成变量的逻辑,只能拿到你当前拼接的字符串格式,可以先修正符号错误,再用eval解析为列表(仅可在你完全信任字符串内容的场景下使用,避免代码注入风险):

# 发邮件的脚本处理代码
from sendgrid.helpers.mail import To
# 修正邮箱符号错误
to_address = to_address.replace('"', '@')
# 解析字符串为To对象列表
to_emails = eval(to_address)
# 后续构造Mail对象的代码保持不变

内容的提问来源于stack exchange,提问作者Shanmugam Natarajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:03