SENDGRID:使用python使用事务模板发送电子邮件?

时间:2018-05-29 07:19:57

标签: python sendgrid sendgrid-templates

我正在尝试使用事务模板sendgrid发送电子邮件。

我可以发一封简单的邮件。

from_email = Email("useremail@gmail.com")
subject = "Welcome"
to_email = Email("toemail@gmail.com")
content = ("text/plane","Text here")
mail = Mail(from_email, subject, to_email, content)

我创建了一个模板,我想用它来发送电子邮件。我怎么能这样做?

我正在使用template_id参数并通过Mail(),但它无效。

template_id = "13b8f94f-bcae-4ec6-b752-70d6cb59f932"

我检查了具有self._template_id参数的类Mail(对象)。 Mail()类中的字段如下:

if self.template_id is not None:
    mail["template_id"] = self.template_id

我在这里缺少什么?

我只想使用我创建的模板发送邮件。

2 个答案:

答案 0 :(得分:1)

您无法将其作为参数发送。您可以通过以下方式将其设置为普通的setter。

mail.template_id = "13b8f94f-bcae-4ec6-b752-70d6cb59f932"

您可以在sendgrid包中的mail_example.py文件中找到相同的实现

使用替换/个性化

#add this code to your method where you have initialized Mail() object
personalization = get_mock_personalization_dict()
mail.add_personalization(build_personalization(personalization))
mail.add_personalization(build_personalization(personalization))

#Example of a Personalization Object
def get_mock_personalization_dict():
    mock_pers = dict()
    mock_pers['substitutions'] = [Substitution("%name%", "Example User"),
                              Substitution("%city%", "Denver")]

#Updates the mail object with personalization variable
def build_personalization(personalization):
    for substitution in personalization['substitutions']:
         personalization.add_substitution(substitution)

答案 1 :(得分:0)

如果您使用的是最新的sendgrid python库(〜6.1.0),则需要阅读其github自述文件中的文档。https://github.com/sendgrid/sendgrid-python/blob/master/use_cases/transactional_templates.md

您需要通过message.dynamic_template_data作为python dict传递动态数据。还可以使用sendgrid邮件帮助程序类中的From,To,Subject对象。

    message.dynamic_template_data = 
    {
        'subject': 'Testing Templates',
        'name': 'Some One',
        'city': 'Denver' 
    }

这是完整的代码段。.

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

message = Mail(
    from_email='from_email@example.com',
    to_emails='to@example.com',
    html_content='<strong>and easy to do anywhere, even with Python</strong>') message.dynamic_template_data = {
    'subject': 'Testing Templates',
    'name': 'Some One',
    'city': 'Denver' } 
message.template_id = 'd-f43daeeaef504760851f727007e0b5d0' 
try:
    sendgrid_client = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
    response = sendgrid_client.send(message)
    print(response.status_code)
    print(response.body)
    print(response.headers) 
except Exception as e:
    print(e.message)