我希望我的表单(基于Swift Mailer)使用header();
重定向到链接
问题是我似乎无法找到放置header();
部分的位置,以便成功发送表单并且人员是重定向的。这是当前的代码:
<?php
if(isset($_POST['email'])) {
// Require the Swift Mailer library
require_once 'lib/swift_required.php';
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl' )
->setUsername('xxxx')
->setPassword('xxxx')
;
$mailer = Swift_Mailer::newInstance($transport);
foreach ($_POST as $key => $value)
$messageText .= ucfirst($key).": ".$value."\n\n";
$message = Swift_Message::newInstance('A message from Pivot Template Form')
->setFrom(array($_POST['email'] => $_POST['name']))
->setTo(array('email@email.com' => 'John Doe'))->setBody($messageText);
try{
echo($mailer->send($message));
}
catch(Exception $e){
echo($e->getMessage());
}
exit;
}
?>
任何人都知道在哪里添加这条线?
答案 0 :(得分:0)
由于代码的这一部分,您很可能会遇到问题:
try{
echo($mailer->send($message));
}
catch(Exception $e){
echo($e->getMessage());
}
// This is where you're probably trying to put header()
exit;
问题在于,通过使用echo
,PHP会自动将标头发送到浏览器,因为标头已经与输出一起发送,因此任何其他header
函数都无法使用。 From the docs:
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。
因此,您必须使用不同的策略将消息传达给用户。可能像:
try{
$mailer->send($message);
header('Location: mydesiredpage.php?success=1');
}
catch(Exception $e){
echo($e->getMessage());
}
exit;
然后检查下一页中的$_GET['success']
变量,将消息传达给用户。