Я пишу простой текст для отправки по электронной почте тела с помощью StringBuilder
. строка не добавляется во всех желаемых местах.
До сих пор я пытался. Оба не создают нужную строку все время.
builder.Append("\r\n");
builder.Append(Environment.NewLine);
вот часть моего кода:
builder.Append("question 1: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.GetAnswer1));
builder.Append(Environment.NewLine);
builder.Append("question 2: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.GetAnswer2));
builder.Append(Environment.NewLine);
builder.Append("question 3: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.GetAnswer3));
builder.Append(Environment.NewLine);
Результат:
question 1: No
question 2: Yes question 3: No
Желаемый результат:
question 1: No
question 2: Yes
question 3: No
Если я добавлю два builder.Append(Environment.NewLine), как предполагалось, он создаст две двойные строки (но я не могу заставить его сломать линию по третьему вопросу). У меня есть несколько из этих вопросов, и это происходит случайным образом (без шаблона).
Любое предложение о том, как заставить одну строку.
Вы сделали плохое предположение; StringBuilder.Append
не добавляет новую строку. Вы хотите .AppendLine()
. То, что у вас есть, - это то, что ожидается каждый .Append
добавляет текст, но не ограничивает строку. Вы добавили 3, так что вы получите 3 строки.
Обновление на основе комментариев OPs
На основе вашего кода и методов это должно быть хорошо:
builder.AppendLine(String.Format("Full Houlse?: {0}", CommonUtilities.GetYESNOfromBOOL(bo.FullHoulse)));
Отформатируйте нужную строку и добавьте полную строку в StringBuilder
. Вам нужно будет сделать это для каждой строки, в которой вы хотите.
Ваш код выглядит так, как будто он должен работать. Итак, вы обязательно получаете "\ r\n" после слова "Да"?
Если да, я блуждаю, если это проблема с клиентом электронной почты, который вы тестируете, неправильно обработав строки и символы возврата каретки. Кажется очень странным, что он случайным образом работает.
Вместо использования обычного текста в теле письма, как насчет использования html (message.IsBodyHtml = true
)? Например, вместо добавления "\ r\n" добавьте " <br/>
".
Обновление. Если ваш почтовый клиент является Outlook, эта ссылка может быть релевантной для вас: http://www.emailsignature.eu/phpBB2/outlook-is-stripping-line-breaks-from-plain-text-emails-t1775.html
Вот метод, который записывает строку в тело сообщения электронной почты
private static string GetEmailBody(PDI bo)
{
StringBuilder builder = new StringBuilder();
builder.Append("Full Houlse?: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.FullHoulse));
builder.AppendLine();
builder.Append("Any on call?: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.Anyoncall));
builder.AppendLine();
builder.Append("Phone Number?: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.PhoneNumber));
builder.AppendLine();
builder.Append("Email Address?: ");
builder.Append(CommonUtilities.GetYESNOfromBOOL(bo.EmailAddress));
builder.AppendLine();
return builder.ToString();
}
Вот часть, которая отправляет электронное письмо:
DistributionListData data = new DistributionListData();
data.LoadData(-1);
MailMessage message = new MailMessage();
message.Subject = "Subject";
message.Body = GetEmailBody(variable) + "\n";
message.To.Add(new MailAddress("[email protected]"));
(new SmtpClient()).Send(message);