Python 电子邮件消息Django错误上带有附加_文件的UnicodeEncodeError

Python 电子邮件消息Django错误上带有附加_文件的UnicodeEncodeError,python,django,Python,Django,因此,当我尝试用Django中的EmailMessage发送电子邮件时,会出现此错误 UNICODEENCODEER在/签出时出错/ 'ascii' codec can't encode character u'\u0161' in position 15: 消息体包含一些中断脚本的unicode字符 问题是,如果我省略了附件,或者如果正文不包含任何unicode字符,那么一切都可以正常工作。主题可以包含无unicode错误的unicode字符。因此,它只能与正文和附加文件中的unicode字

因此,当我尝试用Django中的EmailMessage发送电子邮件时,会出现此错误

UNICODEENCODEER在/签出时出错/

'ascii' codec can't encode character u'\u0161' in position 15:
消息体包含一些中断脚本的unicode字符

问题是,如果我省略了附件,或者如果正文不包含任何unicode字符,那么一切都可以正常工作。主题可以包含无unicode错误的unicode字符。因此,它只能与正文和附加文件中的unicode字符结合使用。这对我来说似乎是一个错误

附件是生成的pdf文件

运行在Ubuntu 10.04、apache2、mod_wsgi、python 2.6.5、Django 1.5上的代码

我使用的代码是

t = loader.get_template('orders/invoice_email.html')
c = {
    'order': order,
}

email = EmailMessage(subject, t.render(Context(c)), from_mail, [to, ])
email.encoding = "utf-8"
email.content_subtype = "html"
email.attach_file(invoice.name)
email.send()
还有追踪

Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in     get_response
115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
25.                 return view_func(request, *args, **kwargs)
File "/var/www/projects/vitamei-shop/modules/orders/views.py" in checkout
48.             order = form.save()            
File "/var/www/projects/vitamei-shop/modules/orders/forms.py" in save
71.         email_invoice(order)
File "/var/www/projects/vitamei-shop/vitamei/.././modules/orders/views.py" in email_invoice
320.     email.send()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py" in send
255.         return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py" in send_messages
95.                 sent = self._send(message)
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py" in _send
113.                     force_bytes(message.as_string(), charset))
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py" in as_string
169.         g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python2.6/email/generator.py" in flatten
84.         self._write(msg)
File "/usr/lib/python2.6/email/generator.py" in _write
109.             self._dispatch(msg)
File "/usr/lib/python2.6/email/generator.py" in _dispatch
135.         meth(msg)
File "/usr/lib/python2.6/email/generator.py" in _handle_multipart
201.             g.flatten(part, unixfrom=False)
File "/usr/lib/python2.6/email/generator.py" in flatten
84.         self._write(msg)
File "/usr/lib/python2.6/email/generator.py" in _write
109.             self._dispatch(msg)
File "/usr/lib/python2.6/email/generator.py" in _dispatch
135.         meth(msg)
File "/usr/lib/python2.6/email/generator.py" in _handle_text
178.         self._fp.write(payload)

Exception Type: UnicodeEncodeError at /checkout/
Exception Value: 'ascii' codec can't encode character u'\u0161' in position 15: ordinal not in range(128)

因此,在不断尝试之后,我找到了一个适合我的解决方案

t = loader.get_template('orders/invoice_email.html')
c = {
        'order': order,
    }

body = u''.join(t.render(Context(c))).encode('utf-8').strip()
email = EmailMessage(subject, body, from_mail, [to, ])
email.encoding = "utf-8"
email.content_subtype = "html"
email.attach_file(invoice.name, mimetype="application/pdf")
email.send()

如果有人有同样的问题,我希望这会有所帮助。

您能找出发生错误的代码吗?然后我们可以试着四处转转。完整的代码对我来说很难自己执行。你每次都尝试使用相同的文件吗?@User我不知道如何进一步隔离它。脚本试图发送电子邮件时会发生错误。@Samuele Mattiuzzo随附的pdf是一份生成的发票,是的,如果您是这样问的话,我已经用不同的文件尝试过了。如果代码中出现任何
unicode
字符串,您能否尝试
.encode('utf8')
它?