当前位置: 首页 > 知识库问答 >
问题:

Python3“ascii”编解码器无法对135-136位置的字符进行编码:序号不在范围内(128)

鄢禄
2023-03-14
# -*- coding: utf-8 -*-
#!/usr/bin/python3
import smtplib

gmail_user = 'X@X'
gmail_password = 'XXX'

from_add = gmail_user
to = ["X@X"]
subject ="主旨(subject)"
body ="內容(content)"
email_text = """\
From: %s
To: %s
Subject: %s
%s
"""%(from_add, ", ".join(to), subject, body)


try:
    smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
    smtpObj.ehlo()
    smtpObj.starttls()
    smtpObj.login(gmail_user, gmail_password)
    smtpObj.sendmail(from_add, to, email_text)
    smtpObj.close()
    print('Email sent')
except UnicodeEncodeError as err:
    print('{}'.format(err))
except:
    print("err")

我得到了Unicodeer错误:

“ascii”编解码器无法对73-74位置的字符进行编码:序号不在范围内(128)

python3 defult编码不是“UTF-8”吗??

当我运行这个脚本

实际上是蟒蛇。5.2

当我打印身体的类型,它是str

但是错误似乎是asciicode而不是python2的Unicode

thx

共有1个答案

萧和同
2023-03-14

smtplib。SMTP。sendmail要求其msg参数str,仅包含ascii字符或字节

msg可以是包含ASCII范围内字符的字符串,也可以是字节字符串。使用ascii编解码器将字符串编码为字节,将单个\r\n字符转换为\r\n字符。不修改字节字符串。

您的消息是一个字符串,但in包含非ascii字符;您需要编码为字节:

smtpObj。sendmail(从添加到电子邮件文本编码('utf-8'))

 类似资料: