J'utilise Outlook 2003
.
Quelle est la meilleure façon d'envoyer un courriel (par le biais de Outlook 2003
) en utilisant Python
?
J'utilise Outlook 2003
.
Quelle est la meilleure façon d'envoyer un courriel (par le biais de Outlook 2003
) en utilisant Python
?
Une solution simple pour Office 365 est
from O365 import Message
html_template = """
<html>
<head>
<title></title>
</head>
<body>
{}
</body>
</html>
"""
final_html_data = html_template.format(df.to_html(index=False))
o365_auth = ('sender_username@company_email.com','Password')
m = Message(auth=o365_auth)
m.setRecipients('receiver_username@company_email.com')
m.setSubject('Weekly report')
m.setBodyHTML(final)
m.sendMessage()
Aquí df
est un dataframe converti en un tableau html, qui est injecté dans html_template
En dehors de win32, si votre entreprise a mis en place un système de gestion de l'information sur le Web, vous pouvez également essayer l'API REST de PYTHON, qui a été officiellement créée par Microsoft. https://msdn.microsoft.com/en-us/office/office365/api/mail-rest-operations )
C'est celui que j'ai essayé en utilisant Win32 :
import win32com.client as win32
import psutil
import os
import subprocess
import sys
# Drafting and sending email notification to senders. You can add other senders' email in the list
def send_notification():
outlook = win32.Dispatch('outlook.application')
olFormatHTML = 2
olFormatPlain = 1
olFormatRichText = 3
olFormatUnspecified = 0
olMailItem = 0x0
newMail = outlook.CreateItem(olMailItem)
newMail.Subject = sys.argv[1]
#newMail.Subject = "check"
newMail.BodyFormat = olFormatHTML #or olFormatRichText or olFormatPlain
#newMail.HTMLBody = "test"
newMail.HTMLBody = sys.argv[2]
newMail.To = "xyz@abc.com"
attachment1 = sys.argv[3]
attachment2 = sys.argv[4]
newMail.Attachments.Add(attachment1)
newMail.Attachments.Add(attachment2)
newMail.display()
# or just use this instead of .display() if you want to send immediately
newMail.Send()
# Open Outlook.exe. Path may vary according to system config
# Please check the path to .exe file and update below
def open_outlook():
try:
subprocess.call(['C:\Program Files\Microsoft Office\Office15\Outlook.exe'])
os.system("C:\Program Files\Microsoft Office\Office15\Outlook.exe");
except:
print("Outlook didn't open successfully")
#
# Checking if outlook is already opened. If not, open Outlook.exe and send email
for item in psutil.pids():
p = psutil.Process(item)
if p.name() == "OUTLOOK.EXE":
flag = 1
break
else:
flag = 0
if (flag == 1):
send_notification()
else:
open_outlook()
send_notification()
Il s'agit d'une question assez ancienne, mais il existe une autre solution. Le serveur SMTP actuel d'Outlook est (en date de 2022) :
smtp.office365.com
587
(pour TLS)La solution la plus simple et la plus propre est probablement d'utiliser Courrier rouge qui les a déjà définis :
pip install redmail
Ensuite :
from redmail import outlook
outlook.user_name = "example@hotmail.com"
outlook.password = "<MY PASSWORD>"
outlook.send(
receivers=["you@example.com"],
subject="An example",
text="Hi, this is an example."
)
Red Mail prend en charge toutes sortes de fonctions avancées :
Liens :
Disclaimer : Je suis l'auteur
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
@ThiefMaster : mon
smtp
n'est pas le même que celui de mon courrier électronique.channel
mon smtp via mon fournisseur d'accès internet (att
), même si j'utilise une adresse de courrier électronique différente (nonatt's
) pour envoyer le courriel.Outlook
est déjà configuré pour gérer cela. S'il existe d'autres solutions (nonOutlook
) qui prendront également en charge cette fonction, je serais heureux d'entendre des suggestions.0 votes
La bonne solution consiste à utiliser l'outil python smtplib