繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM