public async Task <IMailDistributorState> SendMail(DistributorData data, IMailDistributorState state)
        {
            try
            {
                var mailMessage = new MimeMessage();

                mailMessage.To.Add(new MailboxAddress(data.MailInfo.ToName, data.MailInfo.ToAddress));
                mailMessage.From.Add(new MailboxAddress(data.MailInfo.FromName, data.MailInfo.FromAddress));
                mailMessage.Subject = data.MailInfo.Subject;
                var mailMessageBody = new TextPart(TextFormat.Html);
                mailMessageBody.Content = new MimeContent(data.DocumentResult.Stream);
                mailMessage.Body        = mailMessageBody;
                try
                {
                    await(state as State).SmtpClient.SendAsync(mailMessage);
                }
                catch (Exception e)
                {
                    return(new SendMailStatus()
                    {
                        Success = false,
                        ErrorText = e.Message
                    });
                }
                return(SendMailStatus.Ok());
            }
            finally
            {
                await data.DocumentResult.Stream.DisposeAsync();
            }
        }
        public async Task <IMailDistributorState> SendMail(DistributorData data, IMailDistributorState state)
        {
            var mailMessage = new MimeMessage();

            mailMessage.To.Add(new MailboxAddress(data.MailInfo.ToName, data.MailInfo.ToAddress));
            mailMessage.From.Add(new MailboxAddress(data.MailInfo.FromName, data.MailInfo.FromAddress));
            mailMessage.Subject = data.MailInfo.Subject;
            var mailMessageBody = new TextPart(TextFormat.Html);

            mailMessageBody.Content = new MimeContent(data.DocumentResult.Stream);
            mailMessage.Body        = mailMessageBody;

            await using (var targetStream = new FileStream(Path.Combine(_workingDirectory, $"mail-to-{data.MailInfo.ToAddress}.mime"),
                                                           FileMode.Create))
            {
                await mailMessage.WriteToAsync(targetStream);
            }

            return(SendMailStatus.Ok());
        }
        public async Task <IMailDistributorState> EndSendMail(IMailDistributorState state)
        {
            await Task.CompletedTask;

            return(SendMailStatus.Ok());
        }
        public async Task <IMailDistributorState> BeginSendMail()
        {
            await Task.CompletedTask;

            return(SendMailStatus.Ok());
        }
 public async Task <IMailDistributorState> EndSendMail(IMailDistributorState state)
 {
     await(state as State).SmtpClient.DisconnectAsync(true);
     (state as State).SmtpClient.Dispose();
     return(SendMailStatus.Ok());
 }