OpenPNEのPOP3認証(MS-Exchange 2003)
@ITの記事をに習って、OpenPNEのPOP3認証に挑戦。
社内の情報共有のためだ。
http://www.atmarkit.co.jp/fwcr/rensai/openpne02/openpne02_2.html
しかし、設定ではまった。
結論を言うと、Exchange Server 2003でPOP3認証を試したところ、
記事にある設定(config.php)だけでは、認証に失敗してしまった。
解決策として、
強引だけど、OpenPNEが持っているPEAR:Net_Authライブラリを修正しちゃいました。
$OPENPNE_DIR/lib/include/Net/POP3.php
以下の行をコメント。
//$this->_parseCapability();
これで、POP3認証がうまくいきました。
この_parseCapability()は、POP3の拡張(RFC2449)で定義されているCAPAコマンド
の実行結果を解析するAPIのようだが、どうも、この挙動がどうもおかしい。
Exchange Serverが、当然、サポートしているUSER認証方式が、なぜか、未サポート
とみなされ、こちらがIDとパスワードを送信する前にエラーとなってしまうようだ。
ちなみに、telnetで直接試したExchangeからのCAPAコマンドの返答。
Escape character is '^]'.
- OK Microsoft Exchange Server 2003 POP3 server ready.
CAPA
- OK Capability list follows
TOP
USER
PIPELINING
EXPIRE NEVER
UIDL
SASL NTLM
POP3コマンド
http://www.atmarkit.co.jp/fnetwork/rensai/netpro07/pop3-commands.html
しかし、原因はいったい何だろう。
PEAR:Net_Authライブラリのちょんぼなのか、ライブラリ作者がMS嫌いなのか。
Exchage以外のメールサーバでは試していないので、何ともいえないが、
メールサーバによってCAPAコマンドに対する返答のフォーマットが異なるため???
もう少し、調べてみたい。
ちなみに、そもそもconfig.phpに記述するPEAR:Authの設定で、methodの値をFALSEに
設定すると、Net_Authが呼び出されないと書いている。
もちろん、これも試したが、CAPAコマンドが実行されてしまう。これも謎。
もしや、俺のちょんぼ???
PEAR:AuthのAuth_Container_POP3の説明
http://pear.php.net/manual/en/package.authentication.auth.storage.pop3.php
もっとスマートな解決法があれば教えてプリーズ!