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循环之外,因此您将只附加文件列表中的最后一个文件


我想你知道从这里到哪里去。

哦!感谢您的快速回复!