/// <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); }
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; } }
private void store_FolderEvent(IMAPIFolderID newFolderID, IMAPIFolderID oldFolderID, EEventMask flags) { IMAPIFolder f = newFolderID.OpenFolder(); MessageBox.Show(f.DisplayName, "Folder event: " + flags.ToString()); }
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()); }
//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) { } }
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); }
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; } }
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);
public IMAPIAdviseSink Advise(EEventMask mask) { return new MAPIAdviseSink(this, mask, this.session); }
/// <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; }