PHP处理形式:未知发件人

时间:2014-04-02 10:36:33

标签: php email

我创建了一个带有处理PHP文件的表单。一切正常。我收到了邮件,但它来自Gmail中的“未知发件人”。为什么请?

我想在我的电子邮箱中看到填写表单的人的姓名和名字。我的代码有什么问题?

<?php


if(isset($_POST) && isset($_POST['form3_firstname']) && isset($_POST['form3_name']) && isset($_POST['form3_email']) && isset($_POST['form3_telephone']) && isset($_POST['form3_message'])) {
    extract($_POST);
    if(!empty($form3_firstname) && !empty($form3_name) && !empty($form3_email) && !empty($form3_telephone) && !empty($form3_message)) {

        $to = 'XXXXXX@gmail.com'; // My real email

        $subject = 'Contact from the site';

        $headers = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";
        $headers .= 'From:' .$form3_firstname. " " .$form3_name. "\r\n";
        $headers .= 'Reply-To:'.$form3_email. "\r\n";

        $message = '<html><body>';
        $message .= '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>';
        $message .= '<table>';
        $message .= '<tr><td colspan="2"><p>MESSAGE</p></td></tr>';
        $message .= '<tr><td>Firstname :</td><td>'.$form3_firstname.'</td></tr>';
        $message .= '<tr><td>Name :</td><td>'.$form3_name.'</td></tr>';
        $message .= '<tr><td>Email :</td><td>'.$form3_email.'</td></tr>';
        $message .= '<tr><td>Telephone :</td><td>'.$form3_telephone.'</td></tr>';
        $message .= '<tr><td>Message :</td<td>'.stripslashes($form3_message).'</td></tr>';
        $message .= '</table>';
        $message .= '</body></html>';


        if(mail($to, $subject, $message, $headers)){
            echo "Form sent";
        } else {
            echo "Form not sent";
        }

    } else {
        echo "You have not filled in the field";
    }
}


?>

3 个答案:

答案 0 :(得分:2)

$form3_name替换为$form3_email

$headers .= 'From:' .$form3_firstname. " " .$form3_name. "\r\n";
                                            ^^^^^^^^^^^^ //<----- Here

这是一个名称,而不是电子邮件地址,这就是您收到错误的原因。

此外,您需要将它们包装在标记<>

正确的方式..

$headers .= 'From:' .$form3_firstname. " ".'<'.$form3_email.'>'."\r\n";

答案 1 :(得分:1)

"\r\n"替换为"\n",您的问题将得到解决......并将return-path放入您的标题中......

    $headers = 'MIME-Version: 1.0' . "\n";
    $headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
    $headers .= 'From: \''.$form3_firstname.'\' <'.$form3_firstname.'>\r\nReturn-Path: <'.$form3_firstname.'>
    $headers .= 'From:' .$form3_firstname. " " .$form3_name. "\n";
    $headers .= 'Reply-To:'.$form3_email. "\n";

如果您需要更多指导,请告诉我......

答案 2 :(得分:0)

因为您没有在“发件人:”标题中提供电子邮件地址。总是需要一个电子邮件地址。

尝试以下方法:  $ headers。=“From:$ form3_firstname $ form3_name&lt; $ form_email&gt; \ r \ n”;

请注意,您可能需要测试和/或转义表单变量;例如,检查那里没有换行符,否则您的表单可能会被滥用于垃圾邮件。