[英]Line breaks being removed from email body
我正在使用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(尚未测试其他)实际上删除了一些换行符,而没有去除其他换行符。 有谁知道为什么或如何确定要删除的内容?
当我在Outlook中检查电子邮件时,收到一条很小的信息消息,内容为“已删除此消息中的额外换行符”,并提供了还原它们的选项。 Gmail没有给出这样的指示(我发现了),但是我必须假定它也将其删除了。
有趣的是,我的换行符在正文中的其他地方都按预期工作,只有循环中的换行符才被视为“多余”。
我已经修改了代码,以使用html构建电子邮件正文。
IsBodyHtml = true
如果有人知道防止这种情况发生的方法,或者是导致某些断行的原因,请告诉我。
更新:
知道自己要寻找的内容后,我发现了这篇文章有助于您解释事情并提供一些替代解决方案。 我没有尝试过任何方法,因为我认为使用html是我的情况下更好的解决方案。
Gmail将删除明确的换行符。 在发送到Gmail以及具有正确换行符的Outlook时,此代码对我有用。 我完全无法复制您的问题而没有看到您的message []数组是什么样子。 某些格式可能会被视为换行符,导致所有内容都被剥离? 我已经篡改了示例字符串,无法使用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);
}
}
我将假设在您的代码中某个构建或检索message数组的地方,发生某种情况导致此问题。 我相信它是可修复的,但一定要看那部分的编码方式。
我刚刚通过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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.