从电子邮件正文中删除换行符

时间:2014-04-08 15:23:55

标签: c# outlook gmail newline stringbuilder

我正在使用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(没有测试过其他人)实际上是删除了一些换行符,而不是其他换行符。有谁知道他们为什么或如何确定要删除的内容?

enter image description here

3 个答案:

答案 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();