c#发送HTML邮件模板包括CSS不工作
本文关键字:包括 CSS 工作 发送 HTML | 更新日期: 2023-09-27 18:05:32
我试图发送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);
}
当我使用内部CSS时发生错误,因为我使用了字符串。绑定数据的格式,
内部CSS使用大括号,所以它会导致这样的错误,所以如果你需要使用内部CSS与动态html电子邮件模板,你可以使用字符串。替换,例如你的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);
不应该使用
<style type="text/css">
table td{border:solid 1px;}
</style>
是另一件事,它不会应用任何边界,如果你在gmail中查看,但在outlook中,你可以查看边界。
但是你可以用。消息。BodyEncoding = System.Text.Encoding.UTF8
如果这不起作用,你可能有一些输入没有正确转换。
有一个解决方案,把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在内部的方式,它会比这个更好