PHPのIMAPを使ってGmailを取得する
GoogleApps導入メモ・第二回、ということで今回はGmailに届いたメールをPHPで受信するためにはどうすればいいかです。受信したメールを解析して結果をデータベースに登録・・・なんてことを業務でやっているので、今のメールサーバからGmailに変わってしまうと、その部分を変更しなければいけません。その調査メモですね。
PHPでメールを受信するにはIMAPというサービスを使います。まあこれはGmailをやっていて、メールソフトからGmailを受信しているひとならば一度は聞いたことがある言葉でしょう。
Gmailを受信するためにメールソフトへのサーバ設定は以下のようにするはずです。
- サーバ名:imap.google.com
- ポート番号:993
- アカウント名:Gmailのアカウント
- パスワード:Gmailのパスワード
これらの設定をPHPでメール受信する関数に設定すれば問題なし!ってなわけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php // 設定 $server = "imap.google.com"; $port = 993; // Gmailポート番号 $account = "hogehoge@hogehoge.com"; // Gmailアカウント $password = "hogehoge"; // パスワード // メールサーバ接続 if (($mbox = imap_open("{".$server.":".$port."/novalidate-cert/imap/ssl}INBOX", $account, $password)) == false) { echo "メールサーバに接続できない、またはアカウント・パスワードが間違ってます。"; return false; } // メールボックスチェック $mboxes = imap_check($mbox); // 未読メール数 $cnt_midoku = $mboxes->Nmsgs; // メール一番目の本文取得 $body = imap_fetchbody($mbox, 1, FT_INTERNAL); // メール出力 echo "<pre>".$body."</pre>"; // メール閉じる imap_close($mbox); ?> |
PHP⇔Gmailのミソはimap_open時のパラメータを /novalidate-cert/imap/ssl にすることです。
- novalidate-cert: SSL証明書をチェックしない
- imap: IMAP接続
- ssl: SSL接続する
当然のことながらGmail側の設定の【メール転送とPOP/IMAP】>IMAPアクセスを有効にする、としていないとメールは受信できません。ただ、IMAPで受信できるメールが「受信トレイ」にあるものだけなのか、ラベルがくっついて未読のものは全部取得できるのか、すでに受信済みのメールでも再受信できてしまうのか、といったツッコんだ調査はまだしていないので、これからかと思います。
ま、Gmail導入でまた一歩前進、というわけですな♪