我通过以下方式发送电子邮件:
EmailMultiAlternatives()
当调用send()方法时;我在某个基类中遇到错误。
lib/email/encoders.py
'Template' object has no attribute 'encode'
异常位置:C:\Python27\lib 邮件 ncoders.py,位于encode_7or8bit,第 73 行
Python 可执行文件:C:\Python27\python.exe
错误路径:
> return msg.send(fail_silently)
C:\Python27\lib\email\mime\text.py in __init__
> self.set_payload(_text, _charset)
C:\Python27\lib\email\message.py in set_payload
> self.set_charset(charset)
C:\Python27\lib\email\message.py in set_charset
> cte(self)
C:\Python27\lib\email\encoders.py in encode_7or8bit
> orig.encode('ascii')
任何人都可以知道这个错误吗?
更新 使用以下代码帮助我解决了我的问题。
fail_silently=True
t = get_template(template_name)
html_part = t.render(context)
msg = EmailMultiAlternatives(subject,
t,
sender,
recipients,
bcc=bcc)
msg.attach_alternative(html_part, "text/html")
return msg.send(fail_silently)
使用 django.template.loader 中的
get_template
方法时,出现以下错误
错误:“模板”对象的属性错误没有属性“分割线”
对我有用的解决方案
from django.template.loader import render_to_string
Template对象不能直接在邮件中使用,需要配合上下文渲染,生成可以使用的字符串,例如:
context = Context(dict(some_key=some_value))
email = EmailMultiAlternatives(
from_email="[email protected]",
reply_to="[email protected]",
subject="Example email subject"
body=Template(template_body).render(context),
to="[email protected]",
)
if html_email:
html_body = Template(html_template).render(context)
email.attach_alternative(html_body, "text/html")
email.send()