我正在尝试向SMS网关电子邮件发送电子邮件+附件。但是我目前正在获得Unicode解码:Error'Charmap'编解码器无法解码位置60的字节0x8d
我不确定如何解决此问题,并对您的建议感兴趣。贝娄是我的代码和完全错误。
import smtplib, os
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['Subject'] = 'Cuteness'
msg['From'] = 'sample@outlook.com'
msg['To'] = '111111111@messaging.sprintpcs.com'
msg.preamble = "Would you pet me? I'd Pet me so hard..."
here = os.getcwd()
file = open('cutecat.png')#the png shares directory with actual script
for here in file: #Error appears to be in this section
with open(file, 'rb') as fp:
img = MIMImage(fp.read())
msg.attach(img)
s = smtplib.SMTP('Localhost')
s.send_message(msg)
s.quit()
""" Traceback (most recent call last):
File "C:\Users\Thomas\Desktop\Test_Box\msgr.py", line 16, in <module>
for here in file:
File "C:\Users\Thomas\AppData\Local\Programs\Python\Python35-32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 60: character maps to <undefined>"""
答案 0 :(得分:0)
您正尝试打开该文件两次。首先你有:
file = open('cutecat.png')
打开文件的默认模式是在文本模式下读取它们。这通常不是你想要用像PNG文件这样的二进制文件。
然后你这样做:
for here in file:
with open(file, 'rb') as fp:
img = MIMImage(fp.read())
msg.attach(img)
您在第一行中遇到异常,因为Python正在尝试将二进制文件的内容解码为文本并失败。发生这种情况的可能性非常高。二进制文件也不太可能是标准编码中的有效文本文件。
但即使这样可行,对于文件中的每一行,您都会尝试再次打开文件?这毫无意义!
您是否只是从examples复制/粘贴,尤其是第三个?您应该注意,此示例不完整。该示例中使用的变量pngfiles
(以及应该是文件名序列)未定义。
请改为尝试:
with open('cutecat.png', 'rb') as fp:
img = MIMImage(fp.read())
msg.attach(img)
或者,如果您想要包含多个文件:
pngfiles = ('cutecat.png', 'kitten.png')
for filename in pngfiles:
with open(filename, 'rb') as fp:
img = MIMImage(fp.read())
msg.attach(img)