【问题标题】:c# sending html email template include css not workingc#发送html电子邮件模板包括css不工作
【发布时间】:2017-01-12 05:38:54
【问题描述】:

我尝试发送 html 电子邮件模板,它运行良好,但是当我放置 css 内部样式时它给出错误:输入字符串格式不正确,

我的 html 模板效果很好:

<h3>data</h3>
<hr />
<table class="table table-striped table-bordered table-advance table-hover">
    <tr>
        <td>data </td>
        <td>{0}</td>
    </tr>
    <tr>
        <td>data </td>
        <td>{1}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{2}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{3}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{4}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{5}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{6}</td>
    </tr>
</table>

提供输入字符串的我的 html 模板格式不正确:

<h3>data</h3>
<hr />
<table class="table table-striped table-bordered table-advance table-hover">
    <tr>
        <td>data </td>
        <td>{0}</td>
    </tr>
    <tr>
        <td>data </td>
        <td>{1}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{2}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{3}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{4}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{5}</td>
    </tr>
    <tr>
        <td>data</td>
        <td>{6}</td>
    </tr>
</table>
<style type="text/css">
    table td{border:solid 1px;}
</style>

我的读取和发送的 c# 代码:

C_GeneralSettings settings = db.C_GeneralSettings.SingleOrDefault();
S_ResidencesReservations item = db.S_ResidencesReservations.SingleOrDefault(x => x.ReserveId == entity.ReserveId);
string subject = "data";
string message = System.IO.File.ReadAllText(Server.MapPath("~/EmailTemplates/ReservationDetails.html"));
message = string.Format(message, entity.ReserveId, entity.IsApproved ? "yes" : "no", entity.PayementPeriodEndDate, entity.ReservationDate.ToString("MM/dd/yyyy"), entity.Name, entity.Email, entity.CellPhone);

HelperMethods.SendEmail(message, entity.Email, subject, settings);

还有我的发送邮件方法:

public static void SendEmail(string messageContent, string toEmail, string subject, C_GeneralSettings emailEntity)
{
    //Check if email service is allowed
    bool allowEmailService = emailEntity.AllowEmailService;
    if (!allowEmailService)
        return;

    //Construct mail message
    string from = emailEntity.Email;
    string displayName = emailEntity.DisplayName;
    string to = toEmail;

    MailMessage message = new MailMessage();
    message.From = new MailAddress(from, displayName);
    message.To.Add(new MailAddress(to));
    message.Subject = subject;
    message.IsBodyHtml = true;
    message.Body = messageContent;

    //Get mail settings from config file
    string host = emailEntity.Host;
    string username = emailEntity.Email;
    string password = emailEntity.Password;
    int port = emailEntity.Port;
    bool enableSsl = emailEntity.EnableSSL;

    //Send the message
    SmtpClient smtp = new SmtpClient();
    smtp.Host = host;
    smtp.Port = port;
    smtp.Credentials = new System.Net.NetworkCredential(username, password);
    smtp.EnableSsl = enableSsl;

    smtp.Send(message);
}

【问题讨论】:

  • {border:solid 1px;} 你或许应该对它进行编码
  • 使用内联样式元素..或者通过下面的链接..它可以帮助你
  • @MilindRajput 问题与样式外观无关,问题是在c#读取和处理未完成时出错

标签: c# html css asp.net-mvc email


【解决方案1】:

有一个解决方案可以将 css 置于内联方式中,但它的方式很累, 示例:

<table dir="rtl" width="100%" cellpadding="0" cellspacing="0" border="0" align="center">
    <tr>
        <td style=""><img style="display:block; width:150px; margin-bottom:10px;" src="http://www.mitghamronline.com/up/uploads/14739221.png" alt=""></td>
    </tr>
</table>

这种方式效果很好,不会给我之前的错误,但是如果有人知道一种以内部方式编写 css 的方法,那会比这个更好

【讨论】:

    【解决方案2】:

    这不应该是使用的情况

    <style type="text/css">
        table td{border:solid 1px;}
    </style>
    

    如果您在 gmail 中查看,它不会应用任何边框,但在 Outlook 中您可以查看边框。

    不过你可以试试看。 message.BodyEncoding = System.Text.Encoding.UTF8

    如果这不起作用,您可能有一些输入没有正确转换。

    【讨论】:

      【解决方案3】:

      当我使用内部CSS时出现错误,因为我使用了string.format来绑定数据,

      内部 CSS 使用大括号,所以会导致类似这样的错误, 因此,如果您需要将内部 CSS 与动态 html 电子邮件模板一起使用,您可以使用 string.replace,例如 你的 html 模板会是这样的:

      <h3>data</h3>
      <hr />
      <table class="table table-striped table-bordered table-advance table-hover">
          <tr>
              <td>data </td>
              <td>#name#</td>
          </tr>
      </table>
      <style type="text/css">
          table td{border:solid 1px;}
      </style>
      

      并在c#中绑定它

      string message = System.IO.File.ReadAllText(Server.MapPath("~/EmailTemplates/Template.html"));
      message = message.Replace("#name#", name);
      

      【讨论】:

        猜你喜欢
        • 2012-07-03
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 2016-11-03
        • 2016-02-20
        • 2012-05-17
        • 2010-11-12
        • 2019-06-11
        相关资源
        最近更新 更多