Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python as_string()方法返回AttributeError_Python_Python 3.x_Email_Smtp - Fatal编程技术网

Python as_string()方法返回AttributeError

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

我试图通过这部分代码,用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 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)