2015-08-11 3 views
4

Я пытаюсь использовать шаблоны, которые я создал в Sendgrid. Я хочу, чтобы использовать шаблон, который я создал в Sendgrid, для отправки электронной почты (с заменой тегов замещения).Библиотека и шаблоны Sendgrid Python

Вот что я попробовал -

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(' '), то есть в основном, дайте пробельную строку. Это странно, но работает для этого случая.

+0

так, что это точный код, который вы используете после добавления 'set_html' и' _TEXT 'части? – fedorqui

+0

@fedorqui добавил точный код. Точный код просто добавляет 'set_html' и' set_text'. – Siddharth

+0

Обратите внимание, что более новые версии библиотеки sendmail для python теперь используют 'sendgrid.SendGridAPIClient' вместо этого. – Ninjakannon

ответ

3

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 <[email protected]>') 
message.set_subject('Example') 
message.set_html('Body') 
message.set_text('Body') 
message.set_from('Doe John <[email protected]>') 
status, msg = sg.send(message) 

#or 

message = sendgrid.Mail(to='[email protected]', subject='Example', html='Body', text='Body', from_email='[email protected]') 
status, msg = sg.send(message) 

Однако, в этом случае вы используете шаблон и в блоге Sendgrid в них упоминания:

Template Engine Demo – Q&A

Должен ли я использовать бод y и теги подстановки объекта в моем шаблоне ? Что делать, если я не хочу передавать какие-либо переменные замещения в мое письмо?

№ Вы можете передать пустое значение с помощью вызова API, а не , указать любые переменные.

хотя, видимо, это не так, и вам нужно добавить какой-то html и текст в свой message экземпляр.

Так что обходной путь здесь то, что вы обнаружили: установить HTML и текст непустой строки:

message.set_html(' ') 
message.set_text(' ') 
+0

Это не то, что я пытаюсь сделать. Я пытаюсь использовать шаблон. Пожалуйста, поближе рассмотрите вопрос. – Siddharth

+1

Ошибка, которую вы получаете, связана с тем, что вы не добавляете тело электронной почты *, потому что ваш код не добавляет его *. Измените свой вопрос и покажите его.К слову, люди, пытающиеся помочь вашему неясному вопросу, вряд ли принесут вам большой успех. – fedorqui

+0

Извините. Я добавляю тело как 'message.set_html ('')' и 'message.set_text ('')', как я уже упоминал в вопросе. Если я передаю некоторую произвольную строку в 'set_html' и' set_text', она добавляется к вершине шаблона, который не является тем, что я хочу. Кроме того, мне интересно, почему требуется установить тело вообще, поскольку все, что я хочу, это использовать шаблон, у которого уже есть весь контент. Есть идеи? – Siddharth

Смежные вопросы