Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

openssl拡張でimaps


ぢょ〜@よくきたなです.
PHPSSL stream に対応していたら POP3 over SSL はできます.
下記簡易的に書きます.

$ php -r '
require_once "Net/POP3.php";
$obj = new Net_POP3;
var_dump( $obj->connect( "ssl://mail.example.com", 995));
var_dump( $obj->login( "user", "password"));
var_dump( $obj->numMsg());'
bool(true)
bool(true)
int(501)

popsができるんならimapsということでやってみた。環境は--with-openssl付きでbuildしたPHP5.1.4。

<pre>
<?php
$sock = fsockopen("tls://imaps-server", 993, $errno, $errstr, 15);
echo fread($sock,1024);

$seq = 1;
fwrite($sock, $seq++ . " capability\r\n");
echo fread($sock,1024);
fwrite($sock, $seq++ . " LOGIN user password\r\n");
echo fread($sock,1024);
fwrite($sock, $seq++ . " namespace\r\n");
echo fread($sock,1024);
fwrite($sock, $seq++ . " examine inbox\r\n");
echo fread($sock,1024);
fwrite($sock, $seq++ . " logout\r\n");
echo fread($sock,1024);
?>
</pre>

な感じで、結果は

* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS AUTH=PLAIN AUTH=LOGIN] 
  imaps-server IMAP4rev1 2001.315rh at Thu, 10 Aug 2006 23:10:28
  +0900 (JST)
* CAPABILITY IMAP4REV1 IDLE NAMESPACE MAILBOX-REFERRALS SCAN SORT
  THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND LOGIN-REFERRALS
  AUTH=PLAIN AUTH=LOGIN
1 OK CAPABILITY completed
2 OK [CAPABILITY IMAP4REV1 IDLE NAMESPACE MAILBOX-REFERRALS SCAN
  SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND]
  User user authenticated
* NAMESPACE (("" "/")("#mhinbox" NIL)("#mh/" "/")) (("~" "/"))
  (("#shared/" "/")("#ftp/" "/")("#news." ".")("#public/" "/"))
3 OK NAMESPACE completed
* 8 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1131553471] UID validity status
* OK [UIDNEXT 8858] Predicted next UID
* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS ()] Permanent flags
* OK [UNSEEN 8] first unseen message in /var/spool/mail/user
4 OK [READ-ONLY] EXAMINE completed
* BYE imaps-server IMAP4rev1 server terminating connection
5 OK LOGOUT completed

となった。まあ、openssl使ってIMAPコマンド叩いてるのと同じだわな。