这里我试图从函数发送邮件,邮件发送后我想将页面重定向到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");
}
}
?>
答案 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;
}
在标题位置重定向之后立即放置exit
或die
语句以停止在服务器上处理的其余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
}