Mail_mimeDecodeとNet_POP3でメールで更新

仕事で「携帯メールで更新」という要望があったので、このブログをメールで更新ができるようにチャレンジしてみました。
結構難しいかなと思ったんですが、PEARのMail_mimeDecodeNet_POP3を利用すれば案外簡単に出来そうだということがいくつかのサイトでわかったのでやってみました。

参考サイト
PEAR::Net_POP3を使ってPOP3サーバにアクセスしよう
stdinからのメール処理でメール情報を取得する
PEAR で簡易メール受信
PEAR::Net_POP3

上記のサイトを参考にして出来たメール内容を解析するソースがこちら。
一応添付画像もアップロードしてくれるようになっているのですが、僕の携帯が古いので大きなファイルをメールで送信できないんで、あんまり使ってません。

// インスタンス作成
$pop3 = new Net_POP3();

// 接続
$res = $pop3->connect ("domain.name", 110);

// ログイン ( APOP )
$res = $pop3->login( "mail_acount", "password", true);

// 更新件数取得
$numMsg = $pop3->numMsg();

for ($i=1; $i<=$numMsg; $i++) {

    //メールをパースする
    $decoder = new Mail_mimeDecode($pop3->getMsg($i));
    $params['include_bodies'] = true; //ボディを解析する
    $params['decode_bodies'] = true; //ボディをコード変換する
    $params['decode_headers'] = true; //ヘッダをコード変換する
    $structure = $decoder->decode($params);

    //送信者のメールアドレスを抽出
    $mailaddress = $structure->headers['from'];
    $mailaddress = addslashes($mailaddress);
    $mailaddress = str_replace('"','',$mailaddress);

    //署名付きの場合の処理を追加
    preg_match("/<.*>/", $mailaddress, $str);
    if ($str[0]!="") {
        $str = substr($str[0], 1, strlen($str[0])-2);
        $mailaddress = $str;
    }

    // 日付を取得
    $date = date("Y-m-d", strtotime($structure->headers['date']));

    // 件名を取得
    $subject = $structure->headers['subject'];

    switch(strtolower($structure->ctype_primary)){

        // シングルパート(テキストのみ)
        case "text":
            $body = $structure->body;
            break;

        // マルチパート(画像付き)
        case "multipart":
            foreach($structure->parts as $part){
                switch(strtolower($part->ctype_primary)){

                    // テキスト
                    case "text":
                        $body = $part->body;
                        break;

                    // 画像
                    case "image":
                        //画像の拡張子を取得する(小文字に変換
                        $type = strtolower($part->ctype_secondary);

                        //JPEGチェック(GIFやPNG形式の画像チェックなども可
                        if($type != "jpeg" and $type != "jpg"){
                            continue;
                        }

                        //添付内容をファイルに保存
                        $fp = fopen("image/tmp/".uniqid("tmp_diary_").".".$type, "w");
                        $length = strlen($part->body);
                        fwrite($fp, $part->body, $length);
                        fclose($fp);
                        break;
                }
            }
            break;
        default:
            $body = ""; 
            $i++;
    }

    // データを取得したら削除
    $pop3->deleteMsg($i);
}

// 接続解除
$pop3->disconnect();

いやあ、ライブラリにおんぶに抱っこのソースですな。

今日は久しぶりに早く帰れたので、さっさと寝たいと思います。

パーマリンクとRSS配信と簡単なスパム対策!

自分のサイトだ!チャレンジしないでどうするんだ~~~~~!
ということで、パーマリンクとRSS配信と非常に簡単なスパムコメント対策をしました。

参考ページ様一覧
PATH_INFOを使ったRequest-URIからのパラメータの取得
動的だけど静的なページの作成 (mod_rewrite)
動的だけど静的なページの作成 (PATH_INFO)
PEAR::PagerのリンクにPATH_INFOを利用する

ITT-WEB - XML_Serializer
PHP PEAR::XML_SerializerでRSS1.0を生成する方法に関して

消極的なCAPTCHA

いやあ、いろいろ大変でした。
これだけ素晴らしい参考サイトを見つけながら、結局丸一日(12時間ぐらい)かかってしまいました。
自分の馬鹿さ加減に脱帽。

パーマリンク対応しようとしたらページャー使えなくなり、
上手く表示されたと思ったら、ちょっと触ったら真っ白の画面しか出なくなったり、
そうこうしているうちにEthnaのソースを調べだしたりしたり、
とまあ紆余曲折とはこのことでした。

が、こんなに時間を食ってあれですが、EthnaとかPager、XML_Serializerはやっぱ良く考えられてるなと思います。

パーマリンクについては、作成する方法としてmod_rewriteを使う方法は以前やったことがあったんですが、これってシステムが大きくなるにつれてhtaccessファイルを気にしながら改修していかないといけないので、今回はPATH_INFOにしました。
やったことないし。

コメントスパム対策もやったんですけど、効果はどうなんでしょ?
もうきりが無いんでしょうかね、これもいずれ見破られるでしょうし。

まあ、結局えらい時間がかかってしまったのですが、それでもやってかないとスキルアップは望めないですな。
なんとかある程度イメージ通りのことが出来たし、これがどこかで再利用出来たら良いなとおもいます。
というか、自分でサービスやるときには絶対使います、意地で。

もうプログラム触らないでレッツリフレッシュ!
映画でも見ます。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 次のページ ≫ 9 of 9

アーカイブ

2012

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12

2011

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com