2011-01-12 1 views
3

J'utilise Visual Studio 2010 pour créer un complément Outlook 2007. Maintenant, je veux savoir si un e-mail a été récemment envoyé, répondu ou transmis. Y a-t-il des propriétés pour cela?Comment décider si un e-mail a été récemment envoyé, répondu ou transféré?

using Outlook = Microsoft.Office.Interop.Outlook; 

namespace _Outlook2k7_Add_In 
{ 
    public partial class ThisAddIn 
    { 
     private void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 
     } 

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

     void Application_ItemSend(object Item, ref bool Cancel) 
     { 
      Outlook.MailItem mail = Item as Outlook.MailItem; 

      if (mail == null) 
       return; 

      // Magic? 
     } 

     #region VSTO generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InternalStartup() 
     { 
      this.Startup += new System.EventHandler(ThisAddIn_Startup); 
      this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); 
      this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); 
     } 

     #endregion 
    } 
} 

Répondre

1

Il y a 3 propriétés MAPI étendues qui traitent de l'état de message pour répondu à/transmis:

PR_ICON_INDEX (0x10800003) PR_LAST_VERB_EXECUTED (0x10810003) PR_LAST_VERB_EXECUTION_TIME (0x10820040)

Pour obtenir ces valeurs dans Outlook 2007/2010, utilisez l'objet PropertyAccessor:

http://msdn.microsoft.com/en-us/library/bb176395(office.12).aspx

S'il s'agit d'un envoi en cours, la propriété MailItem.Sent sera toujours False.

+0

Je ne suis pas certain à 100%, mais je crois que les propriétés MAPI ne sont fixées que lorsque vous utilisez un serveur Exchange, et non pour des situations POP/IMAP/SMTP. Le PO ne précise pas ce qu'il utilise, cela peut ou non les affecter. –

+0

Non, les propriétés MAPI sont utilisées dans tous les éléments Outlook, quel que soit le magasin. Il existe des propriétés spécifiques à Exchange, mais celles en question sont standard. –

0
MAPIFolder inbox = Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
Items unreadItems = inbox.Items.Restrict("[UnRead] = true"); 

foreach (MailItem mail in unreadItems) 
{ 
    // Do Stuff 
} 

Cela semble fonctionner très bien pour moi. Je ne sais pas que le mailitem lui-même aurait cette information. Vous pouvez filtrer le dossier olFolderSentMail à la place.

Questions connexes