0

フォームの送信時にメールを送信する機能があります。この関数には、次のifステートメントが含まれています。

if ($guestDetails) 
{
  $mailer->addRecipient($guestDetails->email);
  $mailer->addCC( $config->get('emails_admin_email'));

  $mailer->setSubject( $subject );
  $mailer->setBody($template_layout);
  $mailer->IsHTML($mode);          
  $mailer->setSender(array( $mailfrom, $fromname ));
  $sent = $mailer->send();
}

最近、この機能は機能しなくなりました(つまり、電子メールは送信されなくなりました)。何が起こっているのかを調査するために、PHPエラーログに何も記録されていないため、いくつかの変数をログに記録するようにコードを変更しました。ifステートメントは次のようになります。

$testArr = array();
ClassName::_log_r("guestdetails", $guestDetails);
if ($guestDetails) 
{
  ClassName::_log_r("got into if", $testArr);
  $mailer->addRecipient($guestDetails->email);
  $mailer->addCC( $config->get('emails_admin_email'));

  $mailer->setSubject( $subject );
  $mailer->setBody($template_layout);
  $mailer->IsHTML($mode);          
  $mailer->setSender(array( $mailfrom, $fromname ));
  $sent = $mailer->send();
  ClassName::_log_r("mailer", $mailer);
  ClassName::_log_r("sent", $sent);
} else
  ClassName::_log_r("got into else", $testArr);

_log_rは、指定された変数の内容をテキストファイルに書き込む関数です。この「デバッグ」コードを追加すると、電子メールが再び送信され始め、ログには「getintoif」が正しく記録されます。前述のデバッグコードを削除すると、電子メールが再度送信されなくなります。

ここで何が起こっているのか、私は戸惑っています。誰かがこのようなものに出くわしたことがありますか?デバッグコードが削除されたときにメールが送信されないのはなぜですか?さらに情報が必要な場合はお知らせください。ありがとう!

PSコードはPHPで記述されており、サーバーはPHP5.3.10を実行しています。

4

2 に答える 2

1

頭に浮かぶ唯一の可能性のある答えは、何らかの理由で、$guestDetailsもはや定義されていないということです(たとえば、別の場所に名前が変更されまし$guestDetailた)。

_log_rこれには、引数が存在しない場合に引数を再定義する関数も必要になります。

CCに送信されているメールを確認すると、メールが届きます。無効な$guestDetails場合でも、プロセスの完了が停止することはありません。実際には、管理者への電子メールのみが生成されます。

次のようなものを試してください

if (!defined($guestDetails))
    ClassName::_log_r("mailer", "Not defined");
if (empty($guestDetails))
    ClassName::_log_r("mailer", "empty");

さらに詳細が気になるかどうかを確認します。

于 2012-08-22T16:19:18.980 に答える
1

でログを記録する代わりに、_log_rメールの例外をキャッチして、何が起こっているかについてより良い情報が得られるかどうかを確認してください。

if ($guestDetails) 
{
    try
    {
        $mailer->addRecipient($guestDetails->email);
        $mailer->addCC( $config->get('emails_admin_email'));

        $mailer->setSubject( $subject );
        $mailer->setBody($template_layout);
        $mailer->IsHTML($mode);          
        $mailer->setSender(array( $mailfrom, $fromname ));
        $sent = $mailer->send();
    } 
    catch (phpmailerException $e) 
    {
        echo $e->errorMessage(); //you could do a _log_r here..
    } 
    catch (Exception $e) 
    {
        echo $e->getMessage(); //or here..
    } 
}
else
{
    echo "guestDetails empty!"; //or here..
}
于 2012-08-22T16:40:48.693 に答える