Php 电子邮件上说这不是谁发的

Php 电子邮件上说这不是谁发的,php,Php,我最近尝试使用php邮件功能发送确认电子邮件,我已经成功地做到了这一点。然而,当我在脚本中添加一些东西时,有些东西似乎不起作用 下面的代码是我开始工作的代码。我需要电子邮件包含的所有内容都会出现 $to = 'Myemail'; $subject = 'Confirmation'; $message = 'This is a test'; $headers = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain;

我最近尝试使用php邮件功能发送确认电子邮件,我已经成功地做到了这一点。然而,当我在脚本中添加一些东西时,有些东西似乎不起作用

下面的代码是我开始工作的代码。我需要电子邮件包含的所有内容都会出现

$to        = 'Myemail';
$subject = 'Confirmation';
$message = 'This is a test';
$headers = 'MIME-Version: 1.0' . "\r\n" .
    'Content-type: text/plain; charset=iso-8859-1' . "\r\n" .
    'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
    'From: fromemail'."\r\n" .  
    'Reply-To: replyemail' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
但是,当我将相同的标题传输到另一个脚本(如下)时,邮件会传递,但存在一些问题

1) 我的邮件说这封信不是别人寄来的。 2) 信息区域中显示的不是标题,而是邮件中的文本 发件人:来自电子邮件 回复:回复电子邮件 X-Mailer:PHP/5.2.9

下面的脚本包含在我编写的另一个程序中,所以我想知道这是否是问题所在。我不认为它的语法,因为它与我上面使用的标题相同。我附上了我收到的邮件的照片

非常感谢你的帮助

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <HEAD>
    </HEAD>
    <body>
        <?php
        $message = $_POST['message'];
        $subject = $_POST['subject'];
        if ($message != null) {
            include("connect.php");
            $extract = mysql_query("SELECT * FROM `contact` ORDER BY `id`") or die("Error");
            $counter = 0;
            while ($row = mysql_fetch_assoc($extract)) {
                $email[$counter] = $row['email'];
                $counter++;
            }
            for ($x = 0; $x < $counter; $x++) {
                $to = $email[$x];
                $subject = $subject;
                $message = $message;
                $headers = 'MIME-Version: 1.0' . "\r\n" .
                        'Content-type: text/plain; charset=iso-8859-1' . "\r\n" .
                        'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
                        'From: fromemail' . "\r\n" .
                        'Reply-To: replyemail' . "\r\n" .
                        'X-Mailer: PHP/' . phpversion();
                mail($to, $subject, $message, $headers);
                echo "EMAIL WAS SENT TO: ";
                echo $email[$x];
                echo "<BR>";
            }
        }
        ?>
    </body>
</html>

您的问题在于这一行:

'Content-Transfer_Encoding: 7bit' . "\r\n\r\n" .
//---------------------------------^^^^^^^^^^^
// Two line breaks ends the header block
// These remaining headers are seen as part of the message body
'From: fromemail'."\r\n" .  
'Reply-To: replyemail' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

这里有一个额外的换行符,它完成了消息的标题部分,位于
From
和后续标题之前。删除额外的
\r\n

作为旁注,您可能需要设置
-f
开关来设置信封发件人地址,以解决某些电子邮件客户端的无人发件人错误,如下所示:

$from = 'email@example.com';
mail($to, $subject, $message, $headers, '-f' . $from);

当然,这是Michael纠正的标题错误之外的错误。

随机注释-我相信
From:
的结构通常是:
From:First Last
这正是我的偏好,但我会修改$headers,使其仅使用双引号,这样你就可以避免你在那里看到的扭曲的摇摆。另外,您设置的是真正的电子邮件而不是fromemail,对吗?啊,出于好奇,我明白了,为什么它在第一个代码中起作用?设置-f有助于一些邮件客户端(尤其是Outlook)将From标头与发件人匹配。不设置-f可能会导致Outlook报告类似“从Apache@localhost代表fromemail@example.com"