PHPのIMAPを使ってGmailを取得する


PHP LogoGoogleApps導入メモ・第二回、ということで今回は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導入でまた一歩前進、というわけですな♪