Я пытаюсь отправить шаблон электронной почты 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_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);
}
1
Ahmad Alaa 4 Сен 2016 в 22:19

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>

И привязать его к С #

string message = System.IO.File.ReadAllText(Server.MapPath("~/EmailTemplates/Template.html"));
message = message.Replace("#name#", name);
1
Ahmad Alaa 18 Фев 2019 в 09:56

Этого не должно быть при использовании

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

Это еще одна вещь, что он не будет применять никаких границ, если вы просматриваете в Gmail, но в Outlook вы можете просматривать границы.

Но вы можете попробовать, используя. message.BodyEncoding = System.Text.Encoding.UTF8

Если это не сработает, у вас могут быть некоторые входные данные, которые не конвертируются правильно.

1
S K Nayak 5 Сен 2016 в 10:04

Есть решение, которое ставит 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 внутренним способом, это будет лучше, чем это

0
Ahmad Alaa 5 Сен 2016 в 09:19