С# mvc2 создать электронное письмо в виде обычного текста в коде

Мне нужно создать простое тестовое электронное письмо в коде. Это необходимо, потому что информация в электронном письме будет прочитана приложением.

Я создал следующее значение в постоянной строке в качестве настройки для моей электронной почты. Это те поля, которые я хочу иметь в электронном письме, потому что они требуются приложению.

public static string TestMail = @"
[Begin Message]
Name = {0}
Phone = {1}
Postalcode = {2}
HomeNumber = {3}
[End message]";

При отправке электронного письма с использованием приведенного ниже кода приложение, которому необходимо прочитать информацию из электронного письма, получает ее следующим образом:

=0D=0A        [Begin Message]=0D=0A        Name =3D nam=
e=0D=0A        Phone =3D 0612345678=0D=0A        Postalcode =3D =
1234ab=0D=0A        HomeNumber =3D 5=0D=0A        [End messa=
ge]=0D=0A       =20

Код, который я использовал для отправки этого письма, выглядит следующим образом:

var mailBody = String.Format(Constants.TestMail, name, phone, postalCode, homeNumber);

var mail = new MailMessage
{
    Subject = Constants.Subject,
    Body = mailBody,
    IsBodyHtml = false,
};

mail.To.Add(receveiver);

var smtpClient = new SmtpClient();
smtpClient.Send(mail);

Это не тот результат, которого я ожидал, и, немного покопавшись, я обнаружил, что проблема заключалась в том, что это все еще кажется HTML-письмом, хотя мне нужно, чтобы оно было обычным текстом. Читая об этой проблеме, я нашел это пример на VB.net в Интернете. Поэтому я изменил константу на приведенную ниже;

public static string TestMail = @"[Begin message]\r\nName = {0}\r\nPhone = {1}\r\nPostalcode = {2}\r\nHomenumber = {3}\r\n[End message]";

Затем я использовал следующий код для создания и отправки электронной почты моему клиенту (тестирование в Outlook)

var mail = new MailMessage
{
    Subject = Constants.Subject,
};
var alternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailBody, Encoding.ASCII,"text/plain");

mail.AlternateViews.Add(alternateView);

mail.To.Add(receveiver);

var smtpClient = new SmtpClient();
smtpClient.Send(mail);

После запуска этого кода я получаю электронное письмо в своем внешнем виде (в данный момент не могу протестировать приложение), содержащее содержимое ниже;

[Start message]\r\nName = John\r\nPhone = 0612345678\r\nPostalcode = 1234ab\r\nHomeNumber = 5\r\n[End Message]

Последний результат не кажется мне простым текстовым письмом. Это просто у Outlook 2007 проблемы с отображением электронной почты? Или я все еще что-то упускаю? Я надеюсь, что кто-то может помочь мне здесь и может сказать мне, что происходит не так.


person Rob    schedule 04.02.2011    source источник
comment
Что произойдет, если вы удалите символ @?   -  person Tx3    schedule 04.02.2011
comment
@ Tx3 Спасибо, это помогло! Глупо с моей стороны пропустить такую ​​мелочь. Если вы опубликуете свой комментарий в качестве ответа, я приму   -  person Rob    schedule 04.02.2011


Ответы (1)


Вы должны удалить символ @, потому что тогда он будет правильно обрабатывать экранирующие символы. Если у вас есть @, то все escape-символы рассматриваются как обычный текст, а не новая строка и т. д.

person Tx3    schedule 04.02.2011