ホーム > Linux, 電脳小物 > Delegateで文字変換POPプロクシを作る

Delegateで文字変換POPプロクシを作る

2007 年 9 月 16 日 seri コメントをどうぞ コメント

Nokia E90のメールアプリはWEBブラウザと同様、日本語はUTF-8以外は文字化けしてしまいます。そこで、ブラウザと同様にDelegateをPOPプロクシとして受信するメールの文字コードをUTF-8に変換してしまいます。

インストールや起動方法はHTTPプロクシと同じ。違うのは起動オプションだけです。

変換スクリプトの用意

MIMEデコードと文字コードのUTF-8への変換はdelegateが行ってくれますが、それだけだとメールのヘッダに

Subject: メールの件名

のようにUTF-8の文字列がそのまま入ってしまい、受信した際に件名や送信者の名前などが文字化けしてしまいます。受信した際に文字化けしないようにするために、UTF-8になった文字列を再度MIME形式にエンコードする必要があります。そこで下記のようなスクリプトを作成しておきます。ここではencode.plという名前をつけることにします。

#!/usr/local/bin/perl -w

use Encode;

undef $/;
$_ = <>;

@x = split(/\n/,$_);

$xx = '';
$xxx='';

foreach $xx (@x){
   $xx = encode("MIME-header",decode("utf8",$xx));
   $xxx .= $xx."\r\n";
}

print $xxx;

変数名はちょー適当。もっと綺麗な書き方もできるけど、とりあえず動けばよしということでこんな感じです。

CFIスクリプトの用意

次に、次のようなCFIスクリプトをmy.cfiとか適当な名前で作成します。

#!cfi

Header-Filter: /var/lib/encode.pl

これだけ。encode.plは先ほど作成したperlのスクリプトです。

delegateの起動オプション

最後にdelegateの起動。

/usr/sbin/delegate -P110 SERVER=pop://mail.mopera.net CHARCODE=UTF-8 REMITTABLE=pop PERMIT="pop:*:*" FTOCL=/var/lib/my.cfi

FTOCLで指定するのは先ほど作成したCFIスクリプトです。上記のオプション指定ではポート110へのPOPアクセスをmail.mopera.netに転送します。

メーラの設定

Screenshot0009

こんな感じで、POPサーバにdelegateを動かしているサーバを指定します。ユーザ名/パスワードは本当のPOPサーバのものです。

上記で、文字化けせずメールを受信できるようになりました。

カテゴリー: Linux, 電脳小物 タグ: , , , ,
  1. Hisa
    2008 年 2 月 6 日 04:04 | #1

    はじめまして。いつも参考にさせていただいています。最近、E61iを入手し上記にあるdelegateによるPOPプロクシを作成しようと思って試行錯誤しています。参考にさせていただいたencode.plですが、うまく動かないようです。すいません、perlの知識不足でどこをどう変更すればよいのかわかりません。改行コードあたりかなと踏んでいるのですが…orz もし可能でしたら教えていただけるとうれしいです。telnetでpopして確認してみるとmailheaderが改行されずに出力されているみたいです。printの前にxxx$の所に改行コード\nを適切に入れてやればいいのでしょうか..うーむ。

  2. seri
    2008 年 2 月 6 日 13:32 | #2

    こんにちは。
    改行がうまく行っていないということであれば、
    $xxx .= $xx,”\r\n”;
    の部分が怪しいです。ここを
    $xxx .= $xx,”\n”;
    にしてみるとどうでしょうか?

  3. Hisa
    2008 年 2 月 6 日 19:35 | #3

    seri様

    ご返答ありがとうございます。

    >$xxx .= $xx,”\n”;

    でもダメでした。

    $xxx .= “$xx,\r\n”;

    とした所、なんとなくうまくいったような気がしたの
    ですが、改行毎に , が付いてしまうのと、
    Subject行がうまく整形できていないようです。

    最近、E51も購入し、実はテストはE51にて実施しています。
    一度、E61でテストしなおしてみます。(–;うーん。。

  4. seri
    2008 年 2 月 6 日 21:19 | #4

    ごめんなさい!私の記載ミスです。
    $xxx .= $xx,”\r\n”;

    $xxx .= $xx.”\r\n”;
    が正解です。
    なんかおかしいなぁと思って自分のスクリプトを見たら、こっちはあってました・・・。

  5. Hisa
    2008 年 2 月 7 日 01:25 | #5

    seri様

    正常に稼動いたしました!ありがとうございました。
    原因ですが当方のdelegateの設定に勘違いがあり..orz
    誠にお恥ずかしい限りです。

    有用な情報の提供とseri様のご返答、感謝いたします!
    ありがとうございました~。

    これで+J for s60を待たずに購入したE51で快適な
    日本語環境がある程度整いました。