PHPからGmailのメールを取得してゴニョゴニョする

NO IMAGE

ぐぐって調べた情報だとどうにもうまくいかず、試行錯誤したのでメモメモ

環境

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エンコードされているようなので、デコードしてあげないといけない

参考サイト
imap関数を使ってGmailのメールを取得する – ONILOQ NOTE