我通过SendGrid UI创建了一个不错的模板,遇到了尝试通过sendgrid python API包装器(v5.4.1)发送电子邮件的问题。我有一个具有以下(截断)文本的模板的模板ID:
你好,{{name}}!
点击以下链接以验证您的帐户:{{verification_url}}。
但是,当遵循example in the documentation时,每当包含个性化设置时,都会出现400 Bad Request错误。我包括以下个性化设置:
mail.personalizations[0].add_substitution(Substitution("{{name}}", "Example User"))
此外,mail.get()
返回以下内容:
{
'from': {
'email': 'test@school.edu'
},
'subject': 'Account Verification',
'personalizations':
[
{
'to': [{'email': 'testemail@test.com'}],
'substitutions': {
'{{name}}': 'Example User'}
}
],
'template_id': '<template_id_here>'
}
是否有任何方法可以调试正在发生的事情?不幸的是,一个400错误的请求并没有那么有用...
貌似实际上尚不支持以下功能:https://github.com/sendgrid/sendgrid-python/issues/591
答案 0 :(得分:0)
几周前,我也遇到了这个问题。替换格式已更改为使用dynamic_template_data。
代替:
mail.personalizations[0].add_substitution(Substitution("{{name}}", "Example User"))
使用:
mail.personalizations[0].dynamic_template_data = Substitution("name", "Example User").get()
get()返回替换的JSON就绪版本。此外,请确保您至少使用的是Sendgrid API的5.6.0版本。刚刚添加了此功能,这是指向github提交的链接:https://github.com/sendgrid/sendgrid-python/commit/4be8d580ec15f1f10180a562aeace8478f76597e
答案 1 :(得分:0)
API V3最近有更改,这对我有用
import os
import sendgrid
from sendgrid.helpers.mail import Mail, Email, Personalization
sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
mail = Mail()
mail.from_email = Email('customerservice@jafutexpress.com.ng')
mail.subject = "You are welcome!"
mail.template_id = 'template_id'
p = Personalization()
p.add_to(Email('test@example.com'))
p.dynamic_template_data = {
'name': 'Bob',
}
mail.add_personalization(p)
response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)
print(response.headers)
print(response.body)