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);
                }
            }
        }
Exemple #2
0
        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);
        }