public Email GetMessageById(IMailboxSettings mailboxSettings, long emailId)
        {
            Email result = null;

            using (var imap = new Imap())
            {
                try
                {
                    var loggedIn = LoginToInbox(mailboxSettings, imap);

                    if (!loggedIn)
                        return null;

                    var eml = imap.PeekMessageByUID(emailId);
                    var email = new MailBuilder().CreateFromEml(eml);

                    result = EmailMapper.MapEmailToCoreEmail(mailboxSettings.AccountName, emailId, email);
                }
                catch (Exception ex)
                {
                    ApplyLabelToMessage(mailboxSettings, emailId, _mailboxLabels.InboundMailBoxErrorLabel);
                    MarkMessageAsRead(mailboxSettings, emailId);
                }
            }

            return result;
        }
        public bool SendEmail(IMailboxSettings mailboxSettings, Email email)
        {
            bool success;

            lock (_key)
            {
                success = _mailAdaptor.SendEmail(mailboxSettings, email);
            }

            return success;
        }
Esempio n. 3
0
        public void MarkEmailAsProcessed(IMailboxSettings mailboxSettings, Email email)
        {
            lock (_key)
            {
                _mailAdaptor.MarkMessageAsRead(mailboxSettings, long.Parse(email.EmailUid));

                _mailAdaptor.RemoveLabelFromMessage(mailboxSettings, long.Parse(email.EmailUid),
                    _mailboxLabels.SmsProcessingLabel);

                _mailAdaptor.ApplyLabelToMessage(mailboxSettings, long.Parse(email.EmailUid),
                    _mailboxLabels.SmsSentLabel);
            }
        }
Esempio n. 4
0
        public List<Email> GetEmails(IMailboxSettings mailboxSettings, int numberOfEmailsToRetrieve)
        {
            List<Email> emails;

            lock (_key)
            {
                var ids = _mailAdaptor.GetEmails(mailboxSettings);

                if (ids.Any() && numberOfEmailsToRetrieve > 0)
                    ids = ids.Take(numberOfEmailsToRetrieve).ToList();

                emails = DownloadEmails(mailboxSettings, ids);
            }

            return emails;
        }
        public bool UpdateEmailRetrievalResult(IMailboxSettings mailboxSettings, long emailId, bool retrievedSuccessfully)
        {
            var success = true;

            lock (_key)
            {
                if (retrievedSuccessfully)
                    success = _mailAdaptor.MarkMessageAsRead(mailboxSettings, emailId);

                if (success)
                    success = _mailAdaptor.RemoveLabelFromMessage(mailboxSettings, emailId,
                        _mailboxLabels.InboundMailBoxProcessingLabel);
            }

            return success;
        }
Esempio n. 6
0
        private List<Email> DownloadEmails(IMailboxSettings mailboxSettings, IEnumerable<long> ids)
        {
            var emails = new List<Email>();
            var retrieveTasks = new List<Task>();

            foreach (var id in ids)
            {
                var retrieveTask = Task<Email>.Factory.StartNew(() => GetMessage(mailboxSettings, id));

                retrieveTasks.Add(retrieveTask);

                if (retrieveTask.Result != null)
                    emails.Add(retrieveTask.Result);
            }

            Task.WaitAll(retrieveTasks.ToArray());

            return emails;
        }
        public bool SendEmail(IMailboxSettings mailboxSettings, Email email)
        {
            bool success;

            lock (_key)
            {
                success = _mailAdaptor.SendResponse(mailboxSettings, email);

                if (success)
                {
                    _mailAdaptor.RemoveLabelFromMessage(mailboxSettings, long.Parse(email.EmailUid),
                        _mailboxLabels.AutoResponseProcessingLabel);

                    _mailAdaptor.ApplyLabelToMessage(mailboxSettings, long.Parse(email.EmailUid),
                        _mailboxLabels.AutoRespondedLabel);
                }
            }

            return success;
        }
        public bool ApplyLabelToMessage(IMailboxSettings mailboxSettings, long emailId, string label)
        {
            var result = true;

            using (var imap = new Imap())
            {
                try
                {
                    var loggedIn = LoginToInbox(mailboxSettings, imap);

                    if (!loggedIn)
                        return false;

                    imap.GmailLabelMessageByUID(emailId, label);
                }
                catch (Exception ex)
                {
                    result = false;
                }
            }

            return result;
        }
        public List<long> GetEmails(IMailboxSettings mailboxSettings)
        {
            List<long> result;

            using (var imap = new Imap())
            {
                try
                {
                    var loggedIn = LoginToInbox(mailboxSettings, imap);

                    if (!loggedIn)
                        return null;

                    var searchCriteria = BuildSearchCriteria(mailboxSettings.Epoch);
                    result = imap.Search(Expression.And(searchCriteria));
                }
                catch (Exception ex)
                {
                    result = new List<long>();
                }
            }

            return result;
        }
Esempio n. 10
0
 private Email GetMessage(IMailboxSettings mailboxSettings, long emailId)
 {
     var email = _mailAdaptor.GetMessageById(mailboxSettings, emailId);
     _mailAdaptor.ApplyLabelToMessage(mailboxSettings, emailId, _mailboxLabels.SmsProcessingLabel);
     return email;
 }
Esempio n. 11
0
        private bool LoginToInbox(IMailboxSettings mailboxSettings, Imap imap)
        {
            try
            {
                imap.ConnectSSL(mailboxSettings.InboundServerAddress, mailboxSettings.InboundServerPort);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            var accessToken = _oAuth2Authenticator.GetOAuth2AccessToken(mailboxSettings.MailboxAddress);

            if (string.IsNullOrEmpty(accessToken))
                return false;

            imap.LoginOAUTH2(mailboxSettings.MailboxAddress, accessToken);

            imap.SelectInbox();

            return true;
        }
Esempio n. 12
0
        public bool SendResponse(IMailboxSettings mailboxSettings, Email email)
        {
            using (var client = new Smtp())
            {
                try
                {
                    client.ConnectSSL(mailboxSettings.OutboundServerAddress, mailboxSettings.OutboundServerPort);
                    client.LoginOAUTH2(email.FromAddress.Email, _oAuth2Authenticator.GetOAuth2AccessToken(email.FromAddress.Email));

                    return client.SendMessage(EmailMapper.MapToIMail(email)).Status == SendMessageStatus.Success;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }
Esempio n. 13
0
        public bool MarkMessageAsRead(IMailboxSettings mailboxSettings, long emailId)
        {
            var result = true;

            using (var imap = new Imap())
            {
                try
                {
                    var loggedIn = LoginToInbox(mailboxSettings, imap);

                    if (!loggedIn)
                        return false;

                    imap.FlagMessageByUID(emailId, Flag.Seen);
                }
                catch (Exception ex)
                {
                    result = false;
                }

                imap.Close();
            }

            return result;
        }
 private ForwardResult ApplyProcessingRules(IMailboxSettings mailboxSettings, Email email)
 {
     return mailboxSettings.ApplyForwardingRules
         ? _forwardService.ProcessEmail(email)
         : new ForwardResult {EmailResult = email};
 }
        private bool LoginToInbox(IMailboxSettings mailboxSettings, Imap imap)
        {
            imap.ConnectSSL(mailboxSettings.ServerAddress, mailboxSettings.ServerPort);

            var accessToken = _oAuth2Authenticator.GetOAuth2AccessToken(mailboxSettings.MailboxAddress);

            if (string.IsNullOrEmpty(accessToken))
                return false;

            imap.LoginOAUTH2(mailboxSettings.MailboxAddress, accessToken);

            imap.SelectInbox();

            return true;
        }