【问题标题】:UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)UnicodeEncodeError:“ascii”编解码器无法对位置 5-6 中的字符进行编码:序数不在范围内(128)
【发布时间】:2016-11-21 11:19:58
【问题描述】:

我尝试通过 SMTP 简单地使用 python 调用 gmail。 但是,无论我怎么尝试,它仍然显示 UnicodeEncodeError

import smtplib
import sys
print(sys.getdefaultencoding())
host = "smtp.gmail.com"
port = 587
username = "ppapa@gmail.com"
password = "ppapapxasfsdfsdfsdfsd"

email_conn = smtplib.SMTP(host,port) #call smtp method 
email_conn.ehlo()

错误提示:

utf-8
Traceback (most recent call last):
  File "Useemail.py", line 10, in <module>
    email_conn.ehlo()
  File "C:\Users\Lance\Anaconda3\lib\smtplib.py", line 439, in ehlo
    self.putcmd(self.ehlo_msg, name or self.local_hostname)
  File "C:\Users\Lance\Anaconda3\lib\smtplib.py", line 366, in putcmd
    self.send(str)
  File "C:\Users\Lance\Anaconda3\lib\smtplib.py", line 351, in send
    s = s.encode(self.command_encoding)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-6: ordinal not in range(128)
>>> 

【问题讨论】:

  • 你的代码对我有用,没有发现错误!
  • 这里也一样。您的代码在 Python 2 和 3 中非常适合我。您的 Anaconda 3.x 安装是否可能以某种方式使用较旧的 Python 2 代码?另一方面,使用 SMTP 不再是发送电子邮件的首选方式,而且它的安全性更低(纯文本密码!)。推荐您使用 Gmail API (developers.google.com/gmail/api);制作了一个视频来演示如何使用它:plus.google.com/+GoogleDevelopers/posts/btPaP3VnrGr为了了解更多关于错误本身的信息,我很久以前写了一篇关于它的帖子wesc.livejournal.com/1743.html
  • 谢谢,我在连接gmail之前发现,我应该在我的邮箱里按确认

标签: python-3.x smtp


【解决方案1】:

我今天也有类似的问题。

我发现的问题是因为我的 from_addr 有 UTF-8 字符。 您可以尝试设置 email_conn.command_encoding = 'utf-8'

【讨论】:

  • 问题中的代码不包含from_addr。如果确实是minimal reproducible example,我猜ehlo 发送您的本地Windows 计算机名称,并且OP 包含非ASCII 字符串。
猜你喜欢
  • 2012-08-05
  • 2017-03-29
  • 2020-07-27
  • 2012-07-17
  • 2018-04-28
  • 2014-03-08
  • 2015-09-26
  • 2017-02-28
相关资源
最近更新 更多