【问题标题】:Sendgrid Python library and templatesSendgrid Python 库和模板
【发布时间】:2015-08-11 08:32:35
【问题描述】:

我正在尝试使用我在 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(' '),基本上就是给出一个空白字符串。不过,这很奇怪,但适用于这种情况。

【问题讨论】:

  • 那么在添加set_html_text 部分后,您使用的确切代码是什么?
  • @fedorqui 添加了确切的代码。确切的代码只是添加了set_htmlset_text
  • 请注意,较新版本的 python sendgrid 库现在使用 sendgrid.SendGridAPIClient

标签: python sendgrid


【解决方案1】:

official documentation 确实很差,因为它只是提到了一个例子。但是,它为您提供了一个指向其 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

我是否必须在我的 模板?如果我不想在其中传递任何替换变量怎么办 我的邮箱?

没有。您可以通过 API 调用传递一个空白值,而不是 指定任何变量。

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

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

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

【讨论】:

  • 这不是我想要做的。我正在尝试使用模板。请仔细看看这个问题。
  • 您遇到的错误与未添加电子邮件正文有关因为您的代码未添加它。编辑您的问题并展示它。顺便说一句,对试图帮助你不清楚的问题的人投反对票不太可能给你带来很大的成功。
  • 很抱歉。正如我在问题中提到的那样,我正在添加 message.set_html('')message.set_text('') 这样的正文。如果我确实在set_htmlset_text 中传递了一些任意字符串,它会附加到模板的顶部,这不是我想要的。另外,我想知道为什么需要设置正文,因为我想要的只是使用已经包含所有内容的模板。有什么想法吗?
  • @Siddharth 所以你有一个模板,你想用add_substitution()add_filter() 来填充它。但是,这将与您提供的数据进行交互,现在您没有提供任何数据。可能你需要说message.set_html(your_template)
  • 我认为我的解释不正确。我已经在 Sendgrid 上定义了模板(这不是我的代码定义的)。我想在我在 Sendgrid 上定义的模板上使用替换。我已经通过解决方法对问题进行了编辑,但我并不完全理解。我不认为我可以做message.set_html(your_template),因为没有your_template。我只有来自 Sendgrid 的template-id。不确定,这是否有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多