Blog

PHPのSMTP接続ライブラリQdsmtpのエラー処理

 2010/04/07
このエントリーをはてなブックマークに追加

みなさんこんにちは。@ryuzeeです。

QdsmtpはオープンソースSMTP用ライブラリで、こちらから入手できます。 僕はCakePHPでQdmailとQdsmtpの組み合わせでメールを送信することが多いのですが、今回真面目にエラー処理をする必要があったので調べてみました。 以下が僕の実装ですが、たぶんQdmailでの定石だと思いますので共有します。

大事なのは上2行です。 errorDisplayをfalseにしないと、Qdmailでのエラーが、レスポンスで表示されてしまいます。 またQdmailではQdsmtp側のエラーは抑止してくれないので、2行目の項目を入れないと、Qdmail側のエラーは抑止できても、SMTPサーバへの接続エラーみたいなPHPレベルでのエラーが画面に出力されてしまうことになります。

$this->Qdmail->errorDisplay(false);
$this->Qdmail->smtpObject()->error_display = false;
$this->Qdmail->smtpLoglevelLink(true);
$this->Qdmail->logPath(LOGS);
$this->Qdmail->logFilename("mail.log");
$this->Qdmail->errorlogPath(LOGS);
$this->Qdmail->errorlogFilename("error_mail.log");

errorDisplayをfalseに設定しない場合、ListenしていないSMTPサーバにつなげようとすると、以下のようなエラーが画面に出ます。

Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.8
Qdmail error: OS WINNT ; PHP Version 5.2.8 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,UTF-8
Qdmail Status debug: 0, log: 3, errorlog: 3
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Send Error line -> 2115

一方で、errorDisplayをfalseにしつつ、$this->Qdmail->smtpObject()->error_display = false;の設定をしていない場合は以下のように画面表示されます。

QdSmtp error: Connection error HOST: localhost PORT: 25 line -> 628
QdSmtp error: Error Resouce or stop connect line -> 522
QdSmtp error: Error From setting line -> 488

両方設定していた場合は、接続先SMTPサーバが存在しなかったり、応答してくれない場合も、画面上にエラー文字列は出ません。

こういうところを適当にしておくと、環境情報が何かのきっかけで表に出てしまったりしてよろしくないので注意する必要があります。

それでは。

 2010/04/07
このエントリーをはてなブックマークに追加