'字典'对象没有属性'编码' django邮件

时间:2017-02-22 12:11:43

标签: python django

我在使用django-mail-templated提交表单后尝试发送电子邮件。

当我提交表单时,我收到此错误:

  

'字典'对象没有属性'编码'

settings.py

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'example@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587

views.py

from django.core.mail import send_mail
send_mail(
    'autres/ticket_m.tpl', 
    {'user': request.user}, 
    'example@gmail.com ', 
    ['example@domain.ch']
)

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 %}

正如您所看到的,我使用django-mail-templated作为文档,为什么我会收到此错误?

2 个答案:

答案 0 :(得分:1)

functional API guide的签名与您的假设不同。第一个参数是主题,第二个参数是已经呈现的消息,两者都是字符串:

send_mail(
    'subject of your email', 
    render_to_string('autres/ticket_m.tpl', {'user': request.user}),
    'example@gmail.com ', 
    ['example@domain.ch']
)

send_mail中的必需参数:

  
      
  • subject:一个字符串。
  •   
  • message:一个字符串。
  •   
  • from_email:一个字符串。
  •   
  • recipient_list:字符串列表,每个字符串都是一个电子邮件地址。 recipient_list的每个成员都将在电子邮件的“收件人:”字段中看到其他收件人。
  •   

答案 1 :(得分: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, 
    'example@gmail.com ', 
    ['example@domain.ch']
)

请注意,第一个参数是电子邮件的主题。