c#发送html电子邮件模板时包含css无效

c#发送html电子邮件模板时包含css无效,c#,html,css,asp.net-mvc,email,C#,Html,Css,Asp.net Mvc,Email,我试图发送html电子邮件模板,它工作得很完美,但当我放置css内部样式时,它给出了错误:输入字符串的格式不正确 我的html模板工作正常: <h3>data</h3> <hr /> <table class="table table-striped table-bordered table-advance table-hover"> <tr> <td>data </td>

我试图发送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>
以及我的“发送邮件”方法:

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);
}

有一种解决方案是以内联方式放置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的方法,它会比使用

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

表td{border:solid 1px;}
另一件事是,如果你在gmail中查看,它不会应用任何边框,但在outlook中你可以查看边框

但是你可以试一下使用。 message.BodyEncoding=System.Text.Encoding.UTF8


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

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

内部CSS使用花括号,因此会导致类似这样的错误, 因此,如果您需要在动态html电子邮件模板中使用内部CSS,您可以使用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>

{border:solid 1px;}
您应该使用内联样式元素对该元素进行编码..或者通过下面的链接..这可能会有所帮助you@MilindRajput问题与风格的出现与否无关,问题在于c#reading和process不完整时会出现错误
<style type="text/css">
    table td{border:solid 1px;}
</style>
<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>
string message = System.IO.File.ReadAllText(Server.MapPath("~/EmailTemplates/Template.html"));
message = message.Replace("#name#", name);