从asp.net网站发送的电子邮件中未加载图片和CSS

时间:2016-03-29 06:51:31

标签: c# asp.net

在我的asp.net网站上,我有发送支持HTML的电子邮件的功能。这些电子邮件是使用SMTP发送的,这些电子邮件包含图像,也是指css文件。问题是,在gmail,yahoo和其他域中打开时,收到的电子邮件中的图像不会显示。我在电子邮件的HTML中使用的css代码/文件也出现了同样的问题。

我使用以下SMTP代码发送电子邮件:

        string _mailFrom = ConfigurationManager.AppSettings["mailfrom"].ToString();
        string _emailTo = ConfigurationManager.AppSettings["ScheduledServiceRecipientTO"].ToString();
        string _emailCC = ConfigurationManager.AppSettings["ScheduledServiceRecipientCC"].ToString();

        var _mailMessage = new System.Net.Mail.MailMessage();
        _mailMessage.To.Add(_emailTo);
        _mailMessage.CC.Add(new MailAddress(_emailCC));
        _mailMessage.From = new MailAddress(_mailFrom);
        _mailMessage.Subject = subject;
        _mailMessage.Body = pBody;
        _mailMessage.IsBodyHtml = true;

        try
        {
            var smtp = new System.Net.Mail.SmtpClient();
            {
                smtp.Host = ConfigurationManager.AppSettings["Host"];
                smtp.Port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]);
                //smtp.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["UserName"], ConfigurationManager.AppSettings["Password"]);
            }

            smtp.Send(_mailMessage);
            return true;
        }

        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

请帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须呈现HTML。我们使用RazorHelper函数和部分视图来设置您的电子邮件样式。 辅助类中有此功能:

public static string RenderPartialViewToString(Controller controller, string viewName, object model)
{
    controller.ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}

然后在Controller上下文中调用它:

email.Body = RazorHelper.RenderPartialViewToString(this, "PartialViewName", model);