如何一次发送多个带有一个xlsx文件附件的电子邮件?

时间:2018-12-18 13:24:39

标签: python python-3.x mime smtplib

我正在编写一个Python脚本,该脚本在目录中搜索具有特定名称的.XLSX文件,然后发送包含这些文件的电子邮件。 如果该目录中有3个XLSX文件,我想发送3封电子邮件,每封电子邮件都附带一个文件。我的代码正在发生的事情是,在该示例中,它发送了3封电子邮件:

  • 第一封带有一个文件的电子邮件
  • 第二个附加了2个文件
  • 第三个附加了3个文件的

我尝试将文件附加到电子邮件后将文件移动到另一个目录,但是它不起作用。这是代码:

     for xlsxfile in glob.glob(os.path.join('.', 'START_OF_FILENAME_*.XLSX')):

         xlsxpart = MIMEApplication(open(xlsxfile, 'rb').read())
         xlsxpart.add_header('Content-Disposition', 'attachment', filename=xlsxfile[1:])
         msg.attach(xlsxpart)

         shutil.move(xlsxfile, './sent/'+xlsxfile[2:])

         try:

              client = smtplib.SMTP()
              client.connect('XX.XXX.XX.XX', port=25)
              client.sendmail(username, rcptlist, msg.as_string())
              client.quit()
          #...exception handling

1 个答案:

答案 0 :(得分:0)

for xlsxfile in glob.glob(os.path.join('.', 'START_OF_FILENAME_*.XLSX')):
    ...
    msg.attach(xlsxpart)
    ...

在每次迭代中,都会将当前文件添加到现有的msg对象中。到循环进行第三次迭代时,msg已经附加了前两个文件。

相反,每次迭代都应创建一个新的msg对象:

for xlsxfile in glob.glob(os.path.join('.', 'START_OF_FILENAME_*.XLSX')):
    ...
    msg = Message(...) # however you created msg before the loop
    msg.attach(xlsxpart)
    ...