public async Task SendMessage(MimeMessage message)
        {
            var emailDelivery = new EmailDelivery();

            // for reference only
            emailDelivery.From    = message.From.ToDelimitedString(";").Truncate(256);
            emailDelivery.To      = message.To.ToDelimitedString(";").Truncate(256);
            emailDelivery.Subject = message.Subject.Truncate(256);

            using (var memoryStream = new MemoryStream())
            {
                await message.WriteToAsync(memoryStream).ConfigureAwait(false);

                emailDelivery.MimeMessage = memoryStream.ToArray();
            }

            emailDelivery.NextAttempt = DateTimeOffset.UtcNow;

            await _dataContext.EmailDeliveries.AddAsync(emailDelivery).ConfigureAwait(false);

            await _dataContext.SaveChangesAsync().ConfigureAwait(false);

            // trigger email job
            BackgroundJob.Enqueue <IEmailDeliveryService>(emailService =>
                                                          emailService.ProcessEmailQueueAsync(CancellationToken.None));
        }
        private async Task <MimeMessage> LoadMessage(EmailDelivery emailDelivery, CancellationToken cancellationToken)
        {
            MimeMessage mimeMessage;

            using (var memoryStream = new MemoryStream(emailDelivery.MimeMessage, 0, emailDelivery.MimeMessage.Length))
            {
                memoryStream.Position = 0;
                mimeMessage           = await MimeMessage.LoadAsync(memoryStream, cancellationToken);
            }

            return(mimeMessage);
        }
        private async Task ProcessEmail(EmailDelivery emailDelivery, CancellationToken cancellationToken)
        {
            if (emailDelivery == null)
            {
                return;
            }

            try
            {
                var toAddresses = emailDelivery.To;
                var subject     = emailDelivery.Subject.Truncate(20);

                _logger.LogDebug("Processing email To: '{toAddresses}'; Subject: '{subject}'", toAddresses, subject);

                emailDelivery.NextAttempt = GetNextAttemptDate(emailDelivery.Attempts);
                emailDelivery.LastAttempt = DateTimeOffset.UtcNow;
                emailDelivery.Attempts++;
                emailDelivery.Updated = DateTimeOffset.UtcNow;

                // prevent others from processing
                await _context.SaveChangesAsync(cancellationToken);

                var mimeMessage = await LoadMessage(emailDelivery, cancellationToken);

                var smtpResult = await SendAsync(mimeMessage, cancellationToken).ConfigureAwait(false);

                emailDelivery.IsDelivered = smtpResult.Successful;
                emailDelivery.SmtpLog     = smtpResult.SmtpLog;
                emailDelivery.Error       = smtpResult.Exception?.ToString();

                if (smtpResult.Successful)
                {
                    emailDelivery.Delivered   = DateTime.UtcNow;
                    emailDelivery.NextAttempt = null;
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error sending email: {message}", ex.Message);
                emailDelivery.Error = ex.ToString();
            }

            // save result;
            emailDelivery.Updated = DateTimeOffset.UtcNow;

            await _context.SaveChangesAsync(cancellationToken);
        }
Ejemplo n.º 4
0
        protected string SendMail(Entity.User newUser, int emailContentID)
        {
            EmailDelivery    emaildelivery    = populateEmailDelivery(newUser, emailContentID);
            EmailDeliveryDAL emailDeliveryDAL = new EmailDeliveryDAL();

            emailDeliveryDAL.SaveEmailDelivery(emaildelivery);

            DateTime originalSchedule = emaildelivery.ScheduleTime;

            if (chkReschedule1.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule1.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            if (chkReschedule2.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule2.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            if (chkReschedule3.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule3.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            if (chkReschedule4.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule4.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            if (chkReschedule5.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule5.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            if (chkReschedule6.Checked == true)
            {
                emaildelivery.ScheduleTime = RescheduleTime(ddlReschedule6.SelectedValue, originalSchedule);
                emailDeliveryDAL.SaveEmailDelivery(emaildelivery);
            }
            //string emailBodyText = Utilities.ReplaceTokens(HTMLEditor1.Text, newUser);
            //emailBodyText = ReplaceImageSource(emailBodyText);
            //string emailSubject = Utilities.ReplaceTokens(txtEmailSubject.Text, newUser);
            //string message = MailHelper.SendMailMessage(txtFromEmail.Text, txtReplytoEmail.Text, newUser.Email, string.Empty, string.Empty, emailSubject, emailBodyText, MailPriority.Normal);
            //return message;
            return(string.Empty);
        }
        private async Task WriteEmailDelivery(MimeMessage message)
        {
            var emailDelivery = new EmailDelivery();

            emailDelivery.From    = message.From.ToDelimitedString(";").Truncate(256);
            emailDelivery.To      = message.To.ToDelimitedString(";").Truncate(256);
            emailDelivery.Subject = message.Subject.Truncate(256);

            using (var memoryStream = new MemoryStream())
            {
                await message.WriteToAsync(memoryStream).ConfigureAwait(false);

                emailDelivery.MimeMessage = memoryStream.ToArray();
            }

            await _dataContext.EmailDeliveries.AddAsync(emailDelivery).ConfigureAwait(false);

            await _dataContext.SaveChangesAsync().ConfigureAwait(false);
        }
Ejemplo n.º 6
0
        public async Task <EmailDelivery> RecordInvoiceEmail(SendGridMessage message, int orderId, string who)
        {
            var delivery = new EmailDelivery {
                From          = message.From.Address,
                To            = string.Join(";", message.To.Select(t => t.Address)),
                Bcc           = string.Join(";", message.Bcc.Select(b => b.Address)),
                Subject       = message.Subject,
                Message       = message.Text,
                OrderId       = orderId,
                Sent          = DateTime.Now,
                SentBy        = who,
                DeliveryError = string.Empty
            };

            _context.EmailDeliveries.Add(delivery);
            await _context.SaveChangesAsync();

            return(delivery);
        }
Ejemplo n.º 7
0
        public void DeserializesTaggedUnionWithDefaultOptions(EmailDelivery expected, string toml)
        {
            var options = TomlSerializerOptions.Default.AddTaggedUnionConverter();

            Assert.Equal(expected, TomlSerializer.Deserialize <EmailDelivery>(toml, options));
        }
Ejemplo n.º 8
0
        protected EmailDelivery populateEmailDelivery(Entity.User newUser, int emailContentID)
        {
            EmailDelivery emailDelivery = new EmailDelivery();

            emailDelivery.UserID         = newUser.UserID;
            emailDelivery.FromAddress    = txtFromEmail.Text.Trim();
            emailDelivery.ToAddress      = newUser.Email;
            emailDelivery.CcAddress      = string.Empty;
            emailDelivery.ReplyToAddress = txtReplytoEmail.Text.Trim();
            emailDelivery.TemplateID     = Convert.ToInt32(ddlSelectTemplate.SelectedValue);
            emailDelivery.EmailSubject   = Utilities.ReplaceTokens(txtEmailSubject.Text, newUser);
            emailDelivery.EmailContentID = emailContentID;
            emailDelivery.NameToken      = Utils.Utilities.UppercaseName(newUser.Name);
            emailDelivery.BdayToken      = newUser.BirthDay.ToString("MMMM dd");
            emailDelivery.ZipToken       = newUser.ZipCode;
            emailDelivery.EmailToken     = newUser.Email;
            if (rdbScheduleBy.SelectedValue.Equals("0"))
            {
                emailDelivery.ScheduleTime = System.DateTime.Now.AddMinutes(5.0);
            }
            else if (rdbScheduleBy.SelectedValue.Equals("1"))
            {
                DateTime deliveryDate = new DateTime();
                _scheduleTime = string.Format("{0} {1}", txtScheduleDate.Text.Trim(), txtScheduleTime.Text.Trim());
                DateTime.TryParse(_scheduleTime, out deliveryDate);
                emailDelivery.ScheduleTime = deliveryDate;
            }
            else if (rdbScheduleBy.SelectedValue.Equals("2"))
            {
                double hour = 0.0;
                double.TryParse(ddlScheduleToken.SelectedValue, out hour);
                if (newUser.BirthDay.Month == 2 && newUser.BirthDay.Day == 29 && !IsLeapYear(System.DateTime.Now.Year))
                {
                    _scheduleTime = string.Format("{0}/{1}/{2}", newUser.BirthDay.Month, newUser.BirthDay.Day - 1, System.DateTime.Now.Year);
                }
                else
                {
                    _scheduleTime = string.Format("{0}/{1}/{2}", newUser.BirthDay.Month, newUser.BirthDay.Day, System.DateTime.Now.Year);
                }
                DateTime deliveryDate = Convert.ToDateTime(_scheduleTime);
                if (deliveryDate < System.DateTime.Now)
                {
                    TimeSpan diffDate = System.DateTime.Now.Subtract(deliveryDate);
                    if (diffDate.Days > 30)
                    {
                        deliveryDate = deliveryDate.AddYears(1);
                    }
                }
                if (deliveryDate > System.DateTime.Now)
                {
                    TimeSpan diffDate = deliveryDate.Subtract(System.DateTime.Now);
                    if (diffDate.Days > 330)
                    {
                        deliveryDate = deliveryDate.AddYears(-1);
                    }
                }
                deliveryDate = deliveryDate.AddHours(hour);
                emailDelivery.ScheduleTime = deliveryDate;
            }
            emailDelivery.Status   = (int)Utils.Enum.Status.Pending;
            emailDelivery.Priority = Convert.ToInt32(ddlPriority.SelectedValue);
            return(emailDelivery);
        }