PHP邮件功能和标头重定向不一起工作

时间:2014-04-21 00:59:53

标签: php email

以下代码用于向用户提供电子邮件的用户发送电子邮件。

$from_whom_header = mysqli_real_escape_string($connect, 'noreply@test.com'); //setting a static from field

$from_whom = mysqli_real_escape_string($connect, $_POST['your_email']); // this is used to pass the email of the person sending the email into the subject line and body of email

$headers = 'From:'.$from_whom_header; //passing in static address stated above 

$subject_email = $from_whom.'mentioned you in their latest post!';

$body_email = '//email text...';


if(@mail($to, $subject_email, $body_email, $headers))
{

     echo ' emailing...';                                                                                   

}

else
{

    $oh_noes_2 = '<div class="error">'.'error sending mail'.'</div>';

} 


header('Location: email_success.php');

无论出于何种原因,header命令都不起作用。我正在使用对象缓冲(ob_start()等),我尝试将此脚本放在ob开始标记下,仍然没有结果。

我的问题是,在邮件功能中使用的$ header和用于重定向的header命令之间是否存在PHP混淆?

对于某些上下文,这个脚本是在一些验证逻辑之后出现的,我将echo'emailing ...'测试放在那里进行调试,甚至当header命令嵌套在那里并且echo证明了mail命令是工作,它仍然不想重定向。

2 个答案:

答案 0 :(得分:0)

更改代码的这一部分:

if(@mail($to, $subject_email, $body_email, $headers))
{

/* Don't output anything before using header, otherwise you'll get errors.  
   echo 'emailing...';*/ 

header('Location: email_success.php');       
}

else
{

    $oh_noes_2 = '<div class="error">'.'error sending mail'.'</div>';

} 

From the manual...

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。

答案 1 :(得分:0)

错误记录后,我发现在PHP.ini的session.save_path字符串中错误配置了某些内容。我能够编辑它并解决问题。在页面底部抛出错误后发现问题,说路径错误且无法打开会话变量。

向前推进可能会在以后看到此问题的任何人,如果未设置会话变量,请根据评论人员的建议,确保以下内容属实。

  • 在输出ANYTHING之前,会话开始位于所有php doc的顶部。调用OB_start()也是一个好主意。
  • 检查您的会话ID是否相同。这可以通过简单地回显文档顶部的session_id()变量来完成。
  • 放置error_reporting(E_ALL); ini_set(&#39; display_errors&#39;,1);文档顶部的字符串并搜索错误。如果出现打开命令错误,请将错误跟到PHP.ini中的行并更改目录。在我的情况下,我不得不在主机服务器上使用一个处理临时变量的预定义文件夹。