Добавление вложения создает новый элемент MailItem в папке входящих сообщений Outlook.

Я работаю с пустым файлом msg, созданным через Outlook один раз. Следующий код добавляет вложение к электронному письму (вы можете сохранить его, используя msg.SaveAs(Path=save_path)).

import win32com.client

msg_path = r'C:\email.msg'
attachment_path = r'C:\specimen.pdf'

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = outlook.OpenSharedItem(msg_path)

msg.Attachments.Add(Source=attachment_path)

Проблема: последняя строка msg.Attachments.Add(Source=attachment_path) создает новую копию письма в папке «Входящие».

Я нашел здесь старое обсуждение проблемы: При добавлении вложения создается новый элемент MailItem в папке входящих сообщений. Вот несколько цитат оттуда:

OpenSharedItem всегда создает временное сообщение и импортирует содержимое файла MSG; он не работает напрямую с указанным файлом.

Проблема в том, что сообщение сохраняется при добавлении вложения, но вы ничего не можете с этим поделать.

Важная часть заключается в том, что OOM не работает с файлом MSG - как только он импортируется в сообщение в одной из папок Outlook, исходный файл MSG исчезает.

Существуют ли какие-либо обходные пути, чтобы предотвратить создание Outlook нового сообщения в папке «Входящие»? Если нет, как заставить Outlook сохранять его в папке нежелательной почты?

Моя цель - изменить существующий пустой файл msg: добавить строку темы и вложение.


person Max    schedule 11.10.2018    source источник
comment
Оказалось, что даже ручное вложение в файл msg (Insert - ›Attach file) создает новое письмо в папке Inbox.   -  person Max    schedule 12.10.2018
comment
Создание нового сообщения электронной почты вручную, прикрепление к нему файла и последующее сохранение в качестве автономного файла msg не приводит к созданию нового сообщения электронной почты в папке «Входящие».   -  person Max    schedule 12.10.2018


Ответы (1)


Отвечая на свой вопрос,

Идея состоит в том, чтобы создать новое письмо вместо изменения существующего. Вот код:

outlook = win32com.client.Dispatch("Outlook.Application")
msg = outlook.CreateItem(0)
msg.Attachments.Add(Source=str(attachment_path))
msg.SaveAs(Path=save_path)
person Max    schedule 11.10.2018
comment
Но ваш код не будет импортировать данные из существующего файла MSG. - person Dmitry Streblechenko; 13.10.2018
comment
Правильно, и этого не должно быть, потому что я работал с пустым файлом MSG: импортировать нечего. - person Max; 14.10.2018