问题描述
我有这个远程键盘记录器,起初可以很好地发送电子邮件,但几分钟后它停止发送电子邮件,并向我抛出此错误:
Exception in thread Thread-25:
Traceback (most recent call last):
File "C:\Users\Lisandro0\AppData\Local\Programs\Python\python37\lib\threading.py",line 926,in _bootstrap_inner
self.run()
File "C:\Users\Lisandro0\AppData\Local\Programs\Python\python37\lib\threading.py",line 1177,in run
self.function(*self.args,**self.kwargs)
File "C:\Users\Lisandro0\Desktop\Desktop3\keylogger\crack.py",line 64,in report
self.sendmail(EMAIL_ADDRESS,EMAIL_PASSWORD,self.log)
File "C:\Users\Lisandro0\Desktop\Desktop3\Keylogger\crack.py",line 53,in sendmail
server.sendmail(email,email,message)
File "C:\Users\Lisandro0\AppData\Local\Programs\Python\python37\lib\smtplib.py",line 855,in sendmail
msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 312: ordinal not in range(128)
我希望阅读简短的代码。
感谢您的帮助
解决方法
错误消息很明确:
... Python37 \ lib \ smtplib.py ... UnicodeEncodeError:'ascii'编解码器无法在位置312编码字符'\ xf1':序数不在范围(128)中
smtplib似乎无法编码您的邮件内容。
我做了一些源代码阅读。在smtplib.py中:
def sendmail(self,from_addr,to_addrs,msg,mail_options=(),rcpt_options=()):
"""This command performs an entire mail transaction.
The arguments are:
- from_addr : The address sending this mail.
- to_addrs : A list of addresses to send this mail to. A bare
string will be treated as a list with 1 address.
- msg : The message to send.
- mail_options : List of ESMTP options (such as 8bitmime) for the
mail command.
- rcpt_options : List of ESMTP options (such as DSN commands) for
all the rcpt commands.
msg may be a string containing characters in the ASCII range,or a byte
string. A string is encoded to bytes using the ascii codec,and lone
\\r and \\n characters are converted to \\r\\n characters.
看这里:
msg可以是包含ASCII范围内字符的字符串,也可以是字节字符串
如果要发送非ASCII内容的邮件,可以先将内容编码为字节字符串。
(顺便说一句,如果我做对了,您的问题标题有点离题了,无法掌握问题的关键。)