2011-01-25 10 views
5

PHPMailerクラスのエラーメッセージを無効にするにはどうすればよいですか?私自身のエラーメッセージを表示しています。ユーザーに「SMTPエラー:SMTPホストに接続できませんでした」などのエラーを表示させたくありません。PHPMailerのエラーメッセージを無効にする

マイコード:http://pastie.org/1497819

おかげ

+0

phpmailerのは 'verbose'性質を持っている:デバッグチェックし、それが働いていたが完全に

このライン

Echo $ this-> Lang ('invalid_address'). ':'. $ Address; 

変化に追従します。私は便利なコピーを持っていないので、正確な名前をチェックすることはできませんが、その効果があります。クラスファイルの先頭を確認してください。それはそこにあるはずです –

+0

$ ErrorInfoが見つかりましたが問題ありません私が行をコメントアウトする場合。エラーメッセージが表示されます。 – Richard

答えて

3

をこれはおそらく最良の解決策はありませんが、それは動作します。あなたのphpmailerのライブラリフォルダのオープン "class.phpmailer.php" で

それは

echo $e->getMessage()."\n"; 
+1

$ mail-> SMTPDebug = 0;すべての警告/通知を停止します – Sunit

0

エラーが呼び出しから$mail->Send();に来ているなら、あなたはこのような何かを行うことができます。

$oldErrorSetting = error_reporting(0); // temporarily disable warnings 
$delivery = $mail->Send(); 
error_reporting($oldErrorSetting); // restore error setting 

これはから来るPHPのエラーを抑制しますSendコール。

はその後、phpmailerののエラーを取得し、彼らと素敵な何かをするために、あなたは$delivery戻り値とErrorInfo使用することができます。

if (!$delivery) { 
    $errorDetails = $mail->ErrorInfo; 
    print "<p>$errorDetails</p>\n"; 
} 
+0

私はそれを働かせることができません、私は何か間違っている必要があります、私はあなたのコードを実装しようとしたが運がない。オリジナルのコードはhttp://pastie.org/1497819をご覧ください。 – Richard

23

は私が知っている行をコメント内

public function Send() 

は、このスレッドが古く、すでに見つけます私は同じ問題を抱えていたが、別の方法でそれを解決してしまったので、私はここでつまずいた。注:私はPHPMailer v5.1を使用しています。

PHPMailerクラスをインスタンス化すると、1つのオプションの引数$ exceptionsが使用されます。 PHPMailerは、例外が発生した場合に例外をスローする必要があるかどうかをPHPMailerに通知します。デフォルトはfalseです。つまり、例外をスローしないで、そのメッセージをエコーし​​ます。ただし、それを

のように呼び出すと、
$mail = new PHPMailer(true); 

のように呼び出すと例外がスローされます。あなたはそれらの例外をキャッチして、あなたが選択したものの対処することができます。私にとっては、ソースコードを迷惑にしたり、エラー報告を無効にするよりもはるかに洗練されエレガントです。

+0

これは最高の答えですIMO、ありがとう。 –

+0

これは最高の答えです。合意した – CaptSaltyJack

2

関数内で、よりよい解決策は、(私は思う:))、それはファイル「class.phpmailer.php」でリッカルド

によって推薦し液の改良版だあります

public function Send() 

ラインに

echo $e->getMessage()."\n"; 

を見つけて、この

if ($SMTPDebug) 
    echo $e->getMessage()."\n"; 
のためにそれを交換します

デバッグモードで実行している場合、このように例外メッセージ(またはエラーメッセージ)が表示されます。

にご安心!

+1

class.phpmailer.phpファイルを編集しないでください。将来、困難なアップグレードを行います。 – Susan

2

ここで別のソリューションです:

ob_start(); //start output buffering to capture all output and prevent errors from being displayed 
$delivery = $mail->Send(); 
ob_end_clean(); //erase the buffer and stop output buffering 

私はJUtilityからエラーを抑制するために必要な::舞台裏phpmailerのを使用していますので、上記の答えは私のために動作しませんでしたJoomlaの中のsendmail機能が、出力バッファリングトリックをしました。

9

これは、PHPMailerがあなたにやって欲しい方法です。元のクラスファイルを編集する必要はありません。

$mail->SMTPDebug = false; 
$mail->do_debug = 0; 
+0

テスト目的のために私は自分のメールサーバーをオフにしていますが、私はこれらの行に入れても、\t $ mail = new PHPMailer(false); \t \t $ mail-> SMTPDebug = 0; \t \t $ mail-> do_debug = 0;私はまだコンソールに「メール機能をインスタンス化できませんでした」という行が表示されます。私のjsonコードがjQueryに戻るのを止めているので、とても迷惑になります –

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

私は、エラーの問題を抱えている:ヘッダー情報を変更することはできません - すでにによって送られたヘッダ(出力が/phpMailer/class.phpmailer.phpで開始)私のリターンJSONヘッダを必要とするため( 'Content-Type:application/json');クラスclass.phpmailer.phpがスクリーンに印刷されているためエラーを出していた無効なアドレス:ヘッダーのエラーを生成して解決するのはシンプルで、次の行のclass.phpmailer.phpクラスにのみ含まれています

If ($ this-> SMTPDebug) { 
       Echo $ this-> Lang ('invalid_address'). ':'. $ Address; 
  } 
関連する問題