///<inheritdoc cref="IMessageSendService.SendEmailScheduler(string, MailMessage, DateTime, TimeSpan)"/> public void SendEmailScheduler(string smtpServer, IEnumerable <MailMessage> mailMessages, DateTime date, DateTime time) { var scheduledSendDateTime = date.Add(TimeSpan.Parse(time.ToString("HH:mm"))); try { DataValidate(smtpServer, mailMessages, scheduledSendDateTime); } catch (EmailSendServiceException ex) { throw ex; } var sheduledMessage = new Message() { SenderId = _senderRepository.GetAll().Where(x => x.Email == mailMessages.FirstOrDefault().From.Address).FirstOrDefault().Id, Body = mailMessages.FirstOrDefault().Body, Title = mailMessages.FirstOrDefault().Subject, ScheduledSendDateTime = scheduledSendDateTime, SendDateTime = null }; _messageRepository.Add(sheduledMessage.ToEntity()); messageScheduled.Invoke(); var timer = new System.Timers.Timer(60000) { Enabled = true }; timer.Elapsed += async(sender, args) => await OnTimeoutAsync(sender, smtpServer, mailMessages, scheduledSendDateTime); timer.Start(); }
///<inheritdoc cref="IMessageSendService.SendEmail(SmtpClient, Message)"/> public async Task SendEmailNow(string smtpServer, IEnumerable <MailMessage> mailMessages, bool isSheduled = false) { if (isSheduled == false) { try { DataValidate(smtpServer, mailMessages); } catch (EmailSendServiceException ex) { throw ex; } } var sender = _senderRepository.GetAll().Where(x => x.Email == mailMessages.FirstOrDefault().From.Address).FirstOrDefault().ToDomain(); var allRecipients = _recipientRepository.GetAll(); var messageRecipients = new List <Recipient>(); using (var client = GetSmtpClient(sender, smtpServer)) { foreach (var mail in mailMessages) { var recipient = allRecipients.Where(x => x.Email == mail.To.FirstOrDefault().Address).FirstOrDefault(); messageRecipients.Add(recipient.ToDomain()); await client.SendMailAsync(mail); } } if (isSheduled == false) { var sendedMessage = new Message() { SenderId = sender.Id, Body = mailMessages.FirstOrDefault().Body, Title = mailMessages.FirstOrDefault().Subject, SendDateTime = DateTime.Now }; _messageRepository.Add(sendedMessage.ToEntity()); } ; foreach (var rec in messageRecipients) { _recipient2MessageRepository.Add(new Recipient2MessageEntity() { MessageId = _messageRepository.GetAll().Select(x => x.Id).LastOrDefault(), RecipientId = rec.Id }); } }