web-dev-qa-db-fra.com

Envoyer un email via Python à l'aide d'Outlook 2016 sans l'ouvrir

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

Le code ci-dessus fonctionne parfaitement. Mais le problème est que Outlook doit être ouvert sur le système et connecté, seul le courrier est envoyé.

Existe-t-il un moyen d'envoyer un courrier à l'aide d'Outlook sans exécuter l'application Outlook sur le système?

3
noswear

Vous devez utiliser l'API Outlook REST sans automatiser Outlook. Jetez un coup d'œil aux exemples suivants:

Sachez que Microsoft ne recommande pas actuellement et ne prend pas en charge l'automatisation des applications Microsoft Office à partir d'une application ou d'un composant client non interactif et non surveillé (y compris les services ASP, ASP.NET, DCOM et NT), car Office peut être instable. comportement et/ou blocage lorsque Office est exécuté dans cet environnement.

Si vous créez une solution qui s'exécute dans un contexte côté serveur, vous devez essayer d'utiliser des composants sécurisés pour une exécution sans surveillance. Ou bien, vous devriez essayer de trouver des alternatives permettant au moins une partie du code de s'exécuter côté client. Si vous utilisez une application Office à partir d'une solution côté serveur, il manquera plusieurs des capacités nécessaires à son exécution. De plus, vous prendrez des risques avec la stabilité de votre solution globale. Pour plus d'informations à ce sujet, reportez-vous à l'article Considérations relatives à l'automatisation côté serveur d'Office

1
Eugene Astafiev

Le problème est que la soumission de message est asynchrone et votre code se ferme avant que le message ne soit envoyé. En cas d'échange, essayez de désactiver le mode mis en cache - la boutique en ligne enverra le message immédiatement. Sinon (magasin Exchange ou PST en cache), vous devez conserver l'objet Outlook jusqu'à ce que le message soit réellement envoyé. Vous devez attendre que l'événement SyncObject.SyncEnd se déclenche. SyncObject peut être extrait de la collection Namespace.SyncObjects ("Tous les comptes" est le premier élément de cette collection). 

0