Надстройке Outlook не удалось прочитать путь вложения

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

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
    }

    void Application_ItemSend(object Item, ref bool Cancel)
    {

        Outlook.MailItem mail = Item as Outlook.MailItem;

        var atts = mail.Attachments;

        foreach (Outlook.Attachment attachment in atts)
        {
            MessageBox.Show(attachment.PathName); // the PathName is null !
        }
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {

    }
}

Пользователь создает новое письмо и добавляет вложения, которые уже находятся на жестком диске. Как я могу получить информацию о пути к выбранным файлам?


person 0014    schedule 29.06.2015    source источник


Ответы (2)


Эта информация не хранится в Outlook. На низком уровне (расширенный MAPI) вложение даже не обязательно должно исходить из файла. Представьте, что файл перетаскивается из другого сообщения Outlook — физического файла вообще нет.

Почему путь важен?

person Dmitry Streblechenko    schedule 29.06.2015
comment
Перед отправкой электронного письма я хотел загрузить реальный файл на FTP и заменить его ссылкой. Я сделал это, однако мне пришлось снова сохранить вложения (временно), чтобы загрузить их. Мне просто интересно, могу ли я напрямую загружать вложения без сохранения... - person 0014; 29.06.2015
comment
Нет, ты не можешь этого сделать. Даже если пользователь перетащил файл, он может исчезнуть к моменту отправки сообщения. В MAPI вы можете напрямую получить доступ к свойству PR_ATTACH_DATA (открыть его как IStream), но файл сохранения удара по производительности (Attachment.SaveAsFile) незначителен по сравнению с отправкой данных по сети. - person Dmitry Streblechenko; 29.06.2015

Свойство PathName вложения. class возвращает строку, представляющую полный путь к связанному прикрепленному файлу. Это свойство действительно только для связанных файлов. Ознакомьтесь с Введите значение свойства.

Вложение является копией исходного файла и доступно, даже если исходный файл удален. т.е. исходный путь к файлу не сохраняется вместе с прикрепленным файлом.

person Eugene Astafiev    schedule 29.06.2015
comment
Спасибо за объяснение свойства имени пути, однако это не отвечает на мой вопрос. Это больше похоже на комментарий. - person 0014; 29.06.2015
comment
Вы можете рассмотреть возможность добавления настраиваемого свойства к объекту вложения, когда файл прикреплен. - person Eugene Astafiev; 29.06.2015
comment
Как я могу получить путь к файлу при его прикреплении? Не могли бы вы привести пример недвижимости, которую вы упомянули? - person 0014; 29.06.2015