Sendgrid Python 库和模板

Sendgrid Python library and templates

我正在尝试使用我在 Sendgrid 上创建的模板。我想要做的是,使用我在 Sendgrid 上创建的模板发送电子邮件(替换替换标签)。

这是我试过的 -

import sendgrid
sg = sendgrid.SendGridClient('<username>', '<password>')
message = sendgrid.Mail()
message.add_to('<to-email-address>')
message.set_subject('My Test Email')
message.add_substitution('customer_link', 'http://my-domain.com/customer-id')
message.add_filter('templates', 'enable', '1')
message.add_filter('templates', 'template_id', '<alphanumeric-template-id>')
message.add_from('<from-email-address>')
status, msg = sg.send(message)

然而,这给了我一个 '{"errors":["Missing email body"],"message":"error"}' 的错误。我尝试添加以下行,但仍然出现相同的错误 -

message.set_html('')
message.set_text('')

所以,我在使用 set_html 后使用的确切代码是 -

import sendgrid
sg = sendgrid.SendGridClient('<username>', '<password>')
message = sendgrid.Mail()
message.add_to('<to-email-address>')
message.set_subject('My Test Email')
message.add_substitution('customer_link', 'http://my-domain.com/customer-id')
message.add_filter('templates', 'enable', '1')
message.add_filter('templates', 'template_id', '<alphanumeric-template-id>')
message.add_from('<from-email-address>')
message.set_html('')
message.set_text('')
status, msg = sg.send(message)

我在这里错过了什么?该库的 python 文档似乎不包含任何内容。

编辑 - 我发现的解决方法之一来自以下答案。我确实设置了 message.set_html(' ')message.set_text(' '),基本上就是给了一个空白字符串。虽然这很奇怪,但适用于这种情况。

official documentation it is indeed poor, since it just mentions an example. However, it provides you a link to its Github sendgrid-python 存储库,您可以在其中找到更广泛的示例和代码本身(有时看这个会更快!)。

在此处查找 Github page 中列出的完整示例:

import sendgrid

sg = sendgrid.SendGridClient('YOUR_SENDGRID_USERNAME', 'YOUR_SENDGRID_PASSWORD')

message = sendgrid.Mail()
message.add_to('John Doe <john@email.com>')
message.set_subject('Example')
message.set_html('Body')
message.set_text('Body')
message.set_from('Doe John <doe@email.com>')
status, msg = sg.send(message)

#or

message = sendgrid.Mail(to='john@email.com', subject='Example', html='Body', text='Body', from_email='doe@email.com')
status, msg = sg.send(message)

但是,在这种情况下,您使用的是模板,在 Sendgrid 的博客中他们提到:

Template Engine Demo – Q&A

Do I have to use the body and subject substitution tags in my template? What If I don’t want to pass any substitution variables in my email?

No. You can pass a blank value through with your API call and not specify any variables.

尽管显然不是这样,您需要在 message 实例中附加某种 html 和文本。

所以这里的解决方法就是您发现的:将 html 和文本设置为非空字符串:

message.set_html(' ')
message.set_text(' ')