public async Task SendAsync(MailMessageDTO message)
        {
            if (message.Attachments.Any())
            {
                throw new NotSupportedException("Amazon SES API doesn't support e-mail attachments!");
            }

            using (var client = new AmazonSimpleEmailServiceClient(awsAccessKeyId, awsSecretAccessKey))
            {
                var sendRequest = new SendEmailRequest
                {
                    Source      = message.From.Address,
                    Destination = new Destination
                    {
                        ToAddresses  = message.To.Select(t => t.Address).ToList(),
                        CcAddresses  = message.Cc.Select(t => t.Address).ToList(),
                        BccAddresses = message.Bcc.Select(t => t.Address).ToList()
                    },
                    ReplyToAddresses = message.ReplyTo.Select(t => t.Address).ToList(),
                    Message          = new Message
                    {
                        Subject = new Content(message.Subject),
                        Body    = new Body
                        {
                            Text = new Content(message.BodyText),
                            Html = new Content(message.BodyHtml)
                        }
                    }
                };
                await client.SendEmailAsync(sendRequest);
            }
        }
Пример #2
0
        public async Task SendAsync(MailMessageDTO message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            // Get MIME message
            var msg = message.ToMimeMessage();

            // Send message
            using (var mx = new SmtpClient())
            {
                await mx.ConnectAsync(this.HostName, this.Port, AllowSsl?SecureSocketOptions.Auto : SecureSocketOptions.None);

                if (AllowSsl)
                {
                    mx.ServerCertificateValidationCallback = this.ServerCertificateValidationCallback;
                }
                if (!string.IsNullOrEmpty(this.UserName) && !string.IsNullOrEmpty(this.Password))
                {
                    await mx.AuthenticateAsync(this.UserName, this.Password);
                }
                await mx.SendAsync(msg);

                await mx.DisconnectAsync(true);
            }
        }
        public static MailMessage ToMailMessage(this MailMessageDTO message)
        {
            var mailMessage = new MailMessage()
            {
                Sender  = message.Sender.ToMailAddress(),
                Subject = message.Subject
            };

            // set body
            if (message.BodyHtml != null)
            {
                mailMessage.Body       = message.BodyHtml;
                mailMessage.IsBodyHtml = true;

                if (message.BodyText != null)
                {
                    var plainTextView = AlternateView.CreateAlternateViewFromString(message.BodyText, null, "text/plain");
                    mailMessage.AlternateViews.Add(plainTextView);
                }
            }
            else
            {
                mailMessage.Body       = message.BodyText;
                mailMessage.IsBodyHtml = false;
            }

            // set contacts
            if (message.From != null)
            {
                mailMessage.From = message.From.ToMailAddress();
            }
            foreach (var address in message.To)
            {
                mailMessage.To.Add(address.ToMailAddress());
            }
            foreach (var address in message.Bcc)
            {
                mailMessage.Bcc.Add(address.ToMailAddress());
            }
            foreach (var attachment in message.Attachments)
            {
                mailMessage.Attachments.Add(attachment.ToAttachment());
            }
            foreach (var address in message.Cc)
            {
                mailMessage.CC.Add(address.ToMailAddress());
            }
            foreach (var address in message.ReplyTo)
            {
                mailMessage.ReplyToList.Add(address.ToMailAddress());
            }
            foreach (var header in message.CustomHeaders)
            {
                mailMessage.Headers.Add(header.Key, header.Value);
            }

            return(mailMessage);
        }
Пример #4
0
        public async Task SendAsync(MailMessageDTO message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var mailMessage = message.ToMailMessage();
            await SmtpClient.SendMailAsync(mailMessage);
        }
Пример #5
0
        public async Task SendHtmlMail_Test()
        {
            var mx  = new PickupFolderMailSender(CreateTempFolder("html"));
            var msg = new MailMessageDTO
            {
                From     = new MailAddressDTO("*****@*****.**", "Example Sender"),
                Subject  = "Žluťoučký kůň úpěl ďábelské ódy - subject",
                BodyHtml = "<html><body><p>Žluťoučký kůň úpěl ďábelské ódy <b>v HTML</b>.</p></body></html>"
            };

            msg.To.Add(new MailAddressDTO("*****@*****.**", "Example Recipient"));
            await mx.SendAsync(msg);

            Assert.True(EmlFileExists(mx.FolderName));
        }
Пример #6
0
        public async Task SendPlainTextMail_Test()
        {
            var mx  = new PickupFolderMailSender(CreateTempFolder("plain"));
            var msg = new MailMessageDTO
            {
                From     = new MailAddressDTO("*****@*****.**", "Example Sender"),
                Subject  = "Žluťoučký kůň úpěl ďábelské ódy - subject",
                BodyText = "Žluťoučký kůň úpěl ďábelské ódy - text."
            };

            msg.To.Add(new MailAddressDTO("*****@*****.**", "Example Recipient"));
            await mx.SendAsync(msg);

            Assert.True(EmlFileExists(mx.FolderName));
        }
Пример #7
0
        public async Task Directory_ShouldBeCreated_IfNotExists()
        {
            var folderName = GetTempFolderName("not-created");
            var mx         = new PickupFolderMailSender(folderName);
            var msg        = new MailMessageDTO
            {
                From     = new MailAddressDTO("*****@*****.**", "Example Sender"),
                Subject  = "Žluťoučký kůň úpěl ďábelské ódy - subject",
                BodyText = "Žluťoučký kůň úpěl ďábelské ódy - text."
            };

            msg.To.Add(new MailAddressDTO("*****@*****.**", "Example Recipient"));
            await mx.SendAsync(msg);

            Assert.True(EmlFileExists(folderName));
        }
Пример #8
0
        public async Task SendAlternateMail_Test()
        {
            var tempFolder = CreateTempFolder("alternate");
            var mx         = new SystemSmtpClientMailSender(CreateSmtpClient(tempFolder));
            var msg        = new MailMessageDTO
            {
                From     = new MailAddressDTO("*****@*****.**", "Example Sender"),
                Subject  = "Žluťoučký kůň úpěl ďábelské ódy - subject",
                BodyText = "Žluťoučký kůň úpěl ďábelské ódy - text.",
                BodyHtml = "<html><body><p>Žluťoučký kůň úpěl ďábelské ódy <b>v HTML</b>.</p></body></html>"
            };

            msg.To.Add(new MailAddressDTO("*****@*****.**", "Example Recipient"));
            await mx.SendAsync(msg);

            Assert.True(EmlFileExists(tempFolder));
        }
Пример #9
0
        public Task SendAsync(MailMessageDTO message)
        {
            var web = new SendGridClient(apiKey);

            var msg = new SendGridMessage()
            {
                From    = ConvertMailAddress(message.From),
                ReplyTo = message.ReplyTo.Select(ConvertMailAddress).FirstOrDefault(),
                Subject = message.Subject
            };

            msg.AddTos(message.To.Select(ConvertMailAddress).ToList());

            if (message.Cc.Count > 0)
            {
                msg.AddCcs(message.Cc.Select(ConvertMailAddress).ToList());
            }

            if (message.Bcc.Count > 0)
            {
                msg.AddBccs(message.Bcc.Select(ConvertMailAddress).ToList());
            }

            if (message.Attachments.Count > 0)
            {
                msg.AddAttachments(message.Attachments.Select(ConvertAttachment).ToList());
            }

            if (string.IsNullOrWhiteSpace(message.BodyHtml))
            {
                msg.PlainTextContent = message.BodyText;
            }
            else
            {
                msg.HtmlContent = message.BodyHtml;
            }

            ProcessTemplate(msg, message.MailingTemplate);

            OnMessageSending(msg);
            return(web.SendEmailAsync(msg));
        }
Пример #10
0
        public static MimeMessage ToMimeMessage(this MailMessageDTO dto)
        {
            var msg = new MimeMessage();

            // Add standard header fields
            msg.From.Add(dto.From.ToMailboxAddress());
            msg.To.AddRange(dto.To.ToMailboxAddress());
            msg.Cc.AddRange(dto.Cc.ToMailboxAddress());
            msg.Bcc.AddRange(dto.Bcc.ToMailboxAddress());
            msg.Sender = dto.Sender.ToMailboxAddress();
            msg.ReplyTo.AddRange(dto.ReplyTo.ToMailboxAddress());
            msg.Subject = dto.Subject;

            // Add custom header fields
            foreach (var item in dto.CustomHeaders)
            {
                msg.Headers.Add(item.Key, item.Value);
            }

            // Construct body
            var bb = new BodyBuilder
            {
                TextBody = dto.BodyText,
                HtmlBody = dto.BodyHtml
            };

            // Add attachments
            foreach (var item in dto.Attachments)
            {
                ContentType ct;
                var         r = ContentType.TryParse(item.MimeType, out ct);
                if (!r)
                {
                    ct = new ContentType("application", "octet-stream");
                }
                bb.Attachments.Add(item.Name, item.Stream, ct);
            }

            msg.Body = bb.ToMessageBody();
            return(msg);
        }
Пример #11
0
        public async Task SendMailWithAttachment_Test()
        {
            var mx  = new PickupFolderMailSender(CreateTempFolder("attachment"));
            var msg = new MailMessageDTO
            {
                From     = new MailAddressDTO("*****@*****.**", "Example Sender"),
                Subject  = "Žluťoučký kůň úpěl ďábelské ódy - subject",
                BodyText = "Žluťoučký kůň úpěl ďábelské ódy - text.",
                BodyHtml = "<html><body><p>Žluťoučký kůň úpěl ďábelské ódy <b>v HTML</b>.</p></body></html>"
            };

            msg.To.Add(new MailAddressDTO("*****@*****.**", "Example Recipient"));

            using (var ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("Test attachment file")))
            {
                msg.Attachments.Add(new AttachmentDTO {
                    Name = "attachment.txt", MimeType = "text/plain", Stream = ms
                });
                await mx.SendAsync(msg);
            }

            Assert.True(EmlFileExists(mx.FolderName));
        }
 public MessageSendingEventArgs(MailMessageDTO message)
 {
     Message = message;
 }