プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、WEBメールを作ってみる(1)受信メールの一覧を取得して画面に表示する
ちょっくらメール関連の情報を収集していたのですが、
なんか自分でメーラーを作れる気分になってきました。
お金を頂けるような本格的なものは難しいにしても、
PHPとかで、なんちゃってWebメールくらいだったら行けるんじゃね(--?

思い立ったが吉日です。
試しに作ってみることにしました。

まずは基本的な機能、受信メールの一覧を表示するところを作ってみますか。

ふむふむ。

件名をデコードする方法を探したり、メールヘッダのみを取得する方法を探したり、
ちょいちょい情報を入手しながらやってみたところ、なんか知らんけどでけた\(--)/

コードはこんな感じφ(--)

■mail_list.php(UTF-8)
<?php
    //-------------------------------
    //パラメータ定義
    //-------------------------------
    //文字エンコード
    $enc = "UTF-8";
    //POPサーバ
    $mail_host = "mail.example.com";
    //ポート
    $mail_port = 110;
    //ユーザ
    $mail_user = "mailuser";
    //パスワード
    $mail_pwd = "mailpwd";

    //-------------------------------
    //接続&ログイン
    //-------------------------------
    //接続
    $fp = fsockopen($mail_host, $mail_port);

    //ログイン
    $line = fgets($fp, 512);
    fputs($fp, "USER $mail_user\r\n");    // USER名
    $line = fgets($fp, 512);        
    fputs($fp, "PASS $mail_pwd\r\n");    // パスワード
    $line = fgets($fp, 512);
    if(!preg_match("(OK)", $line)){    // ログイン失敗?
        fclose($fp);
        die("ログイン失敗");
    }

    //-------------------------------
    //受信メール件数取得
    //-------------------------------
    fputs($fp, "STAT\r\n");
    $line = fgets($fp, 512);
    print $line . "<br>";    //STAT結果表示

    //STAT結果を変数に展開
    list($status, $cnt, $size) = explode(' ', $line);

    //受信メール件数チェック
    if(intVal($cnt) == 0){
        print "受信メール無し<br><br>";
    }else{
        print "受信メールあり<br><br>";
    }

    //テスト用に件数制限入れておきます(100件を超える場合は100件まで)
    $cnt = ($cnt > 100 ? 100 : $cnt);

    //-------------------------------
    //受信メール一覧表示
    //-------------------------------
    for($i = 1; $i <= $cnt; $i++){
        //メッセージヘッダ取得
        //「TOP」が使えない環境の人は「RETR」で代用してください
        //fputs($fp, "RETR $i\r\n");
        fputs($fp, "TOP $i 0\r\n");

        do{
            $line = fgets($fp, 512);

            //件名を表示する
            if(preg_match("/^Subject/", $line)){
                $subject = mb_decode_mimeheader($line);
                $subject = preg_replace("/^Subject:/", "", $subject);
                print $i . ":" . mb_convert_encoding($subject, $enc, "auto") . "<br>";
            }
        }while (!preg_match("/^\.\r\n/", $line));
    }

    //切断
    fputs($fp, "QUIT\r\n");
    fclose($fp);
?>

実行結果は例えばこんな感じφ(--)

+OK 2 1912
受信メールあり

1: test
2: ああああ

ページングとかエラー処理とか何にもない必要最低限ですが、
取りあえず受信メールの一覧は表示できました。

一覧から選択してメールの詳細を表示するやり方は
PHP、WEBメールを作ってみる(2)受信メールの詳細を取得して画面に表示する
をご覧ください。

よっしゃぁ!\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事