IMAP関数でメールをやりとりしてみる。

金曜日のGoogleMAPと連係する奴で、メールを入力インターフェースにしたいので、このへんを何とかしてみる。
ただ、サーバーのPHPがSafeModeで動いてるわけでその辺の縛りでうまく行かないかもしれないけど気にしない。

とりあえずIMAPサポートか調べてみる。

サーバーにphpinfo()のPHPを放りこんで表示してみる。

imap
IMAP Support enabled
IMAP c-Client Version 2000
SSL Support enabled
Kerberos Support enabled

おk。
気にしてなかったけどexifも使えるらしい。よしよし。

何はなくともリファレンス

LIV. IMAP,POP3,NNTP関数

CONNECTION, ERRORS & QUOTAS
===========================
imap_timeout
imap_ping
imap_open
imap_reopen
imap_close
imap_check **(fairly useless)
imap_alerts
imap_errors
imap_last_error
imap_get_quota
imap_get_quotaroot
imap_set_quota

MESSAGES - READING
==================
imap_uid
imap_msgno
imap_fetchbody
imap_fetchheader
imap_fetchstructure
imap_fetch_overview
imap_body
imap_rfc822_parse_adrlist
imap_rfc822_parse_headers

これはいい一覧ですね。
っつかPHPのリファレンスって何でこんなに見にくいんだ。
Javadocにしてくれ(無茶

とりあえず接続してみる。

 	$uid = imap_open("{www.qyen.org:110/pop3}","****@qyen.org","*****");
 	if ($uid==false){
 		echo imap_last_error();
 		return ;
 	}
 	
 	$headers = imap_headers($uid);
 	var_dump($headers);	
 	
 	imap_close($uid);

で、CLIで実行。

$ php imaploader.php
PHP Warning:  imap_open(): Couldn't open stream {www.qyen.org:110/pop3} in /var/www/html/php/imagemaps/imaploader.php on line 14
Content-type: text/html
X-Powered-By: PHP/4.3.11

<br />
<b>Warning</b>:  imap_open(): Couldn't open stream {www.qyen.org:110/pop3} in <b>/var/www/html/php/imagemaps/imaploader.php</b> on line <b>14</b><br />
Certificate failure for www.qyen.org: self signed certificate: /C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=localhost.localdomain/emailAddress=root@localhost.localdomainPHP Notice:  (null)(): Certificate failure for www.qyen.org: self signed certificate: /C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=localhost.localdomain/emailAddress=root@localhost.localdomain (errflg=2) in Unknown on line 0
<br />
<b>Notice</b>:  (null)(): Certificate failure for www.qyen.org: self signed certificate: /C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=localhost.localdomain/emailAddress=root@localhost.localdomain (errflg=2) in <b>Unknown</b> on line <b>0</b><br />

自己認証は無効ってか。
つかTLSは有効にしてないんだが('A`)
と、ぐぐってみたら/notlsを指定しれって事らしい。
ConnectionStringを"{www.qyen.org:143/imap/notls}"にしたらOKだった。
何だこの罠は。

メッセージヘッダを取り出す

リファレンス見た感じimap_fetch_overview()みたい。
まずは適当に書いてみる。Sequence(第2パラ)はよくわからんので空で:-)

	$headers = imap_fetch_overview($uid,"");
	var_dump($headers);

実行。

<b>Warning</b>:  Wrong parameter count for imap_fetch_overview() in <b>/var/www/html/php/imagemaps/imaploader.php</b> on line <b>51</b><br />

('A`)

調べて見るとMsgIdの範囲を"startId:lastId"で指定するみたい。
そのIDを引きたいんだが('A`)

とりあえず

	$headers = imap_fetch_overview($uid,"1:3");

としたら読めた。
さて。msgIdをどう取り出すか。