Exemplo n.º 1
0
        public async Task <bool> UpdateEmailAsync(EmailSentLog emailLog)
        {
            if (emailLog != null)
            {
                _context.Update(emailLog);
                await _context.SaveChangesAsync();

                return(true);
            }

            return(false);
        }
Exemplo n.º 2
0
        public async Task <bool> LogEmailTransactionAsync(EmailSentLog emailLog)
        {
            if (emailLog != null)
            {
                await _context.AddAsync(emailLog);

                //await _context.SaveChangesAsync();
                return(true);
            }

            return(false);
        }
Exemplo n.º 3
0
        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);
            }
        }