繁体   English   中英

我不能在 EMAIL_PASSWORD 中使用 unicode 字符和 django

[英]I can't use unicode characters in EMAIL_PASSWORD with django

我正在使用 django 3.0.8,在我的 settings.py 中,我使用 EMAIL_PASSWORD = '...' 指定了我的电子邮件帐户的密码。 我的密码包含变音符号,并且从 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)

如果我删除变音符号,一切都会正常工作。 显然 smtplib 使用 ascii 手动编码,我不知道如何告诉它不要。 有任何想法吗?

这是 smtplib 中的一个已知问题

就目前而言,2020 年 7 月它仍然开放,修复等待审查。

底线 - 有一个问题,众所周知,没有官方解决方案。

然而,你现在可以做什么:

  1. 按照这里的方式手动修补文件/usr/lib/python3.6/smtplib.py非常简单,只需在3个地方用utf-8替换ascii即可。 我没有尝试过,但它可以根据其他用户。 只需备份文件以防万一。 或者使用带有修补 smtplib.py 的虚拟环境。 老实说,我个人没有测试它,但人们报告它有效。

  2. 使用 smtplib 的一些替代方法。 I actually don't know anything like this in native Python, however you can always use command line utilities like mail via python subprocess module, or some web services that provide mailing service via REST API (there are plenty, but this will not work if您正在本地公司网络上使用邮件或其他东西)。

  3. 更改密码并忘记问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM