ぐぐって調べた情報だとどうにもうまくいかず、試行錯誤したのでメモメモ
環境
imapを使うので、Gmailの設定でimapをONにする
PHP側もphp_imapが必要になるので入ってるか確認、入ってなければインストールします
接続確認をする
~~~
// Connect to gmail
$imapPath = ‘{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX’;
$username = ‘[email protected]’;
$password = ‘hogehoge’;
// try to connect
$inbox = imap_open($imapPath,$username,$password) or die(‘Cannot connect to Gmail:’.imap_last_error());
~~~
エラーが返ってくる場合
こんなエラーメッセージが返ってきます
Cannot connect to Gmail: Can’t open mailbox {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX: invalid remote specification
この時は、メールボックスに、「Google アカウント: ログイン試行をブロックしました」というメールが来るので、メール本文にあるリンクから、安全性の低いアプリのアクセスを許可してあげます
さらに https://accounts.google.com/b/0/DisplayUnlockCaptcha へアクセスし許可するとPHPからアクセスできるようになる
未読のメールのみ取得する
~~~
$uids = imap_search($inbox, ‘UNSEEN’, SE_UID);
~~~
UNSEENの部分を変えればいろいろな条件で絞り込める
PHP: imap_search – Manual
タイトル、本文を取得する
~~~
foreach($uids as $msgno) {
$header = imap_headerinfo($inbox, $msgno);
$subject = mb_convert_encoding(mb_decode_mimeheader($header->subject), ‘utf-8’);
$body = imap_fetchbody($inbox, $msgno, 1, FT_INTERNAL);
$body = trim($body);
$context = mb_convert_encoding(imap_base64($body), ‘UTF-8’, ‘auto’);
~~~
gmailの場合は本文はBASE64エンコードされているようなので、デコードしてあげないといけない
コメント