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 + 通信の最新記事】
- fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信
- PHP の cURL でファイルアップロード
- PHP : WEB でもコマンドラインでも HTTP でファイルをダウンロードする 『fget.php』
- PHP : cURL : Google Photo API の albums.list メソッドを使用して アルバム一覧データを取得する
- PHP + cURL で Google Photo API の アクセストークンを取得する
- PHP : cURL で FTP + SSL ダウンロード
- PHP の imap 関数で( Windows ローカル )、Yahoo メールのメールをさくらインターネットのメールへコピーする
- PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する
- PHP : IMAP 関数 でまずメールのヘッダ部分を整理してログに出力する / ※ JSON 出力を追加
- ファイルを一つアップロード : FORM の target を IFRAME にして、PHP に JavaScript を書き出させて元のページにメッセージを表示させる
- PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法
- FormData を使用して $.ajax で送信すると、ファイルのアップロードとメール送信(ファイル添付)を一度に行えます
- ファイルのアップロードからそれを添付してメールを送るテンプレート(スケルトン)
- PHP : mb_send_mail を使用した自家用メール送信 API
- PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信
- PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数
- 連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス )
- PHP : リモートのファイルサイズを取得する
- ローカルの PHP を使ってコマンドプロンプトより簡単にバイナリファイルをアップロードする
- PHP の cURL で ftp サーバーにファイルをアップロードする(SSLなし)