|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
PHP3の頃にもやったネタですが、PHP4用に焼き直しました。
PHPにはIMAP(Internet Message Access Protocol)用の関数が用意されていますが、PHPマニュアルにもあるようにPOP3・NNTPも使用できます。
IMAP関数を動作させるには、UW IMAPが必要となります。また、PHPのコンパイル時にCクライアントライブラリが必要となります。UW IMAPの最新版(2002/10/14時点でimap-2002.RC7)はftp://ftp.cac.washington.edu/imap/から取得できます。また、デフォルトでSSL対応IMAPをコンパイルするようになっていますので、OpenSSLを別途インストールしておく必要があります。簡単ですが、以下にインストール手順を示しておきます。
$ uncompress imap.tar.Z
$ tar xf imap.tar
$ cd imap-2002.RC7
$ make slx
$ su -
# cp -p c-client/rfc822.h c-client/mail.h c-client/linkage.h /usr/local/include/
# cp -p c-client/c-client.a /usr/local/lib/
make時に「osdep.c:198: ssl.h: No such file or directory 」などSSL関連のエラーが表示される場合は、src/osdep/unix/MakefileのSSL関連のパスを確認してみてください。特に、OpenSSLをrpmでインストールしている場合は、ソースからインストールした場合と比べディレクトリ構造が大幅に異なっていますので、注意が必要です。
[2002/10/15] SSL非対応にする場合は、imapのmakeオプションに「SSLTYPE=none」を追加します。この場合、PHPのconfigure時に「--with-imap-ssl」は不要です。
PHP側ですが、configure時に--with-imap=[c-client.aへのPREFIX]、--with-imap-ssl=[OpenSSLのインストールディレクトリ]」を付け、コンパイルします。
$ ./configure .... --with-imap=/usr/local --with-imap-ssl=/usr
$ make install
phpinfoを表示すると、以下のような感じになります。
以下は、POP3でメールサーバに接続し、メールを表示するサンプルです。
●imap.php
<?php
$mailserver = "mailserver.foo.com";
$mbox = @imap_open("{" . $mailserver . ":110/pop3/notls}INBOX", "username", "passwd");
if ($mbox) {
$mboxes = imap_check($mbox);
$mail_cnt = $mboxes->Nmsgs;
echo "新着メールが $mail_cnt 件あります<BR>";
if ($mail_cnt > 0){
?>
<table border=1>
<tr>
<th>No</th><th>Subject</th><th>Date</th><th>From</th><th>Size</th>
</tr>
<?php
for ($i = 1; $i <= $mail_cnt; $i++){
?>
<th><?php echo $i; ?></th>
<?
$head = imap_header($mbox, $i);
$body = imap_body($mbox, $i, FT_INTERNAL);
?>
<td nowrap>
<a href="mailBody.php?i=<?php echo $i; ?>" target="body">
<?php echo htmlspecialchars(mb_decode_mimeheader($head->subject)); ?>
</a>
</td>
<td nowrap><?php echo $head->date; ?></td>
<td nowrap><?php echo htmlspecialchars($head->fromaddress); ?></td>
<td nowrap><?php echo $head->Size; ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
imap_close($mbox);
} else {
print("Unable to validate username/password.<BR>\n");
}
?>
●mailBody.php
<?php
$i = $_GET["i"];
$mailserver = "mailserver.foo.com";
$mbox = @imap_open("{" . $mailserver . ":110/pop3}INBOX", "username", "passwd");
if ($mbox && $i > 0) {
$head = imap_header($mbox, $i);
$body = imap_body($mbox, $i, FT_INTERNAL);
echo htmlspecialchars(mb_decode_mimeheader($head->subject));
?>
<HR>
<UL>
<LI>Date:<?php echo $head->date; ?>
<LI>From:<?php echo htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); ?></TD>
</UL>
<HR>
<PRE><?php echo htmlspecialchars(
mb_convert_encoding($body, mb_internal_encoding(),
mb_detect_encoding($body))); ?></PRE>
<?php
imap_close($mbox);
} else {
print("Unable to validate username/password or invalid id.<BR>\n");
}
?>
|