2

我有一个应用程序允许用户将粘贴 html 复制到表单中。此 html 作为电子邮件发送,电子邮件服务器每行不允许超过 1000 个字符。所以,我想在用户点击提交后在 html 中插入换行符(\r\n)。如何在不更改内容的情况下做到这一点?

我的想法是这样的:

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

但这保证不会改变结果吗?属性中不允许使用“<”吗?

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

4

5 回答 5

1

在您认为应该有的地方添加正常的换行符。例如:

在我的脑海中,找到所有<p>, <table>, <tr>, <td>, <br>, 和<div>标签,并\r\n在它们之前添加一个权利。

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

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

于 2010-10-22T12:40:54.587 回答
1

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

使用System.Net.Mail.MailMessageC# 中的类,您应该能够构造一个普通的消息,它会为您传输编码。如果这不起作用,您还可以使用单个构造多部分消息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);
    }
}
于 2010-10-21T14:11:47.377 回答
1

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

于 2010-10-21T14:14:35.753 回答
1

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

否则,您可以在 X 个字符后插入换行符,并插入一些特殊标记(如<!--AUTO-LINEBREAK-->或类似的),通知接收电子邮件的人插入了自动换行符.

于 2010-10-21T14:20:17.140 回答
0

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

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

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

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

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

希望这对您有所帮助。

于 2010-10-21T14:05:32.917 回答