我使用以下代码(摘录)来发送电子邮件:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.base import MIMEBase
from email import encoders
smtpServer = "(Servername)"
smtpPort = (Portnumber)
smtpUsername = "(SMTP Username)"
smtpPassword = "(Password)"
sender = "(Username)"
reciever = "(Username)"
subject = "(subject)"
body = "Text"
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = reciever
body = MIMEText(body, 'plain')
msg.attach(body)
msg = MIMEBase('application', 'octet-stream')
attach_file = open(zipfilename, 'rb')
payload = MIMEApplication(zipfilename)
payload.set_payload(attach_file.read(), 'rb')
encoders.encode_base64(payload)
payload.add_header('Content-Decomposition', 'attachment', filename=zipfilename)
msg.attach(payload)
smtpObj = smtplib.SMTP(smtpServer, smtpPort)
smtpObj.set_debuglevel(1)
smtpObj.starttls()
smtpObj.sendmail(sender, reciever, msg.as_string())
attach_file.close()
smtpObj.close()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Traceback (most recent call last):
File "E:\Data\testmail.py", line 31, in <module>
smtpObj.sendmail(sender, reciever, msg.as_string())
File "E:\Program\Python\3.9.6\lib\email\message.py", line 158, in as_string
g.flatten(self, unixfrom=unixfrom)
File "E:\Program\Python\3.9.6\lib\email\generator.py", line 116, in flatten
self._write(msg)
File "E:\Program\Python\3.9.6\lib\email\generator.py", line 181, in _write
self._dispatch(msg)
File "E:\Program\Python\3.9.6\lib\email\generator.py", line 218, in _dispatch
meth(msg)
File "E:\Program\Python\3.9.6\lib\email\generator.py", line 239, in _handle_text
raise TypeError('string payload expected: %s' % type(payload))
TypeError: string payload expected: <class 'list'>
Run Code Online (Sandbox Code Playgroud)
我已经在各种来源中进行了搜索(例如TypeError: string Payload Expected: <class 'bytes'>,https://github.com/Pylons/pyramid_mailer/issues/24,...),但我发现的提示不是'适合。失败的原因是什么?我能做些什么?