2012-02-18 4 views
0

Я новый 2 C#, и мне была задана задача ... Мне нужно написать код C# для загрузки отправленных вложений электронной почты и темы электронной почты из Outlook 2007 на локальный диск или в любое указанное место , Как мне это сделать? Я могу получить вложения, которые находятся в папке «Входящие». Может ли кто-нибудь помочь мне получить почту, отправленную через Outlook?Получение вложений из Outlook

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    this.Application.NewMail += new 
     Microsoft.Office.Interop.Outlook. 
     ApplicationEvents_11_NewMailEventHandler(ThisApplication_NewMail); 
} 

private void ThisApplication_NewMail() 
{ 
    Outlook.MAPIFolder SentMail = this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); 
    Outlook.Items SentMailItems = SentMail.Items; 
    Outlook.MailItem newEmail = null; 
    //SentMailItems = SentMailItems.Restrict("[Unread] = true"); 
    try 
    { 
     foreach (object collectionItem in SentMailItems) 
     { 
      newEmail = collectionItem as Outlook.MailItem; 
      if (newEmail != null) 
      { 
       if (newEmail.Attachments.Count > 0) 
       { 
        for (int i = 1; i <= newEmail.Attachments.Count; i++) 
        { 
         newEmail.Attachments[i].SaveAsFile(@"C:\TestFileSave\" + newEmail.Attachments[i].FileName); 
        } 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     string errorInfo = (string)ex.Message 
      .Substring(0, 11); 
     if (errorInfo == "Cannot save") 
     { 
      MessageBox.Show(@"Create Folder C:\TestFileSave"); 
     } 
    } 
} 

Спасибо заранее

ответ

5

Я проверил свой код, то SaveAsFile() метод Attachment экземпляра класса бросает:

{System.IO.DirectoryNotFoundException: Не удается сохранить вложение. Путь не существует. Проверьте правильность пути. в Microsoft.Office.Interop.Outlook.Attachment.SaveAsFile (String Путь) ...}

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

private void ThisApplication_NewMail() 
{ 
    const string destinationDirectory = @"C:\TestFileSave"; 

    if (!Directory.Exists(destinationDirectory)) 
    { 
     Directory.CreateDirectory(destinationDirectory); 
    } 

    MAPIFolder sentMail = Application.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderSentMail); 
    Items sentMailItems = sentMail.Items; 
    try 
    { 
     foreach (object collectionItem in sentMailItems) 
     { 
      MailItem newEmail = collectionItem as MailItem; 
      if (newEmail == null) continue; 

      if (newEmail.Attachments.Count > 0) 
      { 
       for (int i = 1; i <= newEmail.Attachments.Count; i++) 
       { 
        string filePath = Path.Combine(destinationDirectory, newEmail.Attachments[i].FileName); 
        newEmail.Attachments[i].SaveAsFile(filePath); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 
} 

Надеюсь, это поможет.

+1

спасибо Serge :-) –

+0

Если я хочу вложение из выбранного письма во входящих? – SANDEEP

0

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

private void ThisApplication_NewMail() 
{ 
    const string destinationDirectory = @"C:\TestFileSave"; 
    List<string> senderList = new List<string>(); 
    if (!Directory.Exists(destinationDirectory)) 
    { 
     Directory.CreateDirectory(destinationDirectory); 
    } 

    MAPIFolder sentMail = Application.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderSentMail); 
    Items sentMailItems = sentMail.Items; 
    try 
    { 
     foreach (object collectionItem in sentMailItems) 
     { 
      MailItem newEmail = collectionItem as MailItem; 
      senderEmailAdd = newEmail.SenderEmailAddress; 
      if (newEmail == null) continue; 

      if (newEmail.Attachments.Count > 0 && senderList.Contains(senderEmailAdd)) 
      { 
       for (int i = 1; i <= newEmail.Attachments.Count; i++) 
       { 
        string filePath = Path.Combine(destinationDirectory, newEmail.Attachments[i].FileName); 
        newEmail.Attachments[i].SaveAsFile(filePath); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 
} 
Смежные вопросы