示例#1
0
            private void PersistAM()
            {
                var cached = _graph.Caches[_activityMessage.GetType()].Locate(_activityMessage);

                _graph.Persist();
                _graph.SelectTimeStamp();
                var cache = _graph.Caches[_activityMessage.GetType()];

                _activityMessage = (CRSMEmail)cache.CreateCopy(cached);
            }
示例#2
0
        protected void SendCopyMessageToInside(PXGraph graph, EMailAccount account, CRSMEmail message, IEnumerable <MailAddress> addresses)
        {
            var cache = graph.Caches[message.GetType()];
            var copy  = (CRSMEmail)cache.CreateCopy(message);

            copy.NoteID       = null;
            copy.EmailNoteID  = null;
            copy.IsIncome     = false;
            copy.ParentNoteID = message.NoteID;
            MailAddress address = null;

            copy.MailFrom = EmailParser.TryParse(message.MailFrom, out address)
                                ? new MailAddress(account.Address, address.DisplayName).ToString()
                                : account.Address;
            copy.MailTo    = PXDBEmailAttribute.ToString(addresses);          //TODO: need add address description
            copy.MailCc    = null;
            copy.MailBcc   = null;
            copy.MailReply = copy.MailFrom;
            copy.MPStatus  = MailStatusListAttribute.PreProcess;
            copy.ClassID   = CRActivityClass.EmailRouting;
            new AddInfoEmailProcessor().Process(new EmailProcessEventArgs(graph, account, copy));
            copy.RefNoteID  = null;
            copy.BAccountID = null;
            copy.ContactID  = null;
            copy.Pop3UID    = null;
            copy.ImapUID    = null;
            var imcUid = Guid.NewGuid();

            copy.ImcUID      = imcUid;
            copy.MessageId   = this.GetType().Name + "_" + imcUid.ToString().Replace("-", string.Empty);
            copy.OwnerID     = null;
            copy.WorkgroupID = null;

            copy = (CRSMEmail)cache.CreateCopy(cache.Insert(copy));

            //Update owner and reset owner if employee not found
            copy.OwnerID = message.OwnerID;
            try
            {
                cache.Update(copy);
            }
            catch (PXSetPropertyException)
            {
                copy.OwnerID = null;
                copy         = (CRSMEmail)cache.CreateCopy(cache.Update(copy));
            }

            copy.IsPrivate   = message.IsPrivate;
            copy.WorkgroupID = message.WorkgroupID;

            var noteFiles = PXNoteAttribute.GetFileNotes(cache, message);

            if (noteFiles != null)
            {
                PXNoteAttribute.SetFileNotes(cache, copy, noteFiles);
            }
        }
示例#3
0
        private void MarkAsRoutingEmail(PXGraph graph, CRSMEmail message)
        {
            var cache = graph.Caches[message.GetType()];

            message.ClassID    = CRActivityClass.EmailRouting;
            message.RefNoteID  = null;
            message.BAccountID = null;
            message.ContactID  = null;
            cache.Update(message);
        }
        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);
        }
        private void SendCopyMessage(PXGraph graph, EMailAccount account, CRSMEmail message, string email)
        {
            var cache = graph.Caches[message.GetType()];
            var copy  = (CRSMEmail)cache.CreateCopy(message);

            copy.NoteID       = null;
            copy.EmailNoteID  = null;
            copy.IsIncome     = false;
            copy.ParentNoteID = message.NoteID;
            copy.MailTo       = email;       //TODO: need add address description
            copy.MailCc       = null;
            copy.MailBcc      = null;
            copy.MPStatus     = MailStatusListAttribute.PreProcess;
            copy.ClassID      = CRActivityClass.EmailRouting;
            new AddInfoEmailProcessor().Process(new EmailProcessEventArgs(graph, account, copy));
            copy.RefNoteID  = null;
            copy.BAccountID = null;
            copy.ContactID  = null;
            copy.Pop3UID    = null;
            copy.ImapUID    = null;
            var imcUid = Guid.NewGuid();

            copy.ImcUID      = imcUid;
            copy.MessageId   = this.GetType().Name + "_" + imcUid.ToString().Replace("-", string.Empty);
            copy.OwnerID     = null;
            copy.WorkgroupID = null;

            copy = (CRSMEmail)cache.CreateCopy(cache.Insert(copy));

            //Update owner and reset owner if employee not found
            copy.OwnerID = message.OwnerID;
            try
            {
                cache.Update(copy);
            }
            catch (PXSetPropertyException)
            {
                copy.OwnerID = null;
                copy         = (CRSMEmail)cache.CreateCopy(cache.Update(copy));
            }

            copy.WorkgroupID = message.WorkgroupID;

            var noteFiles = PXNoteAttribute.GetFileNotes(cache, message);

            if (noteFiles != null)
            {
                PXNoteAttribute.SetFileNotes(cache, copy, noteFiles);
            }
            graph.EnsureCachePersistence(copy.GetType());
        }
示例#6
0
        private void SendCopyMessageToOutside(PXGraph graph, EMailAccount account, CRSMEmail message, IEnumerable <Mailbox> email)
        {
            var cache = graph.Caches[message.GetType()];
            var copy  = (CRSMEmail)cache.CreateCopy(message);

            copy.NoteID       = null;
            copy.EmailNoteID  = null;
            copy.IsIncome     = false;
            copy.ParentNoteID = message.NoteID;
            Mailbox mailFrom;

            copy.MailFrom = Mailbox.TryParse(message.MailFrom, out mailFrom)
                ? new Mailbox(mailFrom.DisplayName, account.Address).ToString()
                : account.Address;
            copy.MailTo   = ConcatAddresses(email); //TODO: need add address description
            copy.MailCc   = null;
            copy.MailBcc  = null;
            copy.MPStatus = MailStatusListAttribute.PreProcess;
            copy.ClassID  = CRActivityClass.Email;
            var imcUid = Guid.NewGuid();

            copy.ImcUID       = imcUid;
            copy.MessageId    = GetType().Name + "_" + imcUid.ToString().Replace("-", string.Empty);
            copy.IsPrivate    = message.IsPrivate;
            copy.OwnerID      = null;
            copy.ParentNoteID = null;

            copy = (CRSMEmail)cache.CreateCopy(cache.Insert(copy));

            //Update owner and reset owner if employee not found
            copy.OwnerID = message.OwnerID;
            try
            {
                copy = (CRSMEmail)cache.Update(copy);
            }
            catch (PXSetPropertyException)
            {
                copy.OwnerID = null;
                copy         = (CRSMEmail)cache.Update(copy);
            }

            copy.ParentNoteID = message.NoteID;

            var noteFiles = PXNoteAttribute.GetFileNotes(cache, message);

            if (noteFiles != null)
            {
                PXNoteAttribute.SetFileNotes(cache, copy, noteFiles);
            }
        }
        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);
        }
            private void PersistException(Exception ex)
            {
                this._graph.Clear();
                if (_activityMessage == null || _graph.Caches[_activityMessage.GetType()].GetStatus(_activityMessage) == PXEntryStatus.Inserted)
                {
                    return;
                }

                _activityMessage = PXSelect <CRSMEmail, Where <CRSMEmail.noteID, Equal <Required <CRSMEmail.noteID> > > > .SelectWindowed(_graph, 0, 1, _activityMessage.NoteID);

                if (_activityMessage != null)
                {
                    _activityMessage           = (CRSMEmail)_graph.Caches[_activityMessage.GetType()].CreateCopy(_activityMessage);
                    _activityMessage.Exception = ex.Message;
                    _activityMessage.MPStatus  = MailStatusListAttribute.Failed;
                    UpdateAM();
                    PersistAM();
                }
            }
示例#9
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);
        }