示例#1
0
        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);
        }
示例#2
0
        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);
        }