0

我正在使用下面的 php 代码发送消息

<?php
$newline = $_GET['message'];

$newline = str_replace("[N]","\n","$newline");
$newline = str_replace("[n]","\n","$newline");

mail($_GET['to'],$_GET['subject'],$newline,"From: ".$_GET['from']);

header( 'Location: http://my_site.com/POMPC/report.html' ) ;
?>

可悲的是,当我发送消息时,它出现了,但一切都出现在一条直线上,弄乱了消息。

例子:

Hello,
This is a message. 
Reply.

表现为

你好,这是一条消息。回复。

一切都在一条直线上,把东西弄乱了。我如何维护格式。我发送的消息来自我的桌面应用程序,并将用户定义的数据发送给我。

4

5 回答 5

0

在所有其他事情之前,请确保您的消息在您期望的位置包含正确的换行符。您可以将此调试代码放在str_replace调用之后:

echo "<pre>$newline</pre>";

并查看您的文本是否被分成几行。如果不是,那么问题出在您的输入中。

接下来,看起来您的邮件阅读器将邮件解析为 HTML,因此所有内容都被拼凑在一起。您没有明确指定内容类型,因此由每个邮件阅读器决定如何解释消息。您的问题有两种解决方案:

(1) 将消息声明为 HTML 并用于<br/>分行:

<?php
$newline = $_GET['message'];

$newline = str_replace("[N]","\n","$newline");
$newline = str_replace("[n]","\n","$newline");
$newline = nl2br($newline);

$headers = "Content-type: text/html\r\nFrom: ".$_GET['from'];
mail($_GET['to'],$_GET['subject'],$newline,$headers);

header( 'Location: http://my_site.com/POMPC/report.html' ) ;
?>

(2) 将消息声明为纯文本并将换行符保留为\n

<?php
$newline = $_GET['message'];

$newline = str_replace("[N]","\n","$newline");
$newline = str_replace("[n]","\n","$newline");

$headers = "Content-type: text/html\r\nFrom: ".$_GET['from'];
mail($_GET['to'],$_GET['subject'],$newline,$headers);

header( 'Location: http://my_site.com/POMPC/report.html' ) ;
?>

两者中的任何一个都应该产生您想要的结果。

于 2012-07-25T11:48:22.980 回答
0

<p> </p>在您进入的内容中使用标签$_GET['message']

于 2012-07-25T11:31:22.740 回答
0

利用nl2br($_GET['message']);

另外,你为什么使用 GET 方法?POST 是更好的选择

于 2012-07-25T11:33:26.093 回答
0

您可以像这样创建您的消息

$content=" <h3> Hello </h3>, <p>This is a message. <br/> Long string <br/>";

$content . = " <br/> Thanks <br/> Your Name";
于 2012-07-25T11:38:02.787 回答
0

如果你想要 HTML 段落:

仅使用该mail()函数,您必须像这样编写 HTML 源代码:

不要在第 3 个参数中写任何内容$message,将其留空即可''。并像这样组成休息:

$additional_headers = <<<MAIL
Content-Type: multipart/alternative; boundary=00151747835895c6f804c48dc14b

--00151747835895c6f804c48dc14b
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

    Pararaph 1
    Pararaph 2

--00151747835895c6f804c48dc14b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

    <p>Pararaph 1</p>
    <p>Pararaph 2</p>

--00151747835895c6f804c48dc14b--
MAIL;

$additional_headers = str_replace("\n", "\r\n", $additional_headers);

确保纯文本/文本区域中的文本被一个或多个分隔,\r\n以获得类似于 html 段落的视觉感觉。

于 2012-07-25T12:51:18.677 回答