86 votes

Envoyer un email Outlook via Python ?

J'utilise Outlook 2003 .

Quelle est la meilleure façon d'envoyer un courriel (par le biais de Outlook 2003 ) en utilisant Python ?

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 (non att's ) pour envoyer le courriel. Outlook est déjà configuré pour gérer cela. S'il existe d'autres solutions (non Outlook ) 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

6voto

Gil Baggio Points 2137

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

1voto

LinconFive Points 241

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 )

1voto

Buni_Buni Points 11

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

0voto

miksus Points 71

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

  • Hôte : smtp.office365.com
  • Port : 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.com

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.

Powered by:

X