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; }
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); } }
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; }
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; }
private Email GetMessage(IMailboxSettings mailboxSettings, long emailId) { var email = _mailAdaptor.GetMessageById(mailboxSettings, emailId); _mailAdaptor.ApplyLabelToMessage(mailboxSettings, emailId, _mailboxLabels.SmsProcessingLabel); return email; }
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; }
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; } } }
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; }