ショコラ
PHP で POP3 にアクセスするには?
昔作ったプログラムでは PEAR の POP3 を使っていましたが、
そのままでは PHP8.1 では使えませんでした。
POP3.php に少し修正を加えてメールを受信してみます。
もっさん先輩
手順
- PHPコンテナを起動します。
docker run -it php bash
- pear の Net_POP3 をインストールします。
pear install Net_POP3
- 修正するファイルのバックアップをとります。
cp /usr/local/lib/php/Net/POP3.php /usr/local/lib/php/Net/POP3.php.bak
- 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
- テストプログラムを作ってみます。
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
- POP3 にアクセスしてみます。
php pop3.php
以上