Exemple #1
0
        ///<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();
        }
Exemple #2
0
        ///<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
                });
            }
        }