Exemple #1
0
        private void ExcludeAddresses(MailAddressList recipients, string addrStr)
        {
            if (string.IsNullOrEmpty(addrStr))
            {
                return;
            }

            var addresses = AddressList.Parse(addrStr);

            foreach (PX.Common.Mail.Address address in addresses)
            {
                var group = address as Group;
                if (group != null)
                {
                    foreach (Mailbox mailbox in group.Members)
                    {
                        recipients.Remove(mailbox);
                    }
                }
                else
                {
                    recipients.Remove((Mailbox)address);
                }
            }
        }
        protected override bool Process(Package package)
        {
            PXGraph      graph   = package.Graph;
            EMailAccount account = package.Account;
            CRSMEmail    message = package.Message;

            if (account != null && (
                    (account.ForbidRouting ?? false) ||
                    !(account.RouteEmployeeEmails ?? false)
                    ))
            {
                return(false);
            }

            bool?isFromInternalUser = IsFromInternalUser(graph, message);
            var  recipients         = new MailAddressList();

            if (isFromInternalUser == true)
            {
                recipients.AddRange(GetExternalRecipient(graph, message));
            }
            else if (isFromInternalUser == false)
            {
                recipients.AddRange(GetInternalRecipient(graph, message));
            }
            else
            {
                return(false);                // for those users and employees which are disabled or RouteEmails switched off
            }
            RemoveAddress(recipients, message.MailFrom);
            RemoveAddress(recipients, message.MailTo);
            RemoveAddress(recipients, message.MailCc);
            RemoveAddress(recipients, message.MailBcc);

            if (recipients.Count == 0)
            {
                return(false);
            }

            if (isFromInternalUser == true)
            {
                SendCopyMessageToOutside(graph, package.Account, message, recipients);
                MarkAsRoutingEmail(graph, message);
                MarkAsRead(graph, message);
            }
            else
            {
                SendCopyMessageToInside(graph, package.Account, message, recipients);
            }

            graph.EnsureCachePersistence(message.GetType());

            return(true);
        }
Exemple #3
0
        protected void RemoveAddress(MailAddressList recipients, string addrStr)
        {
            if (string.IsNullOrEmpty(addrStr) || recipients.Count == 0)
            {
                return;
            }

            var addresses = EmailParser.ParseAddresses(addrStr);

            foreach (MailAddress address in addresses)
            {
                recipients.Remove(address);
            }
        }
Exemple #4
0
        private void ExcludeMailboxes(MailAddressList recipients, string addrStr)
        {
            if (string.IsNullOrEmpty(addrStr))
            {
                return;
            }

            var addresses = MailboxList.Parse(addrStr);

            foreach (Mailbox address in addresses)
            {
                recipients.Remove(address);
            }
        }
        protected override bool Process(Package package)
        {
            PXGraph      graph   = package.Graph;
            EMailAccount account = package.Account;
            CRSMEmail    message = package.Message;

            if (account != null && (account.ForbidRouting ?? false))
            {
                return(false);
            }

            var isFromInternalUser = IsFromInternalUser(graph, message);
            var recipients         = new MailAddressList();

            if (isFromInternalUser)
            {
                recipients.AddRange(GetExternalRecipient(graph, message));
            }
            else
            {
                recipients.AddRange(GetInternalRecipient(graph, message));
            }

            RemoveAddress(recipients, message.MailFrom);
            RemoveAddress(recipients, message.MailTo);
            RemoveAddress(recipients, message.MailCc);
            RemoveAddress(recipients, message.MailBcc);

            if (recipients.Count == 0)
            {
                return(false);
            }

            if (isFromInternalUser)
            {
                SendCopyMessageToOutside(graph, package.Account, message, recipients);
                MarkAsRoutingEmail(graph, message);
                MarkAsRead(graph, message);
            }
            else
            {
                SendCopyMessageToInside(graph, package.Account, message, recipients);
            }

            graph.EnsureCachePersistence(message.GetType());

            return(true);
        }
Exemple #6
0
        private MailAddressList GetFromExternal(PXGraph graph, CRSMEmail message)
        {
            var recipients = new MailAddressList();

            recipients.AddRange(GetOwnerAddressByNote(graph, message.RefNoteID, message.OwnerID));

            var routingMessage = GetRoutingMessage(graph, message);

            if (routingMessage != null)
            {
                RemoveAddress(recipients, routingMessage.MailFrom);
                RemoveAddress(recipients, routingMessage.MailTo);
                RemoveAddress(recipients, routingMessage.MailCc);
                RemoveAddress(recipients, routingMessage.MailBcc);
            }

            return(recipients);
        }
Exemple #7
0
        protected override bool Process(Package package)
        {
            PXGraph   graph   = package.Graph;
            CRSMEmail message = package.Message;

            if (message.IsIncome != true)
            {
                return(false);
            }

            var isFromInternalUser = message.ClassID == CRActivityClass.EmailRouting;
            var recipients         = new MailAddressList();

            if (isFromInternalUser)
            {
                recipients.AddRange(GetFromInternal(graph, message));
            }
            else
            {
                recipients.AddRange(GetFromExternal(graph, message));
            }

            RemoveAddress(recipients, message.MailFrom);
            RemoveAddress(recipients, message.MailTo);
            RemoveAddress(recipients, message.MailCc);
            RemoveAddress(recipients, message.MailBcc);

            if (recipients.Count == 0)
            {
                return(false);
            }

            SendCopyMessageToInside(package.Graph, package.Account, message, recipients);

            graph.EnsureCachePersistence(message.GetType());

            return(true);
        }
Exemple #8
0
        protected override bool Process(Package package)
        {
            var graph   = package.Graph;
            var message = package.Message;

            var isFromInternalUser = IsFromInternalUser(graph, message);
            var recipients         = new MailAddressList();

            if (isFromInternalUser)
            {
                recipients.AddRange(GetExternalRecipient(graph, message));
            }
            else
            {
                recipients.AddRange(GetInternalRecipient(graph, message));
            }
            ExcludeMailboxes(recipients, message.MailFrom);
            ExcludeAddresses(recipients, message.MailTo);
            ExcludeAddresses(recipients, message.MailCc);
            ExcludeAddresses(recipients, message.MailBcc);
            if (recipients.Count == 0)
            {
                return(false);
            }

            if (isFromInternalUser)
            {
                SendCopyMessageToOutside(graph, message, recipients);
                MarkAsRoutingEmail(graph, message);
            }
            else
            {
                SendCopyMessageToInside(graph, package.Account, message, recipients);
            }
            package.Graph.EnshureCachePersistance(message.GetType());

            return(true);
        }