2016-07-18 17 views
0

Ich habe ein Outlook-Add-In (Outlook 2013 und 2016 VSTO-Add-In) für geschäftliche Zwecke erstellt, um die E-Mail-Details in unserer Datenbank zu speichern. Das Add-In wird gestartet, wenn eine neue E-Mail erstellt wird, schließt sich jedoch, wenn die E-Mail gesendet wird.C# Outlook-Add-in get Gesendetes Datum, nachdem die E-Mail im Postfach gesendet wurde

Das Sendedatum der E-Mail wird erst hinzugefügt, nachdem die E-Mail in das Postfach Gesendet verschoben wurde. Gibt es eine Möglichkeit, mein aktuelles Add-In (oder ein anderes Add-In) zu verwenden, um das gesendete Datum nach dem Schließen zu erhalten, ohne dass der Benutzer darauf warten muss, dass es in das gesendete Postfach verschoben wird?

Ich weiß, dass es leicht in VBA gemacht werden kann, aber ich möchte vorzugsweise ein Add-in verwenden, so dass es leicht für alle Benutzer mit Exchange-Server geladen werden kann.

Antwort

0

Wäre dieses Datum nicht das heutige Datum/Uhrzeit (Now) oder etwas ähnliches?

Alles, was Sie in VBA tun können, können Sie in einem COM-Add-in tun - abonnieren Sie das Items.ItemAdd-Ereignis im Ordner Gesendete Objekte und rufen Sie das Datum ab, wenn das Ereignis ausgelöst wird.

0

Vielen Dank Dmitry für die Antwort. Es hat mich auf den richtigen Weg gebracht. Ich habe mein vorhandenes VSTO-Add-In verwendet, um ein neues Element in das Postfach "Gesendete" hinzuzufügen. Ich wusste nicht, dass beim Einfügen in die "ThisAddIn_Startup" -Methode das Add-In wieder aktiviert wird, was jetzt Sinn macht.

Ich folgte this Beispiel.

Hier ist mein Code:

Outlook.NameSpace outlookNameSpace; 
Outlook.MAPIFolder Sent_items; 
Outlook.Items items; 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    outlookNameSpace = this.Application.GetNamespace("MAPI"); 
    Sent_items = outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail); 

    items = Sent_items.Items; 
    items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd); 
} 

void items_ItemAdd(object Item) 
{ 
    Outlook.MailItem mail = (Outlook.MailItem)Item;  

    string strMailItemNumber_filter = mail.UserProperties["MailItemNumber"].Value; 

    if ((Item != null) && (!string.IsNullOrWhiteSpace(strMailItemNumber_filter))) 
    { 
     if (mail.MessageClass == "IPM.Note" && 
        mail.UserProperties["MailItemNumber"].Value.ToUpper().Contains(strMailItemNumber_filter.ToUpper())) //Instead of subject use other mail property 
     { 
      //Write 'Sent date' to DB 
      System.Windows.Forms.MessageBox.Show("Sent date is: "+ mail.SentOn.ToString()+ " MailNr = "+strMailItemNumber_filter); 

     } 
    } 

} 

Ich hatte einen neuen Mail-Benutzer definierte Eigenschaft erstellen, um die E-Mail übereinstimmen ich die richtige E-Mail in der Mailbox gesendet finden gesendet:

 private void AddUserProperty(Outlook.MailItem mail) 
    { 
     Outlook.UserProperties mailUserProperties = null; 
     Outlook.UserProperty mailUserProperty = null; 
     try 
     { 
      mailUserProperties = mail.UserProperties; 
      mailUserProperty = mailUserProperties.Add("MailItemNrProperty", Outlook.OlUserPropertyType.olText, false, 1); 
      // Where 1 is OlFormatText (introduced in Outlook 2007) 
      mail.UserProperties["MailItemNumber"].Value = "Any value as string..."; 
      mail.Save(); 
     } 
     catch (Exception ex) 
     { 
      System.Windows.Forms.MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (mailUserProperty != null) Marshal.ReleaseComObject(mailUserProperty); 
      if (mailUserProperties != null) Marshal.ReleaseComObject(mailUserProperties); 
     } 
    }