public string CheckPendingMessage(string messageId) { PendingMessage pending = null; PendingList.TryGetValue(messageId, out pending); if (pending == null) { return(null); } if (pending.CheckCount > 10) { return(pending.MessageId); } // Every 20 minutes or first time if (!pending.LastCheckDate.HasValue || pending.LastCheckDate.Value.AddMinutes(20) < DateTime.Now) { var client = new SendInBlueClient(ApiKey); pending.CheckCount++; pending.LastCheckDate = DateTime.Now; Models.EmailEventReport result = null; try { result = client.GetMessageHistory(pending.SendInBlueMessageId); } catch (Exception ex) { GlobalConfiguration.Configuration.Logger.Error($"Get history fail with email {pending.Email}/{pending.Subject}"); GlobalConfiguration.Configuration.Logger.Error(ex); SentFail(pending, "sendinblue:historyFail", "Status code error"); } if (result == null) { return(null); } if (result.Events == null || result.Events.Count == 0) { return(null); } var item = result.Events.Last(); if (item.Event == EmailEventReportEvent.EventEnum.Clicks || item.Event == EmailEventReportEvent.EventEnum.Opened || item.Event == EmailEventReportEvent.EventEnum.Delivered) { GlobalConfiguration.Configuration.Logger.Debug($"email {pending.Email}/{pending.Subject} was sent with status {item.Event}"); return(pending.MessageId); } else if (item.Event == EmailEventReportEvent.EventEnum.Bounces || item.Event == EmailEventReportEvent.EventEnum.HardBounces || item.Event == EmailEventReportEvent.EventEnum.SoftBounces) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} was bounces"); SentFail(pending, "sendinblue:bounce", item.Reason); return(pending.MessageId); } else if (item.Event == EmailEventReportEvent.EventEnum.Blocked) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} was blocked"); SentFail(pending, "sendinblue:blocked"); } else if (item.Event == EmailEventReportEvent.EventEnum.Requests) { return(null); } else if (item.Event == EmailEventReportEvent.EventEnum.Spam) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} marked as spam"); SentFail(pending, "sendinblue:spam"); return(pending.MessageId); } else if (item.Event == EmailEventReportEvent.EventEnum.Unsubscribed) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} need unsubscribe"); SentFail(pending, "sendinblue:unsubscribe"); return(pending.MessageId); } else if (item.Event == EmailEventReportEvent.EventEnum.Invalid) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} was invalid"); SentFail(pending, "sendinblue:invalid"); return(pending.MessageId); } } return(null); }
public string CheckPendingMessage(string messageId) { PendingMessage pending = null; PendingList.TryGetValue(messageId, out pending); if (pending == null) { return(null); } if (pending.CheckCount > 10) { return(pending.MessageId); } // Every 20 minutes or first time if (!pending.LastCheckDate.HasValue || pending.LastCheckDate.Value.AddMinutes(20) < DateTime.Now) { var client = new MailJetClient(PublicKey, PrivateKey); pending.CheckCount++; pending.LastCheckDate = DateTime.Now; Models.MessageHistory result = null; try { result = client.GetMessageHistory(pending.MailJetMessageId); } catch (Exception ex) { GlobalConfiguration.Configuration.Logger.Error($"Get history fail with email {pending.Email}/{pending.Subject}"); GlobalConfiguration.Configuration.Logger.Error(ex); SentFail(pending, "mailjet:historyFail", "Status code error"); } if (result == null) { return(null); } if (result.Count == 0) { return(null); } var item = result.Data.Last(); if (item.EventType == Models.MessageStatus.Clicked || item.EventType == Models.MessageStatus.Opened || item.EventType == Models.MessageStatus.Sent) { GlobalConfiguration.Configuration.Logger.Debug($"email {pending.Email}/{pending.Subject} was sent with status {item.EventType}"); return(pending.MessageId); } else if (item.EventType == Models.MessageStatus.Bounced) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} was bounces"); SentFail(pending, "mailjet:bounce", item.Comment); return(pending.MessageId); } else if (item.EventType == Models.MessageStatus.Blocked) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} was blocked"); SentFail(pending, "mailjet:blocked"); } else if (item.EventType == Models.MessageStatus.Queued) { return(null); } else if (item.EventType == Models.MessageStatus.Spam) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} marked as spam"); SentFail(pending, "mailjet:spam"); return(pending.MessageId); } else if (item.EventType == Models.MessageStatus.Unsub) { GlobalConfiguration.Configuration.Logger.Warn($"email {pending.Email}/{pending.Subject} need unsubscribe"); SentFail(pending, "mailjet:unsubscribe"); return(pending.MessageId); } } return(null); }