php-imapでpop3接続、受信トレイを読み取り
2024-01-08 記載
概要 : php-imapでメールサーバから受信トレイのメールを読みだす。
Keyword : php-imap, php, pop3, アプリパスワード, メール受信
phpでメールの読み出しなどをする場合、php-imapを使うのが一般的なようです。php-imapは
composer require php-imap/php-imap
でライブラリとして持つこともできますが、一般にはphp.iniで
extension=imap
としていればimap関数が直にコーディングできて、いともあっさりメールが読めたりします。
cloudfreeをはじめ、たいていのレンタルサーバは imap enabled です。
ただしGMailなら二段階認証を設定してアプリパスワードをあらかじめ取得しておく必要があります。そのほかのメールアカウントならメールサーバにUser/Passwordの形で接続できるアカウントならほぼ大丈夫だと思います。
Mailの読み書きとCronを組み合わせれば、メールでサーバを自動更新させたり、メールを判別して自動応答させたり、サーバで情報を集めて返信するエージェント処理など、いろんな活用ができて便利です。
mb_language('Japanese');
mb_internal_encoding('UTF-8');
date_default_timezone_set("Asia/Tokyo");
setlocale(LC_ALL, 'ja_JP.UTF-8');
// 接続
$connection = imap_open(
'{pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX',
'<マイアカウント>@gmail.com', '<アプリパスワード>');
if (!$connection) {
die('Connection failed: ' . imap_last_error());
}
// 受信トレイメール取得
$messageCount = imap_num_msg($connection);
echo "Total messages: $messageCount<br>\n";
// メール表示
$arrMessages = imap_fetch_overview($connection, '1:*', 0);
foreach ($arrMessages as $message) {
$decodedSubject = mb_decode_mimeheader($message->subject);
$sFrom = mb_decode_mimeheader($message->from);
$sSend = Date('送信日時 Y/m/d h:i:s', strtotime($message->date));
echo "-------------------------------------------<br>\n";
echo $decodedSubject."<br>\n";
echo $sFrom."<br>\n";
echo $sSend."<br>\n";
}
// 接続終了
imap_close($connection);
yahooメールを取得する場合などは$connectionの1行を変えるだけでOK。
$connection = imap_open(
'{pop.mail.yahoo.co.jp:995/pop3/ssl/novalidate-cert}INBOX',
'<マイアカウント>@yahoo.co.jp', '<パスワード>');
imap_ という関数ですが、ポート995で接続するのはpop3です。