Как отправить электронные письма нескольким людям в Outlook в python? - PullRequest
0 голосов
/ 28 мая 2020

Застрял в маленькой проблеме 2 дня. Я пытаюсь отправить несколько писем, используя свой Outlook, нескольким людям. Вот что я пытаюсь сделать:

  1. Разбить файл excel на несколько файлов с названиями компаний
  2. Прикрепите Excel к электронному письму и отправьте. Электронное письмо выбирается из основного списка идентификаторов электронной почты, хранящегося в Excel.

Проблема: Я получаю следующий код ошибки во время работы программы. Я могу разбить большой Excel на несколько более мелких, но отправляется только первый Excel, а затем я получаю это сообщение об ошибке.

(- 2147352567, «Произошло исключение.», (4096, «Microsoft Outlook») ',' Элемент был перемещен или удален. ', Нет, 0, -2147221238), Нет)

#code

import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)


file_path = r'C:\Users\ABC\Documents\Email\Email.xlsx'
df1 = pd.read_excel(file_path, sheet_name = 'Master excel')
df2 = pd.read_excel(file_path, sheet_name = 'Email list')

df11 = df1['Co name'].unique()
list_carrier = list(df11)

path = r'C:\Users\ABC\Documents\Python\Email\np\\'
for i in list_carrier:
    dfa = df1[df1['Co Name']==i]
    wb = Workbook()
    path_1=path+i+".xlsx"
    writer = pd.ExcelWriter(path_1, engine='openpyxl', mode='W')
    writer.wb = wb
    dfa.to_excel(writer, sheet_name="sheet1")
    writer.save()

for i in list_carrier:

    email = df2.loc[df2['Co Name'] == i, 'Email'].item()
    mail.cc = 'abc@gmail.com; xyz@gmail.com'
    mail.To = email
    mail.Subject = f" {i} - File for testing"
    mail.Body = """\
    Hi, 

    sending test mail.

    Regards, """

    path_1=path+i+".xlsx"
    mail.Attachments.Add(path_1)
    mail.Send()

1 Ответ

0 голосов
/ 28 мая 2020

Вы должны создать новый MailItem в l oop после каждого вызова Send. Вы не можете отправлять элементы более одного раза, т.е. вызывать метод Send дважды.

#code

import win32com.client as win32
outlook = win32.Dispatch('outlook.application')


file_path = r'C:\Users\ABC\Documents\Email\Email.xlsx'
df1 = pd.read_excel(file_path, sheet_name = 'Master excel')
df2 = pd.read_excel(file_path, sheet_name = 'Email list')

df11 = df1['Co name'].unique()
list_carrier = list(df11)

path = r'C:\Users\ABC\Documents\Python\Email\np\\'
for i in list_carrier:
    dfa = df1[df1['Co Name']==i]
    wb = Workbook()
    path_1=path+i+".xlsx"
    writer = pd.ExcelWriter(path_1, engine='openpyxl', mode='W')
    writer.wb = wb
    dfa.to_excel(writer, sheet_name="sheet1")
    writer.save()

for i in list_carrier:

    mail = outlook.CreateItem(0)
    email = df2.loc[df2['Co Name'] == i, 'Email'].item()
    mail.cc = 'abc@gmail.com; xyz@gmail.com'
    mail.To = email
    mail.Subject = f" {i} - File for testing"
    mail.Body = """\
    Hi, 

    sending test mail.

    Regards, """

    path_1=path+i+".xlsx"
    mail.Attachments.Add(path_1)
    mail.Send()
...