我使用的是django 3.0.8,在我的settings.py中,我使用EMAIL_password='…'为我的电子邮件帐户指定了密码。我的密码包含umlauts,从shell手动发送邮件时,我收到以下错误:
>>> from django.core.mail import send_mail
>>> send_mail('Django mail', 'This e-mail was sent with django', ..., fail_silently=False)
Traceback (most recent call last):
File "/usr/lib/python3.6/code.py", line 91, in runcode
exec(code, self.locals)
File "<console>", line 1, in <module>
File "/home/admin/.local/lib/python3.6/site-packages/django/core/mail/__init__.py", line 60, in send_mail
return mail.send()
File "/home/admin/.local/lib/python3.6/site-packages/django/core/mail/message.py", line 276, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/admin/.local/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 102, in send_messages
new_conn_created = self.open()
File "/home/admin/.local/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 69, in open
self.connection.login(self.username, self.password)
File "/usr/lib/python3.6/smtplib.py", line 721, in login
initial_response_ok=initial_response_ok)
File "/usr/lib/python3.6/smtplib.py", line 630, in auth
response = encode_base64(initial_response.encode('ascii'), eol='')
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 19: ordinal not in range(128)
如果我移除umlaut,一切都会正常工作。显然,smtplib是用ascii手工编码的,我不知道如何告诉它不要这样做。有什么想法吗
这是smtplib中的known issue
到目前为止,2020年7月its仍然开放,等待审查
底线-有一个问题,这是众所周知的,没有正式的解决办法
然而,你现在能做的是:
手动修补文件
/usr/lib/python3.6/smtplib.py
的方式here-非常简单,只需在3个位置用utf-8
替换ascii
。我没有尝试过,但其他用户认为它很有效。备份文件以防万一。或者将虚拟环境与修补的smtplib.py一起使用。老实说,我个人没有测试它,但人们报告它工作使用smtplib的一些替代品。实际上,我不知道本地Python中有什么类似的东西,但是您可以始终使用命令行实用程序,比如通过Python
mail
模块使用subprocess
,或者使用一些通过RESTAPI提供邮件服务的web服务(有很多,但如果您在本地公司网络或其他地方使用邮件,这将不起作用)更改您的密码并忘记该问题
相关问题 更多 >
编程相关推荐