Python as_string()方法返回AttributeError
我试图通过这部分代码,用python 3.6从gmail发送消息:Python as_string()方法返回AttributeError,python,python-3.x,email,smtp,Python,Python 3.x,Email,Smtp,我试图通过这部分代码,用python 3.6从gmail发送消息: import smtplib as smtp from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import enc
import smtplib as smtp
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import os
SUBJECT = *subject message*
SOURCE = *directory*
TEXT = *some text in message*
msg = MIMEMultipart()
msg['From'] = *send from email*
msg['To'] = *send to email*
msg['Subject'] = SOURCE
#################### part with attachment
msg.attach(MIMEText(TEXT, 'plain'))
filename = os.path.basename(SOURCE)
attachment = open(SOURCE, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename = %s'%filename)
msg.attach(part)
#################### end of attachment part
#################### server part
server = smtp.SMTP(smtp.gmail.com', 587)
server.starttls()
server.login(*send from email*, *send from email password*)
server.sendmail(*send from email*, *send to email*, msg.as_string())
server.close()
但是要有一个心脏除颤器错误:
AttributeError:“list”对象没有属性“encode”
如果我删除代码的附件部分,并在服务器部分之前添加msg=MIMEText(TEXT)
,我会在电子邮件中收到一封信,但它不包含主题。所以我收到了一封只有文字的信
我做错了什么?有什么想法吗
编辑:错误出现在
msg.as_string()
line下面是我如何通过python发送电子邮件的
#这将允许我们通过smtp服务器发送电子邮件
导入smtplib
#消息将来自谁,实际上不需要设置,因为消息变量将自动执行此操作
发送者sender@email.com'
#消息将发送给谁(这一个很重要)
接受者receiver@email.com'
#我们将要发送的实际电子邮件,请注意其内容-收件人部分是不相关的,但却是必要的
message=“”发件人:发件人
致:致人
主题:SMTP电子邮件测试
这是一封测试邮件
"""
尝试:
#通过向程序提供服务器的ip来处理服务器发送邮件
smtpObj=smtplib.SMTP(“”)#这是我所在服务器的ip
#尝试发送邮件
smtpObj.sendmail(发送者、接收者、消息)
#如果执行上述命令,请向用户发送确认
打印“已成功发送邮件!”
除:
#如果出现问题,请抓住它并向用户发送消息
打印“错误:无法发送邮件”
要添加附件,只需添加我从中检索到的以下内容
#打开要发送的文件
filename=“文件名和扩展名”
附件=打开(“文件路径”,“rb”)
#MIMEBase的实例,命名为p
p=MIMEBase('application','octet stream')
#将有效负载更改为编码形式
p、 设置有效负载((附件).read())
#编码成base64
编码器。编码基64(p)
p、 添加标题('Content-Disposition',“附件;文件名=%s”%filename)
#将实例“p”附加到实例“msg”
smtpObj.附件(p)
更改:
msg.attach(MIMEText(TEXT, 'plain'))
filename = os.path.basename(SOURCE)
attachment = open(SOURCE, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename = %s'%filename)
msg.attach(part)
与:
为我工作。
感谢@Oli answer。谢谢。但是在这段代码中没有任何发送附件的方法。很抱歉,我刚刚意识到我发送了一个旧版本的脚本,我已使用用于启用附件的资源对其进行了更新。希望这有帮助:)如果你有任何问题,请让我知道。我很抱歉这么说,但这没有帮助。我有相同的
AttributeError:'list'对象没有属性'encode
抱歉,我无法提供帮助;也许我会将此资源传递给您,作为帮助您的最后努力:
msg.attach(MIMEText(text))
for f in files:
with open(f, "rb") as fil:
part = MIMEApplication(fil.read(), Name = basename(f))
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
msg.attach(part)