Esempio n. 1
0
        /// <summary>
        /// Renders the email view and builds a <see cref="MailMessage"/>. Does not send the email.
        /// </summary>
        /// <param name="email">The email to render.</param>
        /// <returns>A <see cref="MailMessage"/> containing the rendered email.</returns>
        public async Task <MailMessage> CreateMailMessageAsync(Email email)
        {
            var rawEmailString = await emailViewRenderer.RenderAsync(email);

            emailParser = new EmailParser(emailViewRenderer);
            var mailMessage = await emailParser.ParseAsync(rawEmailString, email);

            return(mailMessage);
        }
Esempio n. 2
0
        /// <summary>
        /// Renders the email view and builds a <see cref="MailMessage"/>. Does not send the email.
        /// </summary>
        /// <param name="email">The email to render.</param>
        /// <returns>A <see cref="MailMessage"/> containing the rendered email.</returns>
        public async Task <MailMessage> CreateMailMessageAsync(Email email)
        {
            var rawEmailString = await emailViewRenderer.RenderAsync(email);

            emailParser = new EmailParser(emailViewRenderer);
            var mailMessage = await emailParser.ParseAsync(rawEmailString, email);

            if (mailMessage.From == null || mailMessage.From.Address == null)
            {
                mailMessage.From = new MailAddress(this.options.FromAddress);
            }
            return(mailMessage);
        }
Esempio n. 3
0
        private async Task CreateAlternativeViews(string deliminatedViewNames, Email email)
        {
            var viewNames = deliminatedViewNames.Split(new[] { ',', ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var alternativeViewName in viewNames)
            {
                var fullViewName = GetAlternativeViewName(email, alternativeViewName);
                var output       = await alternativeViewRenderer.RenderAsync(email, fullViewName);

                string contentType;
                string body;
                using (var reader = new StringReader(output))
                {
                    contentType = ParseHeadersForContentType(reader);
                    body        = reader.ReadToEnd();
                }

                if (string.IsNullOrWhiteSpace(contentType))
                {
                    if (alternativeViewName.Equals("text", StringComparison.OrdinalIgnoreCase))
                    {
                        contentType = "text/plain";
                    }
                    else if (alternativeViewName.Equals("html", StringComparison.OrdinalIgnoreCase))
                    {
                        contentType = "text/html";
                    }
                }
                var ct = ContentType.Parse(contentType);

                switch (ct.MimeType)
                {
                case "text/plain":
                    email.BodyBuilder.TextBody = body;
                    break;

                case "text/html":
                    email.BodyBuilder.HtmlBody = body;
                    break;

                default:
                    throw new Exception("The 'Content-Type' header is unknown or missing from the alternative view '" + fullViewName + "'.");
                }

                foreach (var r in email.ImageEmbedder.Builder.LinkedResources)
                {
                    email.BodyBuilder.LinkedResources.Add(r);
                }
            }
        }
Esempio n. 4
0
        private async Task <AlternateView> CreateAlternativeView(Email email, string alternativeViewName)
        {
            var fullViewName = GetAlternativeViewName(email, alternativeViewName);
            var output       = await alternativeViewRenderer.RenderAsync(email, fullViewName);

            string contentType;
            string body;

            using (var reader = new StringReader(output))
            {
                contentType = ParseHeadersForContentType(reader);
                body        = reader.ReadToEnd();
            }

            if (string.IsNullOrWhiteSpace(contentType))
            {
                if (alternativeViewName.Equals("text", StringComparison.OrdinalIgnoreCase))
                {
                    contentType = "text/plain";
                }
                else if (alternativeViewName.Equals("html", StringComparison.OrdinalIgnoreCase))
                {
                    contentType = "text/html";
                }
                else
                {
                    throw new Exception("The 'Content-Type' header is missing from the alternative view '" + fullViewName + "'.");
                }
            }

            var stream          = CreateStreamOfBody(body);
            var alternativeView = new AlternateView(stream, contentType);

            if (alternativeView.ContentType.CharSet == null)
            {
                // Must set a charset otherwise mail readers seem to guess the wrong one!
                // Strings are unicode by default in .net.
                alternativeView.ContentType.CharSet = Encoding.Unicode.WebName;
                // A different charset can be specified in the Content-Type header.
                // e.g. Content-Type: text/html; charset=utf-8
            }
            email.ImageEmbedder.AddImagesToView(alternativeView);
            return(alternativeView);
        }