Добавката на 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 на прикачения файл клас връща низ, представляващ пълния път до свързания прикачен файл. Свойството е валидно само за свързани файлове. Вижте Тип стойност на свойството.

Прикаченият файл е копие на оригиналния файл и може да бъде достъпен дори ако оригиналният файл бъде премахнат. т.е. оригиналният път на файла не се съхранява с прикачения файл.

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