如何解决'bytes' 对象在 EmailMessage 中没有属性 'encode'
我正在尝试在 Django 中制作一个应用程序,它接受来自用户的信息并通过电子邮件将 HTML 模板作为 pdf 发送给用户。但我收到此错误 'bytes' 对象没有属性 'encode'
这是我对电子邮件的看法
def email(request,serial_no):
user = get_object_or_404(Student,pk=serial_no)
# roll_no = {'roll': str(user['roll_no'])}
html = render_to_string('card.html',{'user': user})
response = HttpResponse(content_type='application/pdf')
response['Content-disposition'] = 'filename={}'.format(user.roll_no + '.pdf')
pdf = weasyprint.HTML(string=html,base_url='').write_pdf(
stylesheets=[weasyprint.CSS(string='body { font-family: serif}')])
to_emails = [str(user.roll_no) + '@gmail.com']
subject = "Certificate from Nami Montana"
email = EmailMessage(subject,body=pdf,from_email='SSC',to=to_emails)
email.attach("{}".format(user.roll_no) + '.pdf',pdf,"application/pdf")
email.content_subtype = "pdf" # Main content is Now text/html
email.encoding = 'utf-8'
email.send()
return HttpResponseRedirect(reverse('id_card:submit'))
这里是错误
Traceback (most recent call last):
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\handlers\exception.py",line 47,in inner
response = get_response(request)
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\handlers\base.py",line 179,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\Dell\Documents\GitHub\SSC-Website\id_card\views.py",line 49,in email
email.send()
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\message.py",line 284,in send
return self.get_connection(fail_silently).send_messages([self])
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\backends\console.py",line 34,in send_messages
self.write_message(message)
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\backends\console.py",line 17,in write_message
msg = message.message()
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\message.py",line 246,in message
msg = SafeMIMEText(self.body,self.content_subtype,encoding)
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\message.py",line 159,in __init__
MIMEText.__init__(self,_text,_subtype=_subtype,_charset=_charset)
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\email\mime\text.py",line 42,in __init__
self.set_payload(_text,_charset)
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\message.py",line 167,in set_payload
has_long_lines = any(
File "C:\Users\Dell\AppData\Local\Programs\Python\python38\lib\site-packages\django\core\mail\message.py",line 168,in <genexpr>
len(line.encode()) > RFC5322_EMAIL_LINE_LENGTH_LIMIT
AttributeError: 'bytes' object has no attribute 'encode'
提前致谢
解决方法
问题在于您将 PDF 文件对象作为邮件正文发送:
pdf = weasyprint.HTML(string=html,base_url='').write_pdf(
stylesheets=[weasyprint.CSS(string='body { font-family: serif}')])
email = EmailMessage(subject,body=pdf,from_email='SSC',to=to_emails)
EmailMessage
尝试使用 utf-8 编解码器对 body
进行编码,但正文是一个 PDF 文件对象,即 bytes
,而 bytes
不是仅提供一个 encode
方法 decode
方法。将 PDF 添加到电子邮件的正确方法是像稍后在代码中所做的那样附加它。现在,如果您希望电子邮件正文是 PDF 文件的文本,请在 str
中获取文本并将其作为 body
kwarg 传递。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。