private void ArchiveEmail(Outlook.MailItem objMail, EmailArchiveType archiveType, string strExcludedEmails = "")
        {
            Log.Info($"Archiving {archiveType} email “{objMail.Subject}”");
            var    objEmail  = SerialiseEmailObject(objMail, archiveType);
            Thread objThread = new Thread(() => ArchiveEmailThread(objEmail, archiveType, strExcludedEmails));

            objThread.Start();
        }
Пример #2
0
 private void ProcessNewMailItem(EmailArchiveType archiveType, Outlook.MailItem mailItem)
 {
     if (mailItem == null)
     {
         log.Info("New 'mail item' was null");
         return;
     }
     new EmailArchiving().ProcessEligibleNewMailItem(mailItem, archiveType);
 }
 private void ProcessNewMailItem(EmailArchiveType archiveType, Outlook.MailItem mailItem)
 {
     if (mailItem == null)
     {
         log.Info("New 'mail item' was null");
         return;
     }
     new EmailArchiving($"EN-{mailItem.SenderEmailAddress}", Globals.ThisAddIn.Log).ProcessEligibleNewMailItem(mailItem, archiveType);
 }
 public void ArchiveNewMailItem(Outlook.MailItem objMail, EmailArchiveType archiveType)
 {
     if (objMail.UserProperties["SuiteCRM"] == null)
     {
         ArchiveEmail(objMail, archiveType, this.settings.ExcludedEmails);
         objMail.UserProperties.Add("SuiteCRM", Outlook.OlUserPropertyType.olText, true, Outlook.OlUserPropertyType.olText);
         objMail.UserProperties["SuiteCRM"].Value = "True";
         objMail.Categories = "SuiteCRM";
         objMail.Save();
     }
 }
 public ArchiveEmailAction(
     UserSession session,
     clsEmailArchive emailToArchive,
     EmailArchiveType archiveType,
     List <string> contactIds) : base(5)
 {
     this.session        = session;
     this.emailToArchive = emailToArchive;
     this.achiveType     = archiveType;
     this.contactIds.AddRange(contactIds);
 }
Пример #6
0
 public void ArchiveNewMailItem(Outlook.MailItem objMail, EmailArchiveType archiveType)
 {
     if (objMail.UserProperties["SuiteCRM"] == null)
     {
         bool archived = MaybeArchiveEmail(objMail, archiveType, this.settings.ExcludedEmails);
         objMail.UserProperties.Add("SuiteCRM", Outlook.OlUserPropertyType.olText, true, Outlook.OlUserPropertyType.olText);
         objMail.UserProperties["SuiteCRM"].Value = archived ? Boolean.TrueString : Boolean.FalseString;
         if (archived)
         {
             objMail.Categories = "SuiteCRM";
         }
         objMail.Save();
     }
 }
Пример #7
0
        private bool MaybeArchiveEmail(Outlook.MailItem mailItem, EmailArchiveType archiveType, string strExcludedEmails = "")
        {
            bool          result     = false;
            var           objEmail   = SerialiseEmailObject(mailItem, archiveType);
            List <string> contactIds = objEmail.GetValidContactIDs(strExcludedEmails);

            if (contactIds.Count > 0)
            {
                Log.Info($"Archiving {archiveType} email “{mailItem.Subject}”");
                DaemonWorker.Instance.AddTask(new ArchiveEmailAction(SuiteCRMUserSession, objEmail, archiveType, contactIds));
                result = true;
            }

            return(result);
        }
        private bool EmailShouldBeArchived(EmailArchiveType type, Outlook.Store store)
        {
            var storeId = store.StoreID;

            switch (type)
            {
            case EmailArchiveType.Inbound:
                return(settings.AccountsToArchiveInbound.Contains(storeId));

            case EmailArchiveType.Sent:
                return(settings.AccountsToArchiveOutbound.Contains(storeId));

            default:
                return(false);
            }
        }
        public void ProcessEligibleNewMailItem(Outlook.MailItem objMail, EmailArchiveType archiveType)
        {
            var parentFolder = objMail.Parent as Outlook.Folder;

            if (parentFolder == null)
            {
                Log.Debug($"NULL email folder for {archiveType} “{objMail.Subject}”");
                return;
            }

            if (EmailShouldBeArchived(archiveType, parentFolder.Store))
            {
                ArchiveNewMailItem(objMail, archiveType);
            }
            else
            {
                Log.Debug($"NOT archiving {archiveType} email (folder {parentFolder.Name})");
            }
        }
Пример #10
0
        private clsEmailArchive SerialiseEmailObject(Outlook.MailItem mail, EmailArchiveType archiveType)
        {
            clsEmailArchive mailArchive = new clsEmailArchive(SuiteCRMUserSession, Log);

            mailArchive.From = ExtractSmtpAddressForSender(mail);
            mailArchive.To   = string.Empty;

            Log.Info($"EmailArchiving.SerialiseEmailObject: serialising mail {mail.Subject} dated {mail.SentOn}.");

            foreach (Outlook.Recipient objRecepient in mail.Recipients)
            {
                string address = GetSmtpAddress(objRecepient);

                if (mailArchive.To == string.Empty)
                {
                    mailArchive.To = address;
                }
                else
                {
                    mailArchive.To += ";" + address;
                }
            }

            mailArchive.OutlookId   = mail.EntryID;
            mailArchive.Subject     = mail.Subject;
            mailArchive.Sent        = DateTimeOfMailItem(mail, "autoOUTBOUND");
            mailArchive.Body        = mail.Body;
            mailArchive.HTMLBody    = mail.HTMLBody;
            mailArchive.ArchiveType = archiveType;
            if (settings.ArchiveAttachments)
            {
                foreach (Outlook.Attachment objMailAttachments in mail.Attachments)
                {
                    mailArchive.Attachments.Add(new clsEmailAttachments
                    {
                        DisplayName = objMailAttachments.DisplayName,
                        FileContentInBase64String = GetAttachmentBytes(objMailAttachments, mail)
                    });
                }
            }

            return(mailArchive);
        }
 private void ArchiveEmailThread(clsEmailArchive objEmail, EmailArchiveType archiveType, string strExcludedEmails = "")
 {
     try
     {
         if (SuiteCRMUserSession != null)
         {
             while (SuiteCRMUserSession.AwaitingAuthentication == true)
             {
                 Thread.Sleep(1000);
             }
             if (SuiteCRMUserSession.IsLoggedIn)
             {
                 objEmail.SuiteCRMUserSession = SuiteCRMUserSession;
                 objEmail.Save(strExcludedEmails);
             }
         }
     }
     catch (Exception ex)
     {
         Log.Error("ThisAddIn.ArchiveEmailThread", ex);
     }
 }
        private clsEmailArchive SerialiseEmailObject(Outlook.MailItem mail, EmailArchiveType archiveType)
        {
            clsEmailArchive mailArchive = new clsEmailArchive();

            mailArchive.From = mail.SenderEmailAddress;
            mailArchive.To   = "";

            Log.Info($"EmailArchiving.SerialiseEmailObject: serialising mail {mail.Subject} dated {mail.SentOn}.");

            foreach (Outlook.Recipient objRecepient in mail.Recipients)
            {
                if (mailArchive.To == "")
                {
                    mailArchive.To = objRecepient.Address;
                }
                else
                {
                    mailArchive.To += ";" + objRecepient.Address;
                }
            }

            mailArchive.Subject     = mail.Subject;
            mailArchive.Body        = mail.Body;
            mailArchive.HTMLBody    = mail.HTMLBody;
            mailArchive.ArchiveType = archiveType;
            if (settings.ArchiveAttachments)
            {
                foreach (Outlook.Attachment objMailAttachments in mail.Attachments)
                {
                    mailArchive.Attachments.Add(new clsEmailAttachments
                    {
                        DisplayName = objMailAttachments.DisplayName,
                        FileContentInBase64String = GetAttachmentBytes(objMailAttachments, mail)
                    });
                }
            }

            return(mailArchive);
        }