Python을 사용하여 Excel의 사용자 목록에 첨부 파일이있는 Outlook 전자 메일 보내기

Aug 16 2020

아래 스크립트로 Outlook을 사용하여 이메일을 보낼 수 있지만 첨부 파일을 보내려고하면 오류가 발생합니다.

파일 Name_Email.xlsx

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

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()

내가 얻는 오류 :

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)

파일 이름이 정확하고 스크립트와 동일한 디렉토리에 있습니다.

또한 첨부 파일 = 'hosts.txt'를 변경하려고 시도했지만 동일한 오류가 발생했습니다. 무엇이 누락되었는지 확실하지 않습니다.

답변

1 SrinathNeela Aug 16 2020 at 21:00

이 시도

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

단순히 hosts.txt변수에 할당 하고 있지만 Attachments.Add 는 파일 이름이있는 전체 파일 시스템 경로를 찾고 있습니다.

현재 디렉토리 사용을 얻으려면

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

또는

import os

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

참고로-저는 3.8 파이썬에 있습니다.