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
?
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 l'envoi.
Si vous essayez de faire quelque chose qui n'est pas 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.
Réponse mise à jour. mail.HTMLBody vous permet de le définir comme une chaîne de caractères html.
Pour une solution qui utilise outlook, voir La réponse de TheoretiCAL .
Sinon, utilisez le smtplib fourni avec python. Notez que cela nécessite que votre compte de messagerie permette le smtp, ce qui n'est pas nécessairement activé par défaut.
SERVER = "smtp.example.com"
FROM = "yourEmail@example.com"
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 = "johnDoe@example.com"
TO = ["JaneDoe@example.com"] # 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 aller dans l'onglet des options de gmail et le configurer pour autoriser les connexions smtp.
Notez l'ajout de la ligne de connexion pour s'authentifier auprès du serveur distant. La version originale ne l'inclut pas, un oubli de ma part.
Ce n'était pas la question. La question porte sur l'utilisation de l'API Win32 afin de contrôler Outlook.
@Spencer Rathbun : merci. Le problème est le suivant : 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.
@user3262424 Donc votre adresse email n'est pas la même que votre serveur smtp ? Cela devrait être géré sur le serveur smtp. Il doit être configuré pour transmettre les e-mails qui ne proviennent pas de ce serveur au serveur de messagerie approprié. S'il est mal configuré, il permet aux spammeurs de vous contourner. Mais vraisemblablement, vous connaissez les adresses IP concernées et pouvez les placer sur une liste d'autorisation.
Vérifiez via Google, il y a beaucoup d'exemples, voir aquí pour un.
Intégré 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()
Merci, c'est bien. Le problème est qu'Outlook continue de générer un alert message
me demandant si je veux continuer ou, au contraire, terminer l'accès au script. Existe-t-il un moyen d'ignorer cette alert message
?
Je ne suis pas à côté de cet ordinateur en ce moment. Quelque chose informant qu'un script essaie d'accéder à outlook
et que ça pourrait être un virus, etc. et si je veux continuer.
Je voulais envoyer des e-mails en utilisant SMTPLIB, c'est plus facile et cela ne nécessite pas de configuration locale. Après que d'autres réponses n'aient pas été directement utiles, voici ce que j'ai fait.
Ouvrez Outlook dans un navigateur ; Allez dans le coin supérieur droit, cliquez sur l'icône de l'engrenage pour les paramètres, choisissez "Options" dans la liste déroulante qui apparaît. Allez dans 'Comptes', cliquez sur 'Pop et Imap', Vous verrez l'option : "Laisser les appareils et les applications utiliser le pop",
Choisissez l'option Oui et enregistrez les modifications.
Voici le code qui suit ; modifiez-le si nécessaire. La chose la plus importante est d'activer POP et le code du 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('me@outlook.com', "password")
smtpObj.sendmail('sender@outlook.com', 'recipient@gmail.com', body) # Or recipient@outlook
smtpObj.quit()
pass
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:corey@foo.com')
msg.Send()
session.Logoff()
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