问题解决了!这是最终的代码:
<?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!';
}
?>
现在我收到发件人+电子邮件地址名称的“发件人”字段。
谢谢大家的帮助。
答案 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.'>';
顺便说一下,你的代码结构不是很好,并且有评论者提到的一些逻辑缺陷。考虑重组它是为了你自己的理智。