我正在使用System.Net.Mail.MailMessage
类生成一个简单的电子邮件,并使用StringBuilder
构建正文。我循环遍历string[]
并尝试每次都附加一个新行。我遇到的问题是我似乎每次都无法生成一个新行。我可以得到两个或没有。
我尝试了什么:
foreach (var message in messages)
{
body.AppendLine(message);
}
foreach (var message in messages)
{
body.Append(message + "\n");
}
foreach (var message in messages)
{
body.Append(message + System.Environment.NewLine);
}
我也试过了string.Format()
。
对于上面的每个例子,我得到相同的结果。没有生成新行。
然而,当我尝试以下操作时,我得到了预期的结果。中间有空行的新行。
foreach (var message in messages)
{
body.AppendLine(message + System.Environment.NewLine);
}
为什么要这样做?我每次只能获得一个新行?
更新
所以我发现Outlook和可能的Gmail(没有测试过其他人)实际上是删除了一些换行符,而不是其他换行符。有谁知道他们为什么或如何确定要删除的内容?
答案 0 :(得分:7)
当我在Outlook中查看电子邮件时,我收到了一条小信息,上面写着"此消息中的额外换行符已被删除"以及恢复它们的选项。 Gmail没有给出这样的指示(我发现),但我必须假设它也删除了它们。
有趣的是,我在身体的其他部位有按预期工作的换行符,只有循环中的换行符被视为"额外"。
我已修改我的代码以使用html构建电子邮件正文。
IsBodyHtml = true
如果有人知道某种方法可以防止这种情况发生,或者是什么导致某些换行符被删除,请告知我们。
<强>更新强>
一旦我知道我在寻找什么,我发现this帖子有助于解释事情并提供一些替代解决方案。我没有尝试过任何一个,因为我认为在我的情况下使用html是更好的解决方案。
答案 1 :(得分:0)
Gmail会删除明确的换行符。发送到Gmail时,此代码适用于我,以及具有正确换行符的Outlook。如果没有看到你的消息[]数组的样子,我完全无法复制你的问题。有些格式可能会被视为换行符导致所有格式被删除?我篡改了我的示例字符串,我无法让Outlook或Gmail剥离我的换行符。
private void SendMessage()
{
try
{
StringBuilder body = new StringBuilder();
string[] messages = { "test with a tab in it", " test with spaces", " \r\nTab, then line break", "\n\n\n\n\n\nlots of returns...", " test spaces" };
foreach (var msg in messages)
{
body.AppendLine(msg);
//body.AppendLine(string.Empty);
}
using (MailMessage message = new MailMessage())
{
message.From = new MailAddress("you@test.com", "Your Display Name");
message.ReplyToList.Add("reply-email@test.com");
message.To.Add("to@test.com");
message.Subject = "Test Line Break Message";
message.IsBodyHtml = false;
message.Priority = MailPriority.Normal;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Body = body.ToString();
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Host = "127.0.0.1";
smtpClient.Send(message);
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
我将假设代码中的某个位置构建或检索消息数组,正在发生导致此问题的事情。我相信它是可以修复的,但不是没有看到该部分是如何编码的。
答案 2 :(得分:0)
我刚刚通过LINQPad
运行了这个string[] messages = new string[]{"First line in message", "Second Line in message", "Third Line in message"};
StringBuilder sbA = new StringBuilder();
StringBuilder sbB = new StringBuilder();
StringBuilder sbC = new StringBuilder();
StringBuilder sbD = new StringBuilder();
// New line for each string
foreach (var message in messages)
{
sbA.AppendLine(message);
}
// New line for each string
foreach (var message in messages)
{
sbB.Append(message + "\n");
}
// New line for each string
foreach (var message in messages)
{
sbC.Append(message + System.Environment.NewLine);
}
//One Line
foreach (var message in messages)
{
sbD.Append(message);
}
sbA.Dump();
sbB.Dump();
sbC.Dump();
sbD.Dump();
每个都在StringBuilder意义上按预期执行。
我怀疑你需要在每个AppendLine的末尾添加"</br>"
这样的东西(未经测试):
MailMessage mail = new MailMessage(new MailAddress("someSender@email.com"), new MailAddress("someReceiver@email.com"));
string[] messages = new string[]{"First line in message", "Second Line in message", "Third Line in message"};
StringBuilder body = new StringBuilder();
body.AppendLine("<h2>My Message<h2></br>" );
foreach (var message in messages)
{
body.AppendLine(message + "</br>");
}
mail.Body = body.ToString();
mail.Dump();