Пример #1
0
        /// <summary>
        /// Registers to receive notification of specified events that affect the message store.
        /// </summary>
        /// <param name="eventMask">A mask of values that indicate the types of notification events that the caller is interested in and should be included in the registration. </param>
        /// <returns></returns>
        public bool RegisterEvents(EEventMask eventMask)
        {
            callbackHandler_ = new OnAdviseCallbackHandler(OnNotifyCallback);
            HRESULT hresult = HRESULT.S_OK;

            try
            {
                pAdviseSink_ = new MAPIAdviseSink(IntPtr.Zero, callbackHandler_);
                hresult      = MAPIStore.Advise(0, IntPtr.Zero, (uint)eventMask, pAdviseSink_, out ulConnection_);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
                return(false);
            }
            return(hresult == HRESULT.S_OK);
        }
Пример #2
0
        void OnNotifyCallback(IntPtr pContext, uint cNotification, IntPtr lpNotifications)
        {
            EEventMask eventType = (EEventMask)Marshal.ReadInt32(lpNotifications);
            int        intSize   = Marshal.SizeOf(typeof(int));
            IntPtr     sPtr      = lpNotifications + intSize * 2; //ulEventType, ulAlignPad

            switch (eventType)
            {
            case EEventMask.fnevNewMail:
            {
                Console.WriteLine("New mail");
                if (this.OnNewMail == null)
                {
                    break;
                }
                NEWMAIL_NOTIFICATION     notification = (NEWMAIL_NOTIFICATION)Marshal.PtrToStructure(sPtr, typeof(NEWMAIL_NOTIFICATION));
                MsgStoreNewMailEventArgs n            = new MsgStoreNewMailEventArgs(StoreID, notification);
                this.OnNewMail(this, n);
            }
            break;
            }
        }
Пример #3
0
 private void store_FolderEvent(IMAPIFolderID newFolderID, IMAPIFolderID oldFolderID, EEventMask flags)
 {
     IMAPIFolder f = newFolderID.OpenFolder();
     MessageBox.Show(f.DisplayName, "Folder event: " + flags.ToString());
 }
Пример #4
0
 private void store_MessageEvent(IMAPIMessageID newMessageID, IMAPIMessageID oldMessageID, EEventMask messageFlags)
 {
     IMAPIMessage msg = newMessageID.OpenMessage();
     string m = msg.Subject + " at " + msg.LocalDeliveryTime.ToString();
     MessageBox.Show(m + ", in " + newMessageID.ParentFolder.OpenFolder().DisplayName, "Message event: " + messageFlags.ToString());
 }
Пример #5
0
 //Called for every incoming email(or unreaded one)
 private void OnEmailMessageEvent(IMAPIMessageID newMessageID, IMAPIMessageID oldMessageID, EEventMask messageFlags)
 {
     try
     {
         IMAPIMessage msg = newMessageID.OpenMessage();
         msg.PopulateProperties(EMessageProperties.Body | EMessageProperties.DeliveryTime | EMessageProperties.Sender | EMessageProperties.Subject);
         if ((msg.Flags & EMessageFlags.MSGFLAG_READ) == 0)
         {
             CheckMessage(msg.Body, msg.Sender.FullAddress, msg.LocalDeliveryTime);
         }
     }
     catch (Exception exc)
     {
     }
 }
Пример #6
0
 private void adviser_NewMail(EEventMask mask, cemapi.NEWMAIL_NOTIFICATION o)
 {
     if (this.NewMessage == null)
         return;
     this.NewMessage(MAPIMessageID.BuildFromID(o.entryID, MAPIFolderID.BuildFromID(o.parentID, this), this), o.flags);
 }
Пример #7
0
 private void adviser_ObjectNotification(EEventMask mask, cemapi.OBJECT_NOTIFICATION o)
 {
     switch (o.objType)
     {
         case cemapi.ObjectType.MAPI_FOLDER:
             if (this.FolderEvent != null)
             {
                 this.FolderEvent(MAPIFolderID.BuildFromID(o.entryID, this),
                     MAPIFolderID.BuildFromID(o.oldID, this),
                     mask);
             }
             break;
         case cemapi.ObjectType.MAPI_MESSAGE:
             if (this.MessageEvent != null)
             {
                 this.MessageEvent(MAPIMessageID.BuildFromID(o.entryID, MAPIFolderID.BuildFromID(o.parentID, this), this),
                     MAPIMessageID.BuildFromID(o.oldID, MAPIFolderID.BuildFromID(o.oldParentID, this), this),
                     mask);
             }
             break;
         default:
             throw new Exception("Event type \"" + o.objType.ToString() + "\" not implemented yet");
             //break;
     }
 }
Пример #8
0
 public override void Dispose()
 {
     this.advisingOn = 0;
     UpdateAdvisors();
 }
 public MAPIAdviseSink(IMsgStore store, EEventMask eventMask, IMAPISession owner)
 {
     this.store = store;
     IntPtr ptr = IntPtr.Zero;
     this.callbackHandler = OnNotifyCallback;
     HRESULT hr = MAPIlibAdvise(store.Ptr, eventMask, this.callbackHandler, ref ptr);
     if (hr != HRESULT.S_OK)
         throw new Exception("MAPIlibAdvise failed: " + hr.ToString());
     this.adviserPtr = ptr;
     this.owner = owner;
 }
 private static extern HRESULT MAPIlibAdvise(IntPtr storePtr, EEventMask eventMask, OnAdviseCallbackHandler callback, ref IntPtr adviser);
Пример #11
0
 public IMAPIAdviseSink Advise(EEventMask mask)
 {
     return new MAPIAdviseSink(this, mask, this.session);
 }
Пример #12
0
 /// <summary>
 /// Registers to receive notification of specified events that affect the message store.
 /// </summary>
 /// <param name="eventMask">A mask of values that indicate the types of notification events that the caller is interested in and should be included in the registration. </param>
 /// <returns></returns>
 public bool RegisterEvents(EEventMask eventMask)
 {
     callbackHandler_ = new OnAdviseCallbackHandler(OnNotifyCallback);
     HRESULT hresult = HRESULT.S_OK;
     try
     {
         pAdviseSink_ = new MAPIAdviseSink(IntPtr.Zero, callbackHandler_);
         hresult = MAPIStore.Advise(0, IntPtr.Zero, (uint)eventMask, pAdviseSink_, out ulConnection_);
     }
     catch (Exception ex)
     {
         System.Diagnostics.Trace.WriteLine(ex.Message);
         return false;
     }
     return hresult == HRESULT.S_OK;
 }