在Swift Mailer中重定向到带有标题的成功页面

时间:2014-11-06 16:50:56

标签: php header swiftmailer

我希望我的表单(基于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;
    }

?>

任何人都知道在哪里添加这条线?

1 个答案:

答案 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']变量,将消息传达给用户。