Перемещение вложения из электронного письма в другой почтовый ящик

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

Я могу легко переместить сообщение целиком, а также придумал, как сохранять вложения на диск, но ни то, ни другое мне не нужно.

Я смотрел на что-то вроде строк ниже, но я предполагаю, что нет Attachment.Move, похожего на MailItem.Move.

У кого-нибудь есть предложения относительно того, как я могу этого добиться? Любая помощь будет очень признательна.

Sub test1()

Dim olFolder As MAPIFolder
Set olFolder = Application.GetNamespace("MAPI").Folders("Mailbox - Test").Folders("Inbox")

Dim Item As Object

For Each Item In olFolder.Items
    Set oMail = Item
    For Each att In oMail.Attachments
        att.Move Application.GetNamespace("MAPI").Folders("Enterprise Connect").Folders("Test")
    Next
Next
End Sub

person brokencornets    schedule 16.11.2015    source источник
comment
Почтовые папки AFAIK могут содержать только элементы Outlook (письма, заметки, календари и т. д.). Фактические файлы не могут быть сохранены как элементы в папках в Outlook.   -  person Scott Holtzman    schedule 16.11.2015
comment
Я обнаружил, что когда я перетаскиваю вложение из сообщения электронной почты в другую папку, оно сохраняется как отдельный файл без сообщения электронной почты, поэтому я надеялся, что это можно будет воспроизвести программно?   -  person brokencornets    schedule 16.11.2015


Ответы (2)


Вложения не существуют как отдельные объекты в папках — что вы видите, если сообщение с одним вложением. Класс сообщения элемента — IPM.Document.* — при двойном щелчке по такому элементу Outlook достаточно умен, чтобы открыть вложение вместо отображения инспектора. Взгляните на такой элемент с помощью OutlookSpy (нажмите кнопки IMessage и Item).

Объектная модель Outlook не позволяет напрямую создавать объекты DocumentItem. Но вы можете создать обычный объект MailItem, добавить вложение с помощью MailItem.Attachments.Add, а затем соответствующим образом сбросить свойство MessageClass, например. для вложения ".txt" найдите раздел реестра HKEY_CLASSES_ROOT\.txt, прочитайте значение по умолчанию, добавьте его к классу сообщения (IPM.Note.txtfile).

Если вы используете Redemption, он предоставляет RDODocumentItem и позволяет напрямую создавать элементы документа (см. примеры).

person Dmitry Streblechenko    schedule 16.11.2015
comment
Спасибо за такой подробный ответ. На первый взгляд кажется, что это далеко за пределами моего текущего уровня, но я потрачу пару дней на то, чтобы это переварить. Приятно знать, что это хотя бы возможно! - person brokencornets; 17.11.2015

Класс Attachment не предоставляет таких методов. Вам необходимо сохранить прикрепленный файл на диск, а затем заново прикрепить его к другому элементу Outlook.

Вы можете найти Начало работы с VBA в Outlook полезная статья 2010 года.

person Eugene Astafiev    schedule 16.11.2015
comment
Спасибо за ответ. Значит, нет возможности просто разместить вложение в папке, не прикрепляя его к почтовому отправлению? Когда я перетаскиваю вложение вручную, оно отображается без почты в указанной папке, поэтому я предполагал, что это также возможно с VBA. - person brokencornets; 16.11.2015