Как сохранить перенос новой строки через SMTP, где тело письма должно поддерживать HTML - PullRequest
0 голосов
/ 19 сентября 2018

Итак, я создаю сценарий автоматической отправки электронной почты, который будет отправлять квитанции сотрудникам, когда они регистрируют проблему, для электронной почты необходимо разрешить HTML.

Однако, когда я извлекаю описание избазы данных и отображать ее на внешнем интерфейсе (asp:textbox) .aspx page, она отображается с новыми символами строки, отформатированными должным образом, но когда я отправляю описание через SMTP получателям, разрывы строк (символы новой строки) не переносяттекст в новую строку.

Например: строка примера: "Боб - человек, \ n и ему нравится баскетбол". В asp:textbox контролирует, как он рендерится правильно, но при отправке по электронной почте - нет.

Что за трещина в этом?Нужно ли заменять \n на HTML разрывы по мере их прохождения или вы можете их сохранить?

Вот основная идея сценария:

SmtpClient client = new SmtpClient();
client.Port = 587;
client.Host = "smtp.outlook.com";
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(serverEmail, serverEmailAuthToken);

MailMessage mm = new MailMessage(serverEmail, recipient, "Tasket Report Number: "
                                 + tasketTitle + " has been received.",
                                 "Tasket Report Number: " + tasketTitle + "<br/>"
                                 + "Problem Domain: " + domain + "<br/>"
                                 + "Report Type: " + type + "<br/>"
                                 + "Report Area: " + area + "<br/>"
                                 + "Description: " + description
                                 + "<br/>");
mm.IsBodyHtml = true;
mm.BodyEncoding = UTF8Encoding.UTF8;
mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
client.Send(mm);

1 Ответ

0 голосов
/ 19 сентября 2018

\n - это пробел для средств визуализации HTML.

Вам необходимо преобразовать символы новой строки в <br /> теги или абзацы, чтобы они отображались как символы новой строки в теле письма HTML.

И вы должны убедиться, что фактический текст HtmlEncode d.Если вы этого не сделаете, то для ввода разметки в почту можно использовать пользовательский ввод.

Проверенный временем набор служебных функций, поэтому я объявляю вас открытым исходным кодом:

public string enc(string s)
{
    return System.Web.HttpUtility.HtmlEncode(s);
}

/// <summary>
/// HTML-encodes a string after replacing its newlines with br tags
/// </summary>
public string enc_br(string s)
{
    if (String.IsNullOrWhiteSpace(s))
        return s;
    var lines = s.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
    if (lines.Length == 1)
        return enc(lines[0]);
    else
    {
        for (var i = 0; i < lines.Length; ++i)
        {
            lines[i] = enc(lines[i]);
        }
        return String.Join("<br />", lines);
    }
}

Пример использования:

...  + "Problem Domain: " + enc_br(domain) + "<br/>"

Подумайте об использовании String.Format или, если у вас достаточно свежая версия .NET, интерполяция строк: это значительно улучшит читабельность вашей композиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...