From 1dc4ab7f59af0ceb14db6efa5188b173c92ccf31 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 15 Jun 2020 23:02:09 +0000 Subject: [PATCH] --- notes/todo | 5 ---- util/RfMail.cs | 65 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/notes/todo b/notes/todo index a86ebf3..b592c52 100644 --- a/notes/todo +++ b/notes/todo @@ -86,8 +86,3 @@ route: API Add email verification route with code (called by RAVEN) emails us when it's verified as a notification that a trial is ready to send - - - - - diff --git a/util/RfMail.cs b/util/RfMail.cs index da279b2..a4924a0 100644 --- a/util/RfMail.cs +++ b/util/RfMail.cs @@ -14,6 +14,14 @@ using MimeKit.Utils; namespace rockfishCore.Util { + + + /* + HOW TO DIAGNOSE ISSUES: + Get a protocol log: + https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog + docs http://www.mimekit.net/docs/html/Introduction.htm + */ //http://www.mimekit.net/ public static class RfMail { @@ -603,14 +611,13 @@ namespace rockfishCore.Util { //Console.WriteLine($"getInboxSummariesFor {sourceAccount}"); List ret = new List(); + using (var client = new ImapClient()) + // using (var client = new ImapClient(new ProtocolLogger(Console.OpenStandardOutput()))) { // Accept all SSL certificates client.ServerCertificateValidationCallback = (s, c, h, e) => true; - //client.Connect(MAIL_IMAP_ADDRESS, MAIL_IMAP_PORT, true); - //testing - //Console.WriteLine($"connecting to {MAIL_IMAP_ADDRESS} on {MAIL_IMAP_PORT}"); client.Connect(MAIL_IMAP_ADDRESS, MAIL_IMAP_PORT); @@ -625,28 +632,58 @@ namespace rockfishCore.Util var inbox = client.Inbox; //Console.WriteLine($"opening inbox..."); inbox.Open(FolderAccess.ReadOnly); - //Console.WriteLine($"fetching summaries..."); - var summaries = inbox.Fetch(0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId); - //Console.WriteLine($"disconnecting..."); - client.Disconnect(true); - foreach (var summary in summaries) + + + for (int i = 0; i < inbox.Count; i++) { + var message = inbox.GetMessage(i); //Sometimes bad hombres don't set a from address so don't expect one string sFrom = "UNKNOWN / NOT SET"; - if (summary.Envelope.From.Count > 0) + if (message.From.Count > 0) { - sFrom = summary.Envelope.From[0].ToString().Replace("\"", "").Replace("<", "").Replace(">", "").Trim(); + sFrom = message.From[0].ToString().Replace("\"", "").Replace("<", "").Replace(">", "").Trim(); } + //get flags + var summ = inbox.Fetch(new[] { i }, MessageSummaryItems.Flags | MessageSummaryItems.UniqueId); + ret.Add(new rfMessageSummary { account = sourceAccount, - id = summary.UniqueId.Id, - subject = summary.Envelope.Subject, - sent = DateUtil.DateTimeOffSetNullableToEpoch(summary.Envelope.Date), + id = summ[0].UniqueId.Id, + subject = message.Subject, + sent = DateUtil.DateTimeOffSetNullableToEpoch(message.Date), from = sFrom, - flags = summary.Flags.ToString().ToLowerInvariant() + flags = summ[0].Flags.ToString().ToLowerInvariant() }); + Console.WriteLine("Subject: {0}", message.Subject); } + + //This was failing with an exception + //re-wrote from an example on the mailkit page and it works fine + //so going with the new method now + + // //Console.WriteLine($"fetching summaries..."); + // var summaries = inbox.Fetch(0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId); + // //Console.WriteLine($"disconnecting..."); + // client.Disconnect(true); + // foreach (var summary in summaries) + // { + // //Sometimes bad hombres don't set a from address so don't expect one + // string sFrom = "UNKNOWN / NOT SET"; + // if (summary.Envelope.From.Count > 0) + // { + // sFrom = summary.Envelope.From[0].ToString().Replace("\"", "").Replace("<", "").Replace(">", "").Trim(); + // } + // ret.Add(new rfMessageSummary + // { + // account = sourceAccount, + // id = summary.UniqueId.Id, + // subject = summary.Envelope.Subject, + // sent = DateUtil.DateTimeOffSetNullableToEpoch(summary.Envelope.Date), + // from = sFrom, + // flags = summary.Flags.ToString().ToLowerInvariant() + // }); + // } } //reverse the results array as emails come in oldest first order but we want oldest last ret.Reverse();