2018/02/21 : PMail Server フリー版を別PCにインストールして受信テストをしてみました。(メ−ルサーバは IP で指定[$ret = $pop3->connect("192.168.10.240",110 )] / "USER" または "APOP" )
( PMail Server フリー版で適当なドメインでテストしているので、外部に対して処理はできません。ローカルネットワークのテスト用です )
2018/02/22 : 久しぶりに Yahoo メールで実行して受信できました。Gmail 受信を確認しましたが、とてもいろいろセキュリティの壁を超えるのが面倒なので使用しないほうがいいと思います。(ローカルで実行したら、socket の connect すらできませんでした / インターネットから接続しようとしたら、『あなたのパスワードを使ってアカウントにログインしようとした人がいます。Google でブロックしましたが、状況をご確認ください。』と言われました)
※ 送信は Windows PHP(Pear)で、Gmail(SSL/465)を使ってメールを送る
後述のサンプルコードでは、ヘッダの一部を取得していますが、本文も取得できます。
▼ PMail Server フリー版の結果
削除は telnet を使用して以下のように実行するか、$pop3->deleteMsg(番号)を実行します。
>telnet 192.168.1.16 110
USER lightbox
+OK Password required for lightbox.
PASS password
+OK lightbox has 4 visible message (0 hidden) in 2806 octets.
DELE 1
+OK Message 1 has been deleted.
QUIT
+OK Pop server at PMailServer Version 1.91 フリー版 signing off.
ダウンロード
Net_POP3
ドキュメント
ファイルとしては、Net_Socket も必要で、Pear.php が必要です。また、 OpenSSL を有効にして、error_reporting に STRICT エラー用の設定を行う必要があるかもしれません
▼ Net フォルダ内
関連する記事
Windows PHP(Pear)で、Gmail(SSL/465)を使ってメールを送る
▼ テストは Yahoo メールで行いました。
<?php
header( "Content-Type: text/plain; charset=utf-8" );
header( "Expires: Thu, 19 Nov 1981 08:52:00 GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
header( "Pragma: no-cache" );
// PEAR( Pear.php が必要 )
require_once('Net/POP3.php');
// 漢字変換用( 内部コード設定 );
mb_language( "ja" );
mb_internal_encoding("utf-8");
// インスタンス作成
$pop3 = new Net_POP3();
// 接続( Yahoo! メールの場合 )
$ret = $pop3->connect ("ssl://pop.mail.yahoo.co.jp", 995 );
if ( $ret === true ) {
print "接続OK\n";
}
else {
print "接続できませんでした";
exit();
}
// ログイン
// Yahoo では、アカウントは @ の前の文字列です
// PMail Server(フリー版) で第三引数に "USER" または "APOP" を指定しています
$ret = $pop3->login( "アカウント", "パスワード", true );
if ( $ret === true ) {
print "ログインOK\n";
}
else {
print "ログインできませんでした";
exit();
}
// メッセージの総件数
$numMsg = $pop3->numMsg();
print "メッセージ件数:$numMsg\n";
// メッセージの総サイズ
$ret = $pop3->getSize();
print "メールボックスのサイズ:$ret\n";
// 欲しい件数
$request_cnt = 10;
// メッセージの一覧
for ( $i = $numMsg; $i > $numMsg - $request_cnt ; $i-- ) {
if ( $i < 1 ) {
break;
}
print "----------------------------------------------\n";
$target = $pop3->getListing($i);
// ヘッダ情報の表示
$ret2 = $pop3->getParsedHeaders( $i );
$target[] = array();
foreach( $ret2 as $key => $value ) {
if ( $key == "Subject" ) {
$target[$key] = mb_decode_mimeheader($value);
}
if ( $key == "From" ) {
$target[$key] = mb_decode_mimeheader($value);
}
if ( $key == "To" ) {
$target[$key] = mb_decode_mimeheader($value);
}
}
print "番号:" . $i ."\n";
print "件名:" . $target['Subject'] ."\n";
print "差出人:" . $target['From'] ."\n";
print "宛先:" . $target['To'] ."\n";
print "サイズ:" . $target['size'] ."\n";
// print_r($target);
// # 本文の表示
// $ret2 = $pop3->getBody( $i );
// print $ret2 . "\n";
}
// 接続解除
$pop3->disconnect();
?>
ここで使っていない機能
Net_POP3 の冒頭で、@include_once 'Auth/SASL.php'; を実行していますがここでは使用していません。
/**
* Constructor. Sets up the object variables, and instantiates
* the socket object.
*
*/
function Net_POP3()
{
$this->_timestamp = ''; // Used for APOP
$this->_maildrop = array();
$this->_timeout = 3;
$this->_state = NET_POP3_STATE_DISCONNECTED;
$this->_socket = new Net_Socket();
/*
* Include the Auth_SASL package. If the package is not available,
* we disable the authentication methods that depend upon it.
*/
@include_once 'Auth/SASL.php';
if (!class_exists('Auth_SASL')) {
if ($this->_debug){
echo "AUTH_SASL NOT PRESENT!\n";
}
foreach ($this->supportedSASLAuthMethods as $SASLMethod) {
$pos = array_search($SASLMethod, $this->supportedAuthMethods);
if ($this->_debug) {
echo "DISABLING METHOD $SASLMethod\n";
}
unset($this->supportedAuthMethods[$pos]);
}
}
}