0

私はPHP/電子メールの「地獄」にいました-私は近づきましたが、「フィニッシュライン」にたどり着けないようです....

Om は phpmailer を使用して、クライアント サイトでサポート リクエストを送信しています。私のプロセスは次のようになります: フォーム -> プロセス (フィードバック メッセージを生成し、サポートへの cc メッセージを生成します) -> 送信者にメール -> サポートにメール -> お礼のページにリダイレクトします。

問題は 2 つあります: 1) デバッグをオンにしている場合、電子メールは期待どおりに送信されますが、デバッグが表示され、リダイレクトされません 2) デバッグをオフにすると、電子メールは送信されず、空白のページが表示されます -リダイレクトなし

* 補遺 * メールが届いたばかりです - リダイレクトの問題だけです... デバッグの有無にかかわらず、メタ リフレッシュが送信されません - もっと良い方法があるかもしれません????

PHP フォーム プロセッサ

...
// send two emails
    $_emailTo = $email; // the email of the person requesting
    $_emailBody = $text_body; // the stock response with things filled in
    include ( 'email.php' );

    $_emailTo = $notifyEmail; // the support email address
    $_emailBody = $pretext.$text_body; // pretext added as meta data for support w/ same txt sent to user
    include ( 'email.php' );

// relocate
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=success.php" >';
    exit;

PHP メーラー (email.php)

<?php
    require 'phpmailer/class.phpmailer.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();

//Tell PHPMailer to use SMTP
$mail->IsSMTP();

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;

//Set the hostname of the mail server
$mail->Host = "mail.validmailserver.com";

//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 26;

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication
$mail->Username = "validusername";

//Password to use for SMTP authentication
$mail->Password = "pass1234";

//Set who the message is to be sent from
$mail->SetFrom('me@validmailserver.com', 'no-reply @ this domain');

//Set an alternative reply-to address
//$mail->AddReplyTo('no-reply@validmailserver.com','Support');

//Set who the message is to be sent to
$mail->AddAddress( $_emailTo );
$mail->Subject = $_emailSubject;
$mail->MsgHTML( $_emailBody );

$_emailError = false;

//Send the message, check for errors
if( !$mail -> Send() ) {
    $_emailError = true;
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
?>

助けてください

4

1 に答える 1

1

リダイレクトが試行される前に、一部の出力が既にブラウザーに送信されていることが問題である可能性があります。通常、そのような状況ではリダイレクトを実行できません。その場合は、次の例のように出力バッファリングを使用できる場合があります。

ob_start();
//statements that output data to the browser
print "some text";
if (!headers_sent()) {
    header('Location: /success.php');
    exit; 
}
ob_end_flush();

これは、php.ini ファイルで出力バッファリングディレクティブを使用してデフォルトでオンにすることもできます。この場合、ob_start() および ob_end_flush() ステートメントは必要ありません。私のphp.iniファイルにはこれがあります:

output_buffering = 4096
于 2013-05-30T05:05:33.130 に答える