Kirim email Outlook dengan lampiran ke daftar pengguna di Excel dengan python

Aug 16 2020

Saya dapat mengirim email menggunakan outlook dengan skrip di bawah ini, tetapi jika saya mencoba mengirim lampiran itu memberi kesalahan.

Nama File_Email.xlsx

NAME    EMAIL
Roy     [email protected]
Jack    [email protected]

Skrip Python

import win32com.client as win32
import pandas as pd

email_list = pd.read_excel(r'C:\Users\roy\Name_Email.xlsx')

names = email_list['NAME']
emails = email_list['EMAIL']

for i in range(len(emails)):
   name = names[i]
   email = emails[i]

   outlook = win32.Dispatch('outlook.application')
   mail = outlook.CreateItem(0)
   mail.To = email
   mail.Subject = 'Message subject'
   mail.Body = 'Hello ' + name
   attachment = "hosts.txt"
   mail.Attachments.Add(attachment)
   mail.Send()

kesalahan yang saya dapatkan:

pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'Cannot find this file. Verify the path and file name are correct.', None, 0, -2147024894), None)

Nama file sudah benar, dan berada di direktori yang sama dengan skrip.

Saya juga mencoba mengubah attachment = 'hosts.txt', tetapi kesalahan yang sama. Tidak yakin apa yang hilang.

Jawaban

1 SrinathNeela Aug 16 2020 at 21:00

coba ini

from win32com.client import Dispatch
import win32com
import pandas as pd

def mailprepare():
    num = range(0, 5)
    for kk in num:
        outlook = win32com.client.Dispatch("Outlook.Application")
        for accoun in outlook.Session.Accounts:
            if accoun.SmtpAddress == '[email protected]':
                newaccount = accoun
                break
        mail = outlook.CreateItem(0)
        mail._oleobj_.Invoke(*(64209, 0, 8, 0, newaccount))
        data = pd.ExcelFile('D:\\path.xlsx')
        sheet = data.parse('Sheet1')
        name = sheet['Names'][kk]
        mailto = sheet['Mails'][kk]

        att = 'D:\\yourattchment.txt'
        with open(att, 'r') as my_attch:
            myfile=my_attch.read()

        mail.To = mailto
        mail.Subject = 'Subject'
        mail.Body = 'mail body'+ name
        mail.Attachments.Add(att)

        mail.Display(True)
        mail.send

mailprepare()
0m3r Aug 17 2020 at 08:25

Anda hanya menetapkan hosts.txtke variabel tetapi Attachments.Add sedang mencari jalur sistem file lengkap dengan nama file

Untuk mendapatkan penggunaan direktori saat ini

Contoh

import os
print(os.getcwd() + "\hosts.txt")

Atau

import os

attachment = "hosts.txt"
print(os.path.realpath(attachment))

FYI - Saya menggunakan 3.8 python