2017-02-22 8 views
0

Я пытаюсь отправить электронное письмо после отправки формы, используя django-mail-templated.«dict» объект не имеет атрибута «encode» django mails

Когда я представить мою форму, я получаю эту ошибку:

'ДИКТ' объект не имеет атрибута 'закодировать'

settings.py

EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'password' 
EMAIL_PORT = 587 

просмотров .py

from django.core.mail import send_mail 
send_mail(
    'autres/ticket_m.tpl', 
    {'user': request.user}, 
    '[email protected] ', 
    ['[email protected]'] 
) 

ticket_m.tpl

{% extends "mail_templated/base.tpl" %} 

{% block subject %} 
Hello {{ user }} 
{% endblock %} 

{% block body %} 
{{ user }}, this is a plain text message. 
{% endblock %} 

{% block html %} 
{{ user }}, this is an <strong>html</strong> message. 
{% endblock %} 

Как вы можете видеть, я использую Джанго почту-шаблонный как документации, так почему я получаю эту ошибку?

ответ

1

send_mail имеет подписи под другим именем, чем вы предполагаете. Первый аргумент является объектом, второй уже вынесено сообщение, и как строки:

send_mail(
    'subject of your email', 
    render_to_string('autres/ticket_m.tpl', {'user': request.user}), 
    '[email protected] ', 
    ['[email protected]'] 
) 

Требуемые параметры, как в documentation:

  • Заголовок: Строка.
  • сообщение: A string.
  • from_email: Строка.
  • recipient_list: Список строк, каждый из которых имеет адрес электронной почты. Каждый член списка recipient_list увидит других получателей в поле «Кому:» сообщения электронной почты.
+0

Я знаю, что это выходит из сферы моей проблемы, но теперь я получаю эту ошибку: «Обратное для» 'с аргументами'() 'и аргументами ключевого слова' {} 'не найдено. 0 шаблонов (ы): [] 'Знаете ли вы, что, кажется, это вызывает? – Lindow

+0

Это верно из-за объема этого вопроса и его комментариев, но, похоже, вы помещаете объект HttpResponseRedirect (один из классов ответа Django) в функцию 'reverse [_lazy]' или templatetag 'url'. – schwobaseggl

+0

О, ладно, это не имеет ничего общего с почтой, так что все хорошо, спасибо! – Lindow

1

По какой-то причине вы предполагающей, что send_mail сделает шаблон с контекстом вы предоставляете; но он ничего не знает о шаблонах, он ожидает строку, содержащую тело письма. Вы должны вынести, что отдельно и передать его функции:

from django.template.loader import render_to_string 
body = render_to_string('autres/ticket_m.tpl', {'user': request.user}) 
send_mail(
    'Subject', 
    body, 
    '[email protected] ', 
    ['[email protected]'] 
) 

Обратите внимание, что первый параметр является предметом электронной почты.

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

  • Нет связанных вопросов^_^