SQLの窓

2018年02月22日


Pear の Net_POP3 で、SSL(995) を使って簡単にメール受信

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]);
            }
        }
    }



【PHP + 通信の最新記事】
posted by lightbox at 2018-02-22 23:43 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり