我在使用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作为文档,为什么我会收到此错误?
答案 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']
)
请注意,第一个参数是电子邮件的主题。