サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

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です。

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog