Php标头无法正常工作

时间:2015-09-23 10:17:16

标签: php phpmailer

这里我试图从函数发送邮件,邮件发送后我想将页面重定向到index.php。

我正在使用php标头这样做。但标题似乎不起作用。如果邮件已成功发送,那么页面也保持不变。它没有重定向到index.php

我该怎么做?

<?php
   function sendInvitation($user_email,$invited_by)
    {
        $mail = new PHPMailer;
        if (EMAIL_USE_SMTP) {
            $mail->IsSMTP();
            $mail->SMTPAuth = EMAIL_SMTP_AUTH;
            if (defined(EMAIL_SMTP_ENCRYPTION)) {
                $mail->SMTPSecure = EMAIL_SMTP_ENCRYPTION;
            }
            $mail->Host = EMAIL_SMTP_HOST;
            $mail->Username = EMAIL_SMTP_USERNAME;
            $mail->Password = EMAIL_SMTP_PASSWORD;
            $mail->Port = EMAIL_SMTP_PORT;
        } else {
            $mail->IsMail();
        }
        $mail->From = EMAIL_VERIFICATION_FROM;
        $mail->FromName = $invited_by;
        $mail->AddAddress($user_email);
        $mail->Subject = APP_INVITE;
        $link = INVITE_LINK;
        $mail->Body = $invited_by." ".FRIEND_INVITE." ".$link;
        if(!$mail->Send()) {
            $this->errors[] = MESSAGE_VERIFICATION_MAIL_NOT_SENT . $mail->ErrorInfo;
            return false;            
        } else {        
            return true;            
            header("Location: index.php");
        }
    }
?>

5 个答案:

答案 0 :(得分:2)

未经测试,但我认为问题是您在return();之前有一个header();,因此该函数在更改标题之前实际上已退出.. 试着改变

} else {        
            return true;            
            header("Location: index.php");
        }

} else {        

            header("Location: index.php");
            return true;        
        }

在PHP中,返回实际上是一个停止在该特定点执行函数的命令。

答案 1 :(得分:1)

删除return true。 使用return退出函数,因此代码永远不会进入header():)

答案 2 :(得分:1)

放出一个出口;在header()之后。

答案 3 :(得分:1)

您有两种选择:

1)删除return true并设置:

else {
    header("location: index.php");
    exit;
}

OR (这就是这个答案的原因而不是其他好的答案)

调用函数并在函数返回后设置标题。

所以函数中的代码是:

else {
        return true;
    }

你的函数调用是:

if(sendInvitation($user_email,$invited_by)){
    //function returns true, mail has been sent
    header("location:index.php");
   exit;
 }

在标题位置重定向之后立即放置exitdie语句以停止在服务器上处理的其余PHP页面也是一种好习惯。

答案 4 :(得分:0)

像这样使用

if(!$mail->Send())
{
    $this->errors[] = 'MESSAGE_VERIFICATION_MAIL_NOT_SENT'. $mail->ErrorInfo;

}
else
{
    header('Location: '.$_SERVER['SERVER_NAME']); //redirect to index.php
}