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); }
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); }
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); }
public void DeserializesTaggedUnionWithDefaultOptions(EmailDelivery expected, string toml) { var options = TomlSerializerOptions.Default.AddTaggedUnionConverter(); Assert.Equal(expected, TomlSerializer.Deserialize <EmailDelivery>(toml, options)); }
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); }