POP3サーバにあるメールをPHPを使って受信する場合、皆さんはどのような方法を使いますか?PHPにはIMAPはもちろんのことPOP3でもアクセスできるIMAP関数というものがあります。しかし、IMAP関数を使うには別途拡張モジュールが必要で、拡張モジュールが読み込めない環境などでは使うことができません。そんなことで、今回は拡張モジュールを使わずにアクセスできるPEAR::Net_POP3を紹介したいと思います。

インストールは、

pear install Net_POP3

で可能です。では早速使ってみましょう。以下のソースコードを実行してみてく ださい。

<?php
require_once('Net/POP3.php');

$account = array(
  
'host' => 'ホスト名',
  
'port' => '110',
  
'username' => 'ユーザ名',
  
'password' => 'パスワード',
);
$pop3 =& new Net_POP3();
$pop3->connect($account['host'], $account['port']);
$pop3->login($account['username'], $account['password']);
$n_msg $pop3->numMsg();
$header_list $pop3->getParsedHeaders($n_msg);
$body mb_convert_encoding($pop3->getBody($n_msg), "euc-jp""jis");
$body htmlspecialchars($bodyENT_QUOTES"euc-jp");
$pop3->disconnect();

echo 
"<dl>";
echo 
"<dt>差出人</dt><dd>".mb_decode_mimeheader($header_list['From'])."
</dd>"
;
echo 
"<dt>件名</dt><dd>".mb_decode_mimeheader($header_list['Subject'])."
</dd>"
;
echo 
"<dt>本文</dt><dd><pre>".$body."</pre></dd>";
echo 
"</dl>";
?>

「サーバ名」「ユーザ名」「パスワード」はそれぞれ各自の環境にあわせて変更 してください。実行すると、POP3サーバにある一番新しいメールの差出人と件 名、本文が表示されます。

処理の流れを説明すると、まずNet_POP3のインスタンスを作成します。次に connect()メソッドを使用してPOP3サーバに接続します。このとき第一引数には ホスト名、第二引数にはポート番号を指定します。そしてlogin()メソッドを使 用してそのサーバにログインします。このlogin()メソッドには引数が三つあ り、第一引数はユーザ名、第二引数はパスワード、第三引数には認証方法を指定 します。第三引数は省略可能でデフォルトではtrueと指定されており、始めAPOP で不可の場合は通常の方法で認証を試します。ちなみにこの第三引数には 'DIGEST-MD5'、'CRAM-MD5'、'LOGIN'、'PLAIN'、'APOP'、'USER'があります。

接続できたら後はサーバにあるメールを操作することができます。今回のこの ソースコードではnumMsg()メソッドでメールの数を取得し、getParsedHeaders() メソッドを用いて一番新しいメールのヘッダーを取得、getBody()メソッドを用 いて本文を取得してdisconnect()メソッドで接続を切断しています。

この他にもメールに削除マークを付けるdeleteMsg()メソッド、メールボックス にあるメールの一覧を取得するgetListing()メソッドなどがあります。

PHPスクリプトで書かれているため、拡張モジュールを使うIMAP関数と比較する と処理するスピードは遅くなりますが、IMAP関数を使用できない環境でメールを 扱いたい場合など使ってみてはいかがでしょうか。

PEAR::Net_POP3 : http://pear.php.net/package/Net_POP3/



(アシアル 熊谷裕志)


この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。