如何通过PHP脚本发送的文本格式化电子邮件正文

4

你好,我有一个联系我们的页面,在其中有一个文本区域用于描述,用户将在那里输入他/她的留言。我希望这个消息能够原样发送到邮件正文中,并保留所有格式。我从PHP脚本中获取描述。

$header = "Content-type: text/html\n";
$Description = $_REQUEST["txtDescription"];
mail($To, $Subject, $Description, $header);

我已经定义了 $To,$Subject 和 $header。邮件发送完美无误。我希望在邮件正文中显示用户在文本区域中输入的消息,并且保留格式(如换行)。

1
把换行符转换成HTML的<br />标签就可以了吧?... nl2br($Description) - naththedeveloper
如何将换行符转换为HTML的<br />标签? - Ankur Dhanuka
5个回答

2
您可以使用 nl2br() 将您的换行符 \n 转换为 <br/>,然后以 实际 HTML 格式发送电子邮件。
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

或者更好的方法是使用SwiftMailer或PHPMailer。它们比mail()函数更好,我建议在PHP脚本中发送电子邮件时使用它们。


@smAnkurDhanuka:哪里出了问题?在nl2br处理后,尝试输出数据会发生什么? - Amal Murali
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 不起作用。 - Ankur Dhanuka

1
使用nl2br()将换行符转换为<br>标签。
$Description = nl2br($_REQUEST["txtDescription"]);

此外,您还可以采取以下措施来保留多个空格 -
$Description = str_replace('  ', ' &nbsp;', $Description);

0
如果您想保留格式,请使用plain/text而不是text/html 或者将消息包装在pre标签中:
mail($To, $Subject, "<pre>{$Description}</pre>", $header)

当内容类型设置为 text/html 时,客户端将尝试像浏览器一样呈现它。因此,将应用与 html 相同的规则:多个空格和回车将被视为一个。因此,您需要使用暗示(默认情况下)保留格式的标签,如 pre 标签。


我可以同时保留plain/text和text/html吗?因为其中有一些HTML标签。 - Ankur Dhanuka
一封邮件可以被分成多个部分,因此您可以在同一封邮件中发送纯文本版本和文本/HTML版本,客户端将选择只读取一个版本。邮件的一个部分必须只有一个内容类型。因此,如果您想在邮件中发送HTML标记并希望文本保持格式,则需要使用<pre>或至少使用CSS属性,例如:<span style="white-space: pre">...(您可以在此处使用span或任何其他标记)。 - Charles-Édouard Coste

0

有没有特定的原因不使用它? - Yashankit Vyas

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接