Python 发送多个文件功能只发送列表中的最后一个文件,而忽略其他文件
我有一个功能,电子邮件作为附件多个文件 但由于某些原因,它只发送列表中指定的最后一个文件:Python 发送多个文件功能只发送列表中的最后一个文件,而忽略其他文件,python,python-3.x,smtp,mime,Python,Python 3.x,Smtp,Mime,我有一个功能,电子邮件作为附件多个文件 但由于某些原因,它只发送列表中指定的最后一个文件: files=['AlignEnvironmentalPremium.txt', 'TestFile.xlsx'] 它将只发送TestFile.xlsx并忽略AlignEnvironmentalPremium.txt 我是否需要更改代码中的某些内容,以便它可以发送列表中的所有文件,而不仅仅是最后一个文件 import os from base64 import decodebytes from xlsx
files=['AlignEnvironmentalPremium.txt', 'TestFile.xlsx']
它将只发送TestFile.xlsx
并忽略AlignEnvironmentalPremium.txt
我是否需要更改代码中的某些内容,以便它可以发送列表中的所有文件,而不仅仅是最后一个文件
import os
from base64 import decodebytes
from xlsxwriter.utility import xl_rowcol_to_cell
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email import encoders
import datetime
send_from = 'sendfrom@.usercom'
send_to = ['sendto@.usercom']
cc = ['copyto@.usercom']
rcpt = COMMASPACE.join(send_to).split(',') + COMMASPACE.join(cc).split(',')
subject = 'Monthly Audit Report'
text = 'Hello, \nPlease, see attached'
files=['AlignEnvironmentalPremium.txt', 'TestFile.xlsx']
# below function sends email
def send_mail(send_from,rcpt,subject,text ,files):
assert isinstance(send_to, list)
assert isinstance(cc, list)
assert isinstance(files, list)
msg = MIMEMultipart()
msg["From"] = send_from
msg["To"] = COMMASPACE.join(send_to)
msg['Cc'] = COMMASPACE.join(cc)
msg["Date"] = formatdate(localtime=True)
msg["Subject"] = subject
msg.attach(MIMEText(text))
if files is not None:
for f in files:
part = MIMEBase("application", "octet-stream")
part.set_payload(open(f, "rb").read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition", 'attachment; filename="%s"' % os.path.basename(f)
)
msg.attach(part)
smtp = smtplib.SMTP('0.0.0.0: 25')
smtp.sendmail(send_from, rcpt, msg.as_string())
smtp.close()
send_mail(send_from,rcpt,subject,text,files)
我不熟悉电子邮件库,所以可能有一个细微差别我错过了,但我认为这只是一个语法错误 您正在为每个文件创建MIMEBase实例,并调用它
part
。在for循环结束时,part
的值将是您迭代的最后一个文件。由于msg.attach(part)
在for循环之外,因此您将只附加文件列表中的最后一个文件
我想你知道从这里到哪里去。哦!感谢您的快速回复!