RSS

初出:2006年12月30日 23:54

携帯の料金が常時1万を超えるようになってから早1年。周りと話していると「そりゃ高くねーか?」と言われるし、たしかにそんなに電話をかけることもないから通話代が上がることもない。これは基本プラン+アドオンのサービスを見直そうとWebを睨めっこし、白羽の矢がたったのが、PCサイトビューワー。1年前、今の携帯を買ったときはいろいろと夢が広がってたけど、この1年の携帯サイト対応は目まぐるしく、Google、Mixiなど相次いで携帯対応しちゃうもんだから、PCサイトビューワーでアクセスするのは自宅のWebメールくらいなものになっていた。

それじゃあ自宅のメールサーバも携帯対応してしまえば、PCサイトビューワーはとりあえず必要なくなるってなもんで、いろいろ調べてみたら、ありました。携帯電話用のIMAP対応メールサーバ。

はい、ここから本題。

mobileimap」は、au や i-mode などの携帯電話からIMAPサーバ上のメールを読むことができます……ということで、IMAP派のうちにはピッタリ。Mac OS X Serverが採用しているCyrus IMAP Serverにもしっかり対応しています。mobileimapはHTTPサーバを内包しているということで、Mac OS X Serverで動くかどうか不安でしたが、Rubyを使って開発されているということで、RubyがプレインストールされるMac OS X Serverなら大丈夫かと。

早速こちらからダウンロード。インストールや稼働の方法は、作者の方がUNIX USER誌に寄稿した「mobileimapで携帯メール快適生活」という記事が詳しいです。Rubyは最新バージョンが良かろうと思い、「Rubyインストールガイド - Mac OS X」に従い、DarwinPortsを使ってインストールしました。

さて準備が整ったところで、mobileimapをコンパイル&インストール。おもむろに起動させてみるけど、当然つまずく。いろいろ調べてみると

  • mobileimapはアクセスするユーザ(=メールアカウント)ごとにプロセスを起動させる必要がある
  • .mobileimaprcを設定して、それを読み込ませたほうが良い。
    mobileimap -u [USERNAME] -d --dump-config > ~/.mobileimaprc
    
    で、ユーザディレクトリのルート直下に.mobileimaprcができるので、それを編集する
  • .mobileimaprcの中でsubscriber_idというのがあり、セキュリティアップのために、ここに携帯固有のサブスクライブIDを指定する
  • .mobileimaprcの中のurl_pathはセキュリティ上、指定しておいたほうが良い

ここまでやったら、以下のような起動コマンドを使う。

sudo -u [USERNAME] [mobileimapのフルパス] --mobileimaprc=[.mobileimaprcのフルパス]

これで起動完了。このコマンドはシェルスクリプト化して、サーバが起動したと同時に動くようにしておく。

じゃあ携帯でアクセスしてみると、動きました! …が、日本語のサブジェクトが化けている。MIMEヘッダがうまくデコードされていないみたい。この問題を解決するために、かなり苦しい時間を費やしましたが、結論だけ言うとmobileimapのソース(mobileimap.in)を若干書き換えてリコンパイルしました。書き換えた箇所は、require 'kconv'の後に

module Kconv 

def self.toeuc(s)
::NKF.nkf('-exm0', s)
end 

def self.tosjis(s)
::NKF.nkf('-sxm0', s)
end 

def self.tojis(s)
::NKF.nkf('-jxm0', s)
end 

end

と入れました。このネタ元はこちら

はい、これでMIMEデコードもばっちり。かくして、携帯から自宅メールサーバにアクセスできるようになったわけです。

Googleさんは、この記事をこう解釈しました

記事の詳細ページ

記事の全文を表示します。関連するコメントやトラックバックなどもこちらからどうぞ。

本日のBGM

★印があったら「これは聴いてみてほしい!」という推薦曲です。曲名をクリックするとiTunes Storeへジャンプします。

'; // loop through the songs in the array and get 4 fields that I want to see foreach ($songs as $song) { $output .= '
  • '; if ($song["Rating"] == 100){ $output .= ''.$song["Rating"].''; } $output .= '
    '; $output .= '
    '.$song["Name"].''; $output .= '
    '.$song["Artist"].''; $output .= ''.$song["Album"].''; if ($song["Year"]){ $output .= '('.$song["Year"].')'; } $output .= '
  • '; } // end the table $output .= ''; // show my new table print ($output); } ?>

    Now & Then

    Twitter Updates

      OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET',array('screen_name' =>$search_word,'count' =>'3')); //Jsonデータをオブジェクトに変更 $oObj = json_decode($vRequest); //var_dump(json_decode($vRequest)); //オブジェクトを展開 for($i_tweet = 0; $i_tweet < sizeof($oObj); $i_tweet++){ $screen_name = $oObj[$i_tweet] -> {'screen_name'};//ユーザーID $profile_image_url = $oObj[$i_tweet] -> {'profile_image_url'};//プロフィール画像のURL $text = $oObj[$i_tweet] -> {'text'};//ツイート $date = $oObj[$i_tweet] -> {'created_at'};//時間 $tweet_time=strtotime($date);//Unixタイムスタンプ形式に変換 $now_time=time();//現在の時刻をUnixタイムスタンプで取得 $relative_time=$now_time-$tweet_time;//つぶやかれたのが何秒前か if($relative_time<60){//ss $displayTime = $relative_time.'秒前'; }elseif($relative_time>=60 && $relative_time<(60*60)){//mm $displayTime = floor($relative_time/60).'分前'; }elseif($relative_time>=(60*60) && $relative_time<(60*60*24)){//hh $displayTime = floor($relative_time/(60*60)).'時間前'; }elseif($relative_time>=(60*60*24)){//日付 $displayTime = date('n月j日',$tweet_time); } //表示 echo '
    • ' . $text .'' . $displayTime . '
    • '; } ?>
    follow me on Twitter