为什么From电子邮件字段未设置?

时间:2015-04-10 21:26:55

标签: php html captcha recaptcha

问题解决了!这是最终的代码:

<?php
    $full_name;$email;$subject;$message;$captcha;
        if(isset($_POST['full_name'])){
            $full_name=$_POST['full_name'];
        }if(isset($_POST['email'])){
            $email=$_POST['email'];
        }if(isset($_POST['subject'])){
            $subject=$_POST['subject'];
        }if(isset($_POST['message'])){
            $message=$_POST['message'];
        }if(isset($_POST['g-recaptcha-response'])){
            $captcha=$_POST['g-recaptcha-response'];
        }
        if(!$captcha){
            echo 'Check the reCAPTCHA box.';
            exit;
        }
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRET-KEY-HERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
        if($response.success==false)
        {
            echo 'You are a robot!';
        }else
        {
            $to = "me@domain.com";
            $from = $full_name . ' <'.$email.'>';
            $headers = 'From: ' . $from . "\r\n";
            mail ($to, $subject, $message, $headers);

        echo 'Your message has been sent!';
        }
?>

现在我收到发件人+电子邮件地址名称的“发件人”字段。

谢谢大家的帮助。

3 个答案:

答案 0 :(得分:0)

确保您正确验证您是否从$ _POST收到了所有内容。如果失败,您应该触发错误 的每一步。

在代码中

if(isset($_POST['full_name']) && isset($_POST['full_name'])){
        $full_name = $_POST['full_name'];
        $email = $_POST['email'];
        $from = $full_name . '<'.$email.'>';
}

您已经两次验证$ _POST [&#39; full_name&#39;];没有isset()检查$ _POST [&#39;电子邮件&#39;]。如果$ _POST [&#39;电子邮件&#39;]未正确通过,则会从电子邮件地址中删除。

答案 1 :(得分:-1)

首先,你根本没有初始化$ headers变量,但你有

  

$ headers。=&#39;来自:&#39; 。 $来自。 &#34; \ r \ n&#34 ;;

在开始或只是改变运算符上初始化&#34;。=&#34;进入&#34; =&#34;。

接下来的事情是,只有当字段&#34; g-recaptcha-response&#34;将存在于发送$ _POST数组中。我可以看到下面的HTML代码中没有带有该名称的字段。尝试添加该字段或删除此字段&#34;如果&#34;声明

  

如果(isset($ _ POST [&#39; G-验证码 - 响应&#39;]))

答案 2 :(得分:-1)

我认为问题可能是您构建from变量的方式:

$from = $full_name . '<'.$email.'>';

请注意,全名和&lt;之间没有空格。字符。在那里添加一个空格,你应该是好的,即:

$from = $full_name . ' <'.$email.'>';

顺便说一下,你的代码结构不是很好,并且有评论者提到的一些逻辑缺陷。考虑重组它是为了你自己的理智。