安全地将换行符插入HTML

时间:2010-10-21 13:57:28

标签: c# html email transfer-encoding

我有一个应用程序允许用户将粘贴html复制到表单中。此html将作为电子邮件发送,并email server will not allow more than 1000 characters per line。所以,我想在用户点击提交后在html中插入换行符(\ r \ n)。如何在不更改内容的情况下执行此操作?

我的想法是:

html.replace('<', '\r\n<');

但是保证不会改变结果吗?是'&lt;'属性中不允许?

编辑:我实际上认为这不起作用,因为html可能有一个类似if(x <3)的脚本块。我想我需要的是一个html漂亮的打印机,可以在js或C#中工作。

5 个答案:

答案 0 :(得分:1)

电子邮件MIME标准使用transfer encoding技术来解决此问题。理想情况下,您将使用一个邮件库来处理这个问题,因此您可以插入任意长度的行。

使用C#中的System.Net.Mail.MailMessage类,您应该能够构造一个普通的消息,并为您进行传输编码。如果这不起作用,您还可以使用单个System.Net.Mail.AlternativeView构建多部分消息,并明确设置传输编码。

以下是我目前使用的示例(注意它有一个字符编码错误,所以你的正文必须是unicode字符串):

private void Send(string body, bool isHtml, string subject, string recipientAddress, string recipientName, string fromAddress)
{
    using (var message = new MailMessage(new MailAddress(fromAddress),
                                    new MailAddress(recipientAddress, recipientName)))
    {
        message.Subject = subject;
        var alternateView = AlternateView.CreateAlternateViewFromString(body, message.BodyEncoding,
                                                                        isHtml ? "text/html" : "text/plain");
        alternateView.TransferEncoding = TransferEncoding.QuotedPrintable;
        message.AlternateViews.Add(alternateView);

        var client = new SmtpClient();

        client.Send(message);
    }
}

答案 1 :(得分:1)

如果Base64对内容进行编码,那么您可以将内容分解成您想要的多行。

答案 2 :(得分:1)

您正在尝试使用替换函数解析HTML dangerous territory。最简单的方法是在表单上显示一个警告框,告诉用户行不能超过1000个字符,如果他们尝试使用超过该长度的行提交内容,则返回错误消息。

否则,您可以在X个字符后插入换行符,并插入一些特殊标记(如&lt;! - AUTO-LINEBREAK - &gt; 或类似标记),通知谁是谁收到插入自动换行符的电子邮件。

答案 3 :(得分:1)

在您认为应该的位置添加正常的换行符。例如:

在我的头顶,找到所有<p><table><tr><td><br><div>标签,在他们面前添加\r\n

完成后,再循环遍历所有行。如果还有1000多个字符长,我会在空格中插入\r\n

此外,您应该从HTML电子邮件正文中删除任何脚本标记。拥有脚本标记可能会导致所有类型的问题(标记为垃圾邮件,标记为病毒,被阻止等)。

答案 4 :(得分:0)

我不确定您是如何发送电子邮件的......如果将其发送到php脚本然后将其发送到邮件服务器或使用mail()方法,则此链接可能会有所帮助。

http://php.net/manual/en/function.wordwrap.php

如果没有,你能澄清一下你的问题吗?

另一个简单的想法是,你可以使用:      html.replace( '', '\ r \ n'); 要么:      html.replace('',''+ String.fromCharCode(13)); //插入一个回车

但是,由于理想情况下将在浏览器中解析,因此插入“\ r \ n”可能无效,实际上可能只显示为“\ r \ n”....

希望这些都有帮助。