public void OnDemotedMessageHandler(StoreDriverEventSource source, StoreDriverSubmissionEventArgs args) { StoreDriverSubmissionEventArgsImpl storeDriverSubmissionEventArgsImpl = (StoreDriverSubmissionEventArgsImpl)args; if (MfnSubmitterAgent.ShouldGenerateMfn(storeDriverSubmissionEventArgsImpl.SubmissionItem.MessageClass)) { using (MfnSubmitter mfnSubmitter = new MfnSubmitter(storeDriverSubmissionEventArgsImpl.SubmissionItem, storeDriverSubmissionEventArgsImpl.MailItemSubmitter)) { TransportMailItem originalMailItem = null; TransportMailItemWrapper transportMailItemWrapper = args.MailItem as TransportMailItemWrapper; if (transportMailItemWrapper != null) { originalMailItem = transportMailItemWrapper.TransportMailItem; } mfnSubmitter.CheckAndSubmitMfn(originalMailItem); } } }
private bool ShouldGenerateMfn() { MessageItem messageItem = this.item.Item; MailboxSession mailboxSession = messageItem.Session as MailboxSession; if (mailboxSession == null) { TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the session is not a mailboxsession."); return(false); } if (!ObjectClass.IsMeetingRequest(messageItem.ClassName) && !ObjectClass.IsMeetingRequestSeries(messageItem.ClassName)) { TraceHelper.MeetingForwardNotificationTracer.TracePass <string>(TraceHelper.MessageProbeActivityId, 0L, "Not a meeting request {0} - skipping MFN generation.", messageItem.ClassName); return(false); } string text = null; bool result; try { string text2 = MfnSubmitter.SafeGetProperty <string>(messageItem, MessageItemSchema.ReceivedRepresentingEmailAddress, string.Empty); if (!string.IsNullOrEmpty(text2)) { text = string.Format("Skipping MFN generation as the update/forward was made by a delegate {0}. From: {1}, Sender {2}, Subject: {3}", new object[] { text2, messageItem.From, messageItem.Sender, messageItem.Subject ?? "<No subject found>" }); result = false; } else { int num = MfnSubmitter.SafeGetProperty <int>(messageItem, MeetingMessageSchema.AppointmentAuxiliaryFlags, 0); if ((num & 32) != 0) { text = string.Format("Skipping MFN generation for RUMs. From: {0}, Sender {1} , Subject: {2}", messageItem.From, messageItem.Sender, messageItem.Subject ?? "<No subject found>"); result = false; } else if (messageItem.IsResponseRequested && (num & 256) != 0) { text = string.Format("Skipping MFN generation for events added from group calendar. From: {0}, Sender {1} , Subject: {2}", messageItem.From, messageItem.Sender, messageItem.Subject ?? "<No subject found>"); result = false; } else { if ((num & 4) == 0) { if (mailboxSession.IsGroupMailbox()) { TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the meeting was created/updated on the group calendar. From: {0}, Sender {1}, Auxilliary Flags {2}, Subject {3}", new object[] { messageItem.From, messageItem.Sender, num, messageItem.Subject ?? "<No subject found>" }); return(false); } if (Participant.HasSameEmail(messageItem.From, messageItem.Sender, mailboxSession, true)) { TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, "Skipping MFN generation as the update was made by the organizer. From: {0}, Sender {1}, Auxilliary Flags {2}, Subject {3}", new object[] { messageItem.From, messageItem.Sender, num, messageItem.Subject ?? "<No subject found>" }); return(false); } bool?flag = this.IsDelegateOfOrganizer(); if (flag != null && flag.Value) { text = string.Format("Skipping MFN generation as the update was made by a delegate. From: {0}, Sender {1}. Auxilliary Flags {2}, Subject {3}", new object[] { messageItem.From, messageItem.Sender, num, messageItem.Subject ?? "<No subject found>" }); return(false); } } if (MeetingMessage.IsFromExternalParticipant(messageItem.From.RoutingType)) { text = string.Format("Skipping MFN generation as the organizer is external. From: {0}, RoutingType {1}, Sender {2}, Auxilliary Flags {3} Subject : {4}", new object[] { messageItem.From, messageItem.From.RoutingType, messageItem.Sender, num, messageItem.Subject ?? "<No subject found>" }); result = false; } else { text = string.Format("Generating MFN as the meeting was forwarded. From: {0}, RoutingType {1}, Sender {2}, Auxilliary Flags {3}, Subject {4}", new object[] { messageItem.From, messageItem.From.RoutingType, messageItem.Sender, num, messageItem.Subject ?? "<No subject found>" }); result = true; } } } } finally { if (text != null) { TraceHelper.MeetingForwardNotificationTracer.TracePass(TraceHelper.MessageProbeActivityId, 0L, text); MfnLog.LogEntry(mailboxSession, text); } } return(result); }