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); }
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); } }
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()); }
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(); } }
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); }