'bytes' 对象在 EmailMessage 中没有属性 'encode'

如何解决'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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?