Как отправить несколько электронных писем одновременно с одним вложенным файлом xlsx? - PullRequest
0 голосов
/ 18 декабря 2018

Я пишу скрипт на Python, который ищет файлы .XLSX с определенным именем в каталоге, а затем отправляет электронные письма с прикрепленными к ним файлами.Если в этом каталоге 3 файла XLSX, я хочу отправить 3 электронных письма, каждое с прикрепленным файлом.Что происходит с моим кодом, так это то, что в этом примере он отправляет 3 электронных письма:

  • первое электронное письмо с 1 прикрепленным файлом
  • второе с 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 голосов
/ 18 декабря 2018
for xlsxfile in glob.glob(os.path.join('.', 'START_OF_FILENAME_*.XLSX')):
    ...
    msg.attach(xlsxpart)
    ...

На каждой итерации текущий файл добавляется к существующему объекту msg.К тому времени, когда цикл достигает третьей итерации, к msg уже прикреплены предыдущие 2 файла.

Вместо этого на каждой итерации должен создаваться новый объект 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)
    ...
...