CALENDAR
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   
<< July 2019 >>
ARCHIVES
CATEGORIES
RECOMMEND
RECOMMEND
RECOMMEND
WiiRemoteプログラミング
WiiRemoteプログラミング (JUGEMレビュー »)
白井 暁彦,小坂 崇之,くるくる研究室,木村 秀敬
RECOMMEND
RECOMMEND
RECOMMEND
MOBILE
qrcode
<< こんどはicalのほうから考えてみる (※メモ書きとして) | main | なんとなく 動く。。(※メモ書きとして) >>
ひとまず、ここまで。。。(※メモ書きとして)
 特定の環境なのだが、とりあえず、メールを読んで、中身を書き出すことはできるようになった。あとは、icsデータに合わせて、csvデータを加工するだけ。
 これは、phpでは非常に簡単なので、あっと言う間にできる。icsデータのヘッダとして多少付け加えなければならない。

caldata1.phpとして次のデータを、(実際は1行)

<?php

$caldata1 = "BEGIN:VCALENDAR"."¥r¥n"."METHOD:PUBLISH"."¥r¥n"."VERSION:2.0"."¥r¥n"."X-WR-CALNAME:カレンダー"."¥r¥n"."PRODID:-//Apple Inc.//iCal 4.0.4//EN"."¥r¥n"."X-APPLE-CALENDAR-COLOR:#0252D4"."¥r¥n".
"X-WR-TIMEZONE:Japan"."¥r¥n"."CALSCALE:GREGORIAN"."¥r¥n".
"BEGIN:VTIMEZONE"."¥r¥n"."TZID:Japan"."¥r¥n"."BEGIN:DAYLIGHT"."¥r¥n".
"TZOFFSETFROM:+0900"."¥r¥n"."RRULE:FREQ=YEARLY;
UNTIL=19510505T170000Z;BYMONTH=5;BYDAY=1SU".
"¥r¥n"."DTSTART:19500507T020000"."¥r¥n"."TZNAME:GMT+09:00".
"¥r¥n"."TZOFFSETTO:+1000"."¥r¥n"."END:DAYLIGHT"."¥r¥n".
"BEGIN:STANDARD"."¥r¥n"."TZOFFSETFROM:+1000"."¥r¥n".
"DTSTART:19510908T020000"."¥r¥n"."TZNAME:GMT+09:00".
"¥r¥n"."TZOFFSETTO:+0900"."¥r¥n"."END:STANDARD"."¥r¥n".
"END:VTIMEZONE"

?>

caldata2.phpとして

<?php

$caldata2 = "END:VCALENDAR"."¥r¥n"

?>

を作っておく。

calpop.phpは以下のようになった。
 <?php
/*
calpop.php
メールサーバーに接続し、メールを読む。
読んだメールは、テーブルで表示。
サーバーへの接続データはcalpopconfig.phpにて読み込み。
2011.5.21  h2caster.net
*/

require_once("calpopconfig.php");


    //popサーバーに接続
    $fp = fsockopen($host, $port);
    // ログイン
    $resp = fgets($fp, 512);
    // USER
    fputs($fp, "USER $user¥r¥n");
    $resp = fgets($fp, 512);
    // パスワード    
    fputs($fp, "PASS $pass¥r¥n");
    $resp = fgets($fp, 512);
    // ログイン失敗のとき
    if( !eregi("OK", $resp) )
        {
        fclose($fp);
        echo " popサーバーにログインできませんでした。";
        return false;
        }
    echo "メールサーバーにログインしました。";


    // メールボックスのデータを確認する
    fputs($fp, "STAT¥r¥n");
    $resp = fgets($fp, 512);
    list($stat, $no, $size) = explode(' ', $resp);
    if( 0+$no == 0 )    // メールデータが0件
        {
        fclose($fp);
        echo "メールデータが0件です。";
        return false;
        }
     echo "メールは"."$no"."件です。";


    // 順に受信して、配列に納める ・・配列変数 $mssg[$i]
    for($i=1 ; $i<=$no ; $i++)
    {
        fputs($fp, "RETR $i¥r¥n");
        $resp = fgets($fp);


        $mssg[$i] = "";
        while( !eregi("^¥.¥r?¥n", $resp) )
        {
            $resp = fgets($fp, 512);
            $mssg[$i] .= $resp;
        }

        //fputs($fp, "DELE $id¥r¥n");
        //$resp = fgets($fp, 512);
    }

    fputs($fp, "QUIT¥r¥n");
    fclose($fp);

echo "<table border=1 align=center>";
echo "<tr>";
echo "<th>メール番号</th>";
echo "<th>日付</th>";
echo "<th>タイトル</th>";
echo "<th>送信元</th>";
echo "<th>本文</th>";
echo "<th>添付ファイル名</th>";
echo "<th>添付ファイル内容</th>";
echo "</tr>";


//一つ一つのメッセージに対する処理ループ
 for($i =1 ; $i<=$no ; $i++)
        {
        echo "<tr>";
        
        echo "<th>".$i,"</th>";
        
        //空行をみつけてヘッダと本文を分ける
         list( $head[$i], $body[$i]) = split("¥r¥n¥r¥n", $mssg[$i], 2);
         $head[$i] = ereg_replace("¥r¥n[¥t ]+", " ", $head[$i]);

         //日付の抽出。変数$dateは配列。22文字分だけにする。
         //なお、$date[1]だけ使っている。
         eregI("Date:[ ¥t]*([^¥r¥n]+)", $head[$i], $date);
         $maildate[$i] = Substr($date[1], 0, 22);
         echo "<th>".$maildate[$i]."</th>";
        
         //タイトルを取り出す。変数$mailsub[$i]
         eregI("¥nSubject:[ ¥t]*([^¥r¥n]+)", $head[$i], $subj);
         $mailsub[$i] = $subj[1];
         //とりあえず、Base64デコード。さらにmb_convert_encoding()で日本語に。
        eregI("(.*)=¥?iso-2022-jp¥?B¥?([^¥?]+)¥?=(.*)", $mailsub[$i], $sub);
        $mailsub[$i] = $sub[1].Base64_Decode($sub[2]).$sub[3];
        $mailsub[$i] = mb_convert_encoding($mailsub[$i],"SJIS","JIS");
        echo "<th>".$mailsub[$i]."</th>";
        
        //送信元を取り出す。ここではFrom:を使う。変数$mailsender[$i]
        eregI("From:[ ¥t]*([^¥r¥n]+)", $head[$i], $sender);
        //メールアドレスであるか確認
        eregI("[-!#$%&¥'*+¥¥./0-9A-Z^_`a-z{|}~]+@[-!#$%&¥'*+¥¥/0-9=?A-Z^_`a-z{|}~]+¥.[-!#$%&¥'*+¥¥./0-9=?A-Z^_`a-z{|}~]+", $sender[1], $sender2);
        $mailsender[$i] = $sender2[0];
        echo "<th>".$mailsender[$i]."</th>";

        //本文データと、添付ファイルデータを取り出す。
        //本文はJISからSJIS変換。添付ファイルはBase64デコード、その後mb_convert_encoding()で日本語に。
        if (EregI("¥nContent-type:.*multipart/", $head[$i]))
            {
            EregI('boundary="([^"]+)"', $head[$i], $bound);
            $part = Split("¥r¥n--".$bound[1], $body[$i]);
            $hon = Split("Content-Transfer-Encoding: 7bit", $part[1]);
            $honbun[$i] = mb_convert_encoding($hon[1],"SJIS","JIS");
            
            //本文データ
            echo "<th>".$honbun[$i]."</th>";
            EregI('filename="([^"]+)"', $part[2], $file);
            $filename = $file[1];
            
            //添付ファイル名
            echo "<th>".$filename."</th>";
            $att = Split("filename="."¥".*¥"", $part[2]);
            $attch[$i] = Base64_Decode($att[1]);
            
            
            echo "<th>";
            //ここから添付ファイルデータを解析 $attch[$i]の中身を見る。
            //まず1行ずつ切り分け、配列に入れる。$data[0]は項目行。
            $data = explode  ( "¥r¥n" , $attch[$i] );
            
            //iCalヘッダの読み込み
            $caldata = "";
            $caldata1 = "";
            $caldata2 = "";
            require_once("caldata1.php");
            require_once("caldata2.php");
            
            //切り分けた1行ごとの処理 1行目からm行目まで。
            for( $m=1; $m<=count($data); $m++)
                    {
                    $item = explode  ( "," , $data[$m] );
                    
                    //$item[0]開始日  $item[1]開始時間  $item[2]終了日  $item[3]終了時間
                    //$item[4]項目内容  $item[5]場所  $item[6]分類
                    //csvをicsデータに変換する。
                    
                    $uid = rand();
                    
                    $dtstart = str_replace("/", "", $item[0]) . "T" . str_replace(":", "", $item[1]) . "00";
                    $dtend   = str_replace("/", "", $item[2]) . "T" . str_replace(":", "", $item[3]) . "00";
                    
                    $caldata1 .="¥r¥n";
                    $caldata1 .="BEGIN:VEVENT"."¥r¥n"."UID:".$uid."¥r¥n";
                    $caldata1.="DTEND;TZID=Japan:".$dtend."¥r¥n";
                    $caldata1 .="SUMMARY:".$item[4]."¥r¥n";
                    $caldata1 .="DTSTART;TZID=Japan:".$dtstart."¥r¥n";
                    $caldata1 .="END:VEVENT"."¥r¥n";
                    
                    }
                    $caldata = $caldata1. $caldata2;
                    echo $caldata;
            echo "</th>";

            echo "</tr>";
            }
            
        //添付ファイルがない場合の処理をここに記述
        //ここまで
        
        
        }
//一つ一つのメッセージに対する処理ループ ここまで
echo "</table>";



?>


環境さえ合えば、csvデータから、icsデータに変換されている。
でも、これをどうやって、iphone に読ませるか。
次の課題はここですか。。。。

あ、とりあえず、UTF-8でないと、読んでくれないらしい。。。。

| php scripting | 20:39 | comments(0) | trackbacks(0) | pookmark |
コメント
コメントする









この記事のトラックバックURL
http://blog.h2caster.net/trackback/1068711
トラックバック