我有一个应用程序允许用户将粘贴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#中工作。
答案 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”....
希望这些都有帮助。