Envoyer un e-mail Outlook avec pièce jointe à la liste des utilisateurs dans Excel avec python
Aug 16 2020
Je peux envoyer un e-mail en utilisant Outlook avec le script ci-dessous, mais si j'essaie d'envoyer une pièce jointe, cela donne une erreur.
Nom de fichier_Email.xlsx
NAME EMAIL
Roy [email protected]
Jack [email protected]
Script 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()
erreur que j'obtiens:
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)
Le nom du fichier est correct et se trouve dans le même répertoire que le script.
J'ai également essayé de changer la pièce jointe = 'hosts.txt', mais même erreur. Je ne sais pas ce qui manque.
Réponses
1 SrinathNeela Aug 16 2020 at 21:00
essaye ça
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
Vous affectez simplement hosts.txtà une variable mais Attachments.Add recherche le chemin complet du système de fichiers avec un nom de fichier
Pour obtenir le répertoire courant, utilisez
Exemple
import os
print(os.getcwd() + "\hosts.txt")
Ou
import os
attachment = "hosts.txt"
print(os.path.realpath(attachment))
FYI - Je suis sur python 3.8