Esempio n. 1
0
        public static void SendEmail(string emailToken, string from, string template, string[] to, string[] cc, string title, ILogger log)
        {
            log.LogInformation($"Sending email from {from} with title: {title}");

            SendGrid.SendGridClient client = new SendGrid.SendGridClient(emailToken);

            SendGrid.Helpers.Mail.SendGridMessage message = new SendGrid.Helpers.Mail.SendGridMessage();
            message.SetFrom(from);

            foreach (string item in to)
            {
                if (!string.IsNullOrEmpty(item))
                {
                    message.AddTo(item);
                }
            }

            foreach (string item in cc)
            {
                if (!string.IsNullOrEmpty(item))
                {
                    message.AddCc(item);
                }
            }

            message.SetSubject($"GitHub Report: {title}");
            message.AddContent(MimeType.Html, template);

#if !DEBUG
            var emailResult = client.SendEmailAsync(message).GetAwaiter().GetResult();
#else
            File.WriteAllText("output.html", template);
#endif
        }
Esempio n. 2
0
        private static SendGrid.Helpers.Mail.SendGridMessage getSendGridMessage(EmailMessage message)
        {
            var m = new SendGrid.Helpers.Mail.SendGridMessage();

            SendGrid.Helpers.Mail.EmailAddress getAddress(EmailAddress address) =>
            new SendGrid.Helpers.Mail.EmailAddress(address.Address, name: address.DisplayName.Any() ? address.DisplayName : null);

            m.From = getAddress(message.From);
            // As of 12 September 2017 SendGrid does not support multiple reply-to addresses. See https://github.com/sendgrid/sendgrid-csharp/issues/339.
            var replyToAddress = message.ReplyToAddresses.SingleOrDefault();

            if (replyToAddress != null)
            {
                m.ReplyTo = getAddress(replyToAddress);
            }

            foreach (var i in message.ToAddresses.Select(getAddress))
            {
                m.AddTo(i);
            }
            foreach (var i in message.CcAddresses.Select(getAddress))
            {
                m.AddCc(i);
            }
            foreach (var i in message.BccAddresses.Select(getAddress))
            {
                m.AddBcc(i);
            }

            m.Subject = message.Subject;

            foreach (var i in message.CustomHeaders)
            {
                m.AddHeader(i.Item1, i.Item2);
            }

            m.PlainTextContent = htmlToPlainText(message.BodyHtml);
            m.HtmlContent      = message.BodyHtml;

            foreach (var i in message.Attachments)
            {
                if (i.Stream == null)
                {
                    m.AddAttachment(Path.GetFileName(i.FilePath), Convert.ToBase64String(File.ReadAllBytes(i.FilePath)));
                }
                else
                {
                    using (var stream = new MemoryStream()) {
                        i.Stream.CopyTo(stream);
                        m.AddAttachment(i.AttachmentDisplayName, Convert.ToBase64String(stream.ToArray()));
                    }
                }
            }

            return(m);
        }
        public override Task SendAsync(MailMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            var oclient = new SG.SendGridClient(SmtpServer.ApiKey);

            var sgMessage = new SG.Helpers.Mail.SendGridMessage();

            var from = new SG.Helpers.Mail.EmailAddress();

            sgMessage.Subject     = message.Subject;
            sgMessage.HtmlContent = message.Body;

            if (message.From != null)
            {
                sgMessage.From = new SG.Helpers.Mail.EmailAddress(message.From.Address, message.From.DisplayName);
            }
            else
            {
                sgMessage.From = new SG.Helpers.Mail.EmailAddress(DefaultFromEmail, DefaultFromName);
            }

            if (message.Attachments != null & message.Attachments.Count > 0)
            {
                foreach (var attachment in message.Attachments)
                {
                    using (var reader = new System.IO.StreamReader(attachment.ContentStream))
                    {
                        string contentDisposition = null;
                        string contentType        = null;

                        if (attachment.ContentDisposition != null)
                        {
                            contentDisposition = attachment.ContentDisposition.DispositionType;
                        }

                        if (attachment.ContentType != null)
                        {
                            contentType = attachment.ContentType.Name;
                        }

                        sgMessage.AddAttachment(attachment.Name, reader.ReadToEnd(), contentType, contentDisposition, attachment.ContentId);
                    }
                }
            }

            foreach (var to in message.To)
            {
                sgMessage.AddTo(to.Address, to.DisplayName);
            }

            foreach (var cc in message.CC)
            {
                sgMessage.AddCc(cc.Address, cc.DisplayName);
            }

            foreach (var bcc in message.Bcc)
            {
                sgMessage.AddBcc(bcc.Address, bcc.DisplayName);
            }

            return(oclient.SendEmailAsync(sgMessage));
        }