Отправить электронную почту через Python с помощью Outlook 2016, не открывая его

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

Вышеприведенный код работает полностью. Но проблема в том, что Outlook нужно открыть в системе и войти в систему, а затем отправляется только почта.

Есть ли способ отправить почту с использованием Outlook без фактического запуска приложения Outlook в системе?

Теги:
email
outlook
pywin32

2 ответа

0

Проблема в том, что сообщение представляется асинхронным, и ваш код выходит до отправки сообщения. В случае Exchange попробуйте отключить кешированный режим - интернет-магазин отправит сообщение немедленно. В противном случае (кэшированное хранилище Exchange или PST) вы должны удерживать объект Outlook до тех пор, пока сообщение не будет отправлено. Вам нужно дождаться, когда SyncObject.SyncEnd событие SyncObject.SyncEnd. SyncObject может быть извлечен из коллекции Namespace.SyncObjects ("Все учетные записи" - это первый элемент в этой коллекции).

0

Вам необходимо использовать API REST Outlook без автоматизации Outlook. Взгляните на следующие образцы:

Имейте в виду, что Microsoft в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office от любого необработанного, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может проявлять нестабильность поведение и/или тупик, когда Office запущен в этой среде.

Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были безопасны для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы часть кода запускать клиентскую сторону. Если вы используете приложение Office из серверного решения, для успешного выполнения приложения не будет достаточного количества необходимых возможностей. Кроме того, вы рискуете стабильностью своего общего решения. Подробнее об этом читайте в статье " Вопросы для автоматизации Microsoft Office".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню