PHPでIMAPを使ってメールを取得する方法

こんにちは!ぐちです。

IMAP

IMAPって聞いたことありますか?スマホなどでメーラーにアカウントを設定したことのある方であれば見たことはあるかもしれません。POP3というのもあります。簡単にいうとメールサーバーからメールを取得するプロトコルの一種です。

メールサーバから電子メールを受信するためのプロトコルの一種で、メールサーバ上でメッセージを保存・管理できるプロトコルのことである。 2007年1月現在の最新バージョンは2003年に発表されたIMAP4のリビジョン1であり、通常IMAPといえばIMAP4を指す。

PHPで使うには

imap_open()という関数が準備されているのでこれを使うことでメールを取得することができます。

プログラムも非常に簡単なので下記を参考にしてみてください。※間違いがあるかもしれませんので見つけられた方はコメントください。笑

// 日本語でUTF-8に設定する
mb_language('Japanese');
mb_internal_encoding('utf-8');

// メールサーバへの接続情報を定義
$host = 'imap.example.com';  // ホスト
$port = 993;                 // ポート番号
$user = 'hoge@example.com';  // ユーザー名
$password = 'password';      // パスワード

// メールボックスの受信トレイを開く
$mbox = imap_open("{{$host}:{$port}/imap/ssl}INBOX", $user, $password) or exit("Connection Error");

// 開いたメールボックスの情報を取得
$boxObj = imap_check($mbox);
// 指定メールボックス内の全てのメール情報を取得
$overviewList = imap_fetch_overview($mbox, "1:{$boxObj->Nmsgs}", 0);
$mailList = array();

// メール全件
foreach ($overviewList as $overview) {
    // メールのFromやTo、件名などを取得
}

// 閉じる
imap_close($mbox);

MIMEヘッダ

メールにはMIMEヘッダと呼ばれる宛先や送信元などの情報を含んだヘッダ部分が存在します。それらは明示的にエンコードしないと読めないので下記のように共通関数を定義しエンコーディングを変換します。

// FromやTo、件名などMIMEヘッダをエンコードします。
function convertMailStr($str) {
    return mb_convert_encoding(mb_decode_mimeheader($str), 'utf-8');
}