PHP で POP3 にアクセスするには?

ショコラ
ショコラ

PHP で POP3 にアクセスするには?

昔作ったプログラムでは PEAR の POP3 を使っていましたが、
そのままでは PHP8.1 では使えませんでした。
POP3.php に少し修正を加えてメールを受信してみます。

もっさん先輩
もっさん先輩

手順

  1. PHPコンテナを起動します。
docker run -it php bash
  1. pear の Net_POP3 をインストールします。
pear install Net_POP3
  1. 修正するファイルのバックアップをとります。
cp /usr/local/lib/php/Net/POP3.php /usr/local/lib/php/Net/POP3.php.bak
  1. PHP8 でも使えるように POP3.php を修正します。
sed\
 -e "s/define('NET_POP3_STATE_DISCONNECTED',  1, true);/define('NET_POP3_STATE_DISCONNECTED',  1);/"\
 -e "s/define('NET_POP3_STATE_AUTHORISATION', 2, true);/define('NET_POP3_STATE_AUTHORISATION', 2);/"\
 -e "s/define('NET_POP3_STATE_TRANSACTION',   4, true);/define('NET_POP3_STATE_TRANSACTION',   4);/"\
 -e "s/function Net_POP3()/function __construct()/"\
 -i /usr/local/lib/php/Net/POP3.php

パッチファイルを用意しました。

curl -LOk https://answorz.com/4720/POP3.php.patch
patch /usr/local/lib/php/Net/POP3.php POP3.php.patch
  1. テストプログラムを作ってみます。
cat <<'EOF' > pop3.php
<?php
require_once("Net/POP3.php");
$host = '{ホスト}';
$port = '110';
$username = '{ユーザー名}';
$password = '{パスワード}';
$pop3 = new Net_POP3();
if ($pop3->connect($host,$port) && $pop3->login($username,$password)) {
  $max = $pop3->numMsg();
  for ($n=1; $n<=$max; $n++) {
    $header = $pop3->getParsedHeaders($n);
    $body = $pop3->getBody($n);
    var_dump($header,$body);
  }
}
EOF
  1. POP3 にアクセスしてみます。
php pop3.php

以上

Scroll to Top