public async Task <bool> UpdateEmailAsync(EmailSentLog emailLog) { if (emailLog != null) { _context.Update(emailLog); await _context.SaveChangesAsync(); return(true); } return(false); }
public async Task <bool> LogEmailTransactionAsync(EmailSentLog emailLog) { if (emailLog != null) { await _context.AddAsync(emailLog); //await _context.SaveChangesAsync(); return(true); } return(false); }
public async Task SendEmailAsync(string email, string subject, string message, string attachedfiles) { try { MailMessage mm = new MailMessage(); foreach (string n in email.Split(',')) { if (!string.IsNullOrWhiteSpace(n)) { mm.To.Add(new MailAddress(n.Trim())); } } mm.Sender = new MailAddress(_emailSettings.SenderName); mm.From = new MailAddress(_emailSettings.SenderName); mm.Subject = subject; mm.Body = message; mm.BodyEncoding = UTF8Encoding.UTF8; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; //attachements if (!string.IsNullOrWhiteSpace(attachedfiles)) { foreach (string attachm in attachedfiles.Split(';')) { if (!string.IsNullOrEmpty(attachm)) { mm.Attachments.Add(new Attachment(attachm)); } } } mm.BodyEncoding = UTF8Encoding.UTF8; mm.IsBodyHtml = true; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; EmailSentLog emailLog = new EmailSentLog { EmailContent = message, RecipientEmail = email }; using (var client = new System.Net.Mail.SmtpClient()) { client.Port = _emailSettings.MailPort; client.Host = _emailSettings.MailServer; client.EnableSsl = _emailSettings.SSl; //true client.Timeout = 20000; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential(_emailSettings.Sender, _emailSettings.Password); // Note: only needed if the SMTP server requires authentication //await client.AuthenticateAsync(_emailSettings.Sender, _emailSettings.Password); try { await Task.Run(() => client.Send(mm) ); } catch (SmtpFailedRecipientsException ex) { for (int i = 0; i < ex.InnerExceptions.Length; i++) { System.Net.Mail.SmtpStatusCode status = ex.InnerExceptions[i].StatusCode; if (status == System.Net.Mail.SmtpStatusCode.MailboxBusy || status == System.Net.Mail.SmtpStatusCode.MailboxUnavailable) { //Console.WriteLine("Delivery failed - retrying in 5 seconds."); //System.Threading.Thread.Sleep(5000); client.Send(mm); } else { //Console.WriteLine("Failed to deliver message to {0}", // ex.InnerExceptions[i].FailedRecipient); emailLog.Status = "Failed"; } } } await _emailSentLogRepo.LogEmailAsync(emailLog); // await client.DisconnectAsync(true); } } catch (Exception ex) { // TODO: handle exception throw new InvalidOperationException(ex.Message); } }