| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
導入案内導入案内 –
SMTP プロトコルの実装の提供
Net_SMTP の導入案内Net_SMTP パッケージは、SMTP 認証規格 (RFC-2554 で定義されているもの) に対応しています。 Net_SMTP がサポートする認証方式は DIGEST-MD5 や CRAM-MD5、LOGIN そして PLAIN といったものです。 依存性PEAR_Error クラスNet_SMTP パッケージは、すべてのエラー処理に PEAR_Error クラスを使用しています。 Net_Socket パッケージNet_Socket パッケージを、すべてのネットワーク通信の基盤として使用しています。 Auth_SASL パッケージAuth_SASL パッケージは必須ではありません。もしこのパッケージが存在すれば、 Net_SMTP パッケージで DIGEST-MD5 や CRAM-MD5 SMTP 認証方式を使用できるようになります。 存在しない場合は LOGIN と PLAIN しか使用できません。 エラー処理Net_SMTP クラスのすべての public メソッドは、 エラーが発生した場合に PEAR_Error オブジェクトを返します。PEAR_Error オブジェクトかどうかを調べる一般的な方法は、 PEAR::isError() を使用することです。 SMTP 認証Net_SMTP パッケージは、SMTP 認証規格 (RFC-2554 で定義されているもの) に対応しています。 Net_SMTP がサポートする認証方式は以下のとおりです。 これは優先度順に並んでいます。 DIGEST-MD5DIGEST-MD5 認証方式は、RSA Data Security Inc. の MD5 Message Digest アルゴリズムを使用します。 これは、SMTP の認証方式のなかで最もセキュアなものであるとみなされています。
CRAM-MD5CRAM-MD5 認証方式は、セキュリティの観点では DIGEST-MD5 方式に劣ります。これは、 新しい DIGEST-MD5 アルゴリズムに対応していない 昔の SMTP サーバとの互換性のために用意されています。
LOGINLOGIN 認証方式は、ユーザのパスワードを Base64 符号化方式で暗号化します。 Base64 で暗号化された文字列を復号するのはたやすいことなので、 LOGIN はセキュアな認証方式であるとはいえません。 この方式は避けるべきです。 PLAINPLAIN 認証方式は、ユーザのパスワードを平文で送信します。 この方式による認証はセキュアではなく、避けるべきです。 セキュアな接続secure socket transports が PHP で使用可能な場合は、 リモートの SMTP サーバとの間にセキュアな接続を確立することができます。
<?php この例では、mail.example.com のポート 465 (標準の SMTPS ポート) に ssl:// トランスポートで接続します。 データのクォートデフォルトでは、送信される文字列データは SMTP 標準にあわせてクォートされます。つまり、Unix (\n) や Mac (\r) のネイティブの行末コードが Internet の標準である CRLF (\r\n) に変換されるということです。 また、SMTP プロトコルでは行頭の単一のピリオド (.) がメッセージデータの終了を意味するので、データ文字列の中に 行頭の単一のピリオドがあった場合はそれが "二重に" なります (つまり ".." となります)。 これらの文字列変換処理は、大量のデータを扱う際には負荷が高くなります。 たとえば、Net_SMTP パッケージは MIME パートには対応していません (MIME メッセージも、単なる巨大なメッセージ文字列として処理します)。 そのため、テキストではない添付ファイルの部分 (クォートが必要な文字がない部分) を読み飛ばすといったことができないのです。 このような理由から、Net_SMTP クラスを継承して自前のクォート処理を実装することができるようになっています。 そのためには、Net_SMTP を継承したクラスを作成して quotedata() メソッドを再実装します。
<?php quotedata() 関数の $data パラメータは参照で渡されることに注意しましょう。 つまり、$data を直接操作することができるということです。 巨大な $data 文字列を quotedata() メソッドにコピーしたりすると、 それもまたオーバーヘッドになってしまいます。 デバッグNet_SMTP パッケージには、デバッグ出力用のルーチンが組み込まれています (デフォルトでは無効になっています)。デバッグ出力を行うには、 setDebug() メソッドを使用します。
<?php デバッグメッセージは、標準出力ストリームに送られます。 例次のスクリプトは、シンプルなメールを Net_SMTP パッケージで送信する方法を示すものです。
<?php |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「導入案内」をGoogle検索
|