J'utilise Outlook 2003
.
Quel est le meilleur moyen d'envoyer un courrier électronique (via Outlook 2003
) à l'aide de Python
?
Utilisez le smtplib fourni avec python. Notez que cela nécessitera que votre compte de messagerie autorise smtp, qui n'est pas nécessairement activé par défaut.
SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["listOfEmails"] # must be a list
SUBJECT = "Subject"
TEXT = "Your Text"
# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
EDIT: cet exemple utilise des domaines réservés comme décrit dans RFC2606
SERVER = "smtp.example.com"
FROM = "[email protected]"
TO = ["[email protected]"] # must be a list
SUBJECT = "Hello!"
TEXT = "This is a test of emailing through smtp of example.com."
# Prepare actual message
message = """From: %s\r\nTo: %s\r\nSubject: %s\r\n\
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
import smtplib
server = smtplib.SMTP(SERVER)
server.login("MrDoe", "PASSWORD")
server.sendmail(FROM, TO, message)
server.quit()
Pour que cela fonctionne réellement avec gmail, M. Doe devra accéder à l'onglet Options de gmail et le configurer pour autoriser les connexions smtp.
Notez l'ajout de la ligne de connexion pour vous authentifier auprès du serveur distant. La version originale n'inclut pas ceci, un oubli de ma part.
import win32com.client as win32
Outlook = win32.Dispatch('Outlook.application')
mail = Outlook.CreateItem(0)
mail.To = 'To address'
mail.Subject = 'Message subject'
mail.Body = 'Message body'
mail.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional
# To attach a file to the email (optional):
attachment = "Path to the attachment"
mail.Attachments.Add(attachment)
mail.Send()
Utilisera votre compte Outlook local pour envoyer.
Remarque Si vous essayez de faire quelque chose de non mentionné ci-dessus, consultez les propriétés/méthodes de la documentation COM: https://msdn.Microsoft.com/en-us/vba/Outlook-vba/articles/mailitem-object-Outlook . Dans le code ci-dessus, mail
est un objet MailItem.
Vérifiez via Google, il y a beaucoup d'exemples, voir ici pour un exemple.
En ligne pour faciliter la visualisation:
import win32com.client
def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)
Msg = o.CreateItem(0)
Msg.To = recipient
Msg.CC = "moreaddresses here"
Msg.BCC = "address"
Msg.Subject = subject
Msg.Body = text
attachment1 = "Path to attachment no. 1"
attachment2 = "Path to attachment no. 2"
Msg.Attachments.Add(attachment1)
Msg.Attachments.Add(attachment2)
Msg.Send()
en utilisant pywin32 :
from win32com.client import Dispatch
session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nUserName');
msg = session.Outbox.Messages.Add('Hello', 'This is a test')
msg.Recipients.Add('Corey', 'SMTP:[email protected]')
msg.Send()
session.Logoff()
La solution la plus simple pour Office 365:
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()
ici df est un cadre de données converti en table html, qui est injecté dans html_template
Outre win32, si votre société a configuré votre Web Outlook, vous pouvez également essayer l’API PYTHON REST, qui est officiellement créée par Microsoft. ( https://msdn.Microsoft.com/en-us/office/office365/api/mail-rest-operations )
C’est celui que j’ai essayé avec 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 = "[email protected]"
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()
Je voulais envoyer un email en utilisant SMTPLIB, c'est plus facile et cela ne nécessite pas de configuration locale. Après d'autres réponses n'étaient pas directement utiles, C'est ce que j'ai fait.
Ouvrez Outlook dans un navigateur. Allez dans le coin en haut à droite, cliquez sur l'icône représentant une roue dentée pour les paramètres, choisissez "Options" dans la liste déroulante ....a allez dans "Comptes", cliquez sur "Pop et imap", : "Laisser les appareils et les applications utiliser pop",
Choisissez l'option Oui et Enregistrer les modifications.
Voici le code ci-après; Modifiez où nécessaire . La chose la plus importante est d’activer POP et le code serveur ici;
import smtplib
body = 'Subject: Subject Here .\nDear ContactName, \n\n' + 'Email\'s BODY text' + '\nYour :: Signature/Innitials'
try:
smtpObj = smtplib.SMTP('smtp-mail.Outlook.com', 587)
except Exception as e:
print(e)
smtpObj = smtplib.SMTP_SSL('smtp-mail.Outlook.com', 465)
#type(smtpObj)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('[email protected]', "password")
smtpObj.sendmail('[email protected]', '[email protected]', body) # Or recipient@Outlook
smtpObj.quit()
pass