Under-Construction

▲Zaurus Top | ↑Up(設定・システム) | ←Prev(セルフ開発環境) | →Next(携帯電話でインターネット接続(失敗))


ローカルメール環境

(2006/10/07)

次のようなメール環境を考える。

サスペンドしているときには、メールLEDも消えてしまうというのは、ハードウエ ア上の仕様だそうです。(Linuxザウルス開発メモ/独自ビルドカーネル)。いつでもメールLEDで着信を確認したい方は、メールがあるときにサスペンドしてしまわないように工夫しましょう。

作りたいメール環境

普通、zaurus 持ち歩いていたら、これぐらいやりたいだろう!って思うけど、なぜか SL Zaurus はできない。MI Zaurus はできるみたいだけどね。(くやしい)

というわけで、手間暇かけて環境を構築する。

目次

用意するもの

perl
http://zaurus.frontgarden.net/perl.html
2003/07/13 の最新は、perl-base_5.6.1-7_arm.ipk。Nomail で使う。
ruby
http://sourceforge.jp/projects/zaurus-ja/files/
ruby/Qte の要請により、1.6.x 以上
ruby/Qte
http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=Ruby%2FQte
2003/07/13 の最新は ruby-qte_0.4_arm.ipk。CronInet で設定画面の GUI で使う。
CronInet
http://sun.dhis.portside.net/~sakira/wiki/index.cgi?cmd=view;name=SL-C700%3ACronInet
Fetchmail
http://sourceforge.jp/projects/zaurus-ja/files/
Procmail
http://sourceforge.jp/projects/zaurus-ja/files/
Nomail
ipk はhttp://kimux.org/liza/arc/
作者のページはhttp://homepage1.nifty.com/negi_linux/nomail/
ダイアルアップ環境で働く SMTP サーバ。sendmail 互換。要 perl
qpopper
拙作の ipk はhttp://www.bf.wakwak.com/~nkon/homepc/zaurus/mysoft/qpopper_4.0.5_arm.ipk
一般的な POP server
courier-imapd
拙作の ipk はhttp://www.bf.wakwak.com/~nkon/homepc/zaurus/mysoft/courier-imapd_2.0.0_arm.ipk
Maildir 専用の、速度に定評がある IMAP server
mutt
ipk はhttp://kimux.org/liza/mutt.shtml
日本語マニュアルは、http://www.emaillab.org/mutt/
ターミナル上で動くUnix 伝統のメールソフト。多くの拡張が重ねられ今に至る(Mutt は雑種犬、軽蔑的に「まぬけ」)。けっこう最新な機能にも対応していたりする。
MaidMail
http://sun.dhis.portside.net/~sakira/wiki/index.cgi?cmd=view;name=LinuxZaurus%3AMaidMail
ruby/Qte で動くメールソフト。fetchmail、procmail, nomail と組み合わせることが前提で、そっちでできることはそっちにまかせてある。標準のアイコン長押しでは高速起動ができないが、/home/QtPalmtop/apps/???/maidmail.desktop に CanFastload=1 と書いておくと、高速起動のチェックボックスが出る。チェックすれば、高速起動に対応可能。

標準のメールソフト(qtmail)は史上最ダサといってもいいぐらい使えない。これでもSL-C700の時からは改善されているみたいだ。

Perl, ruby のインストール

いずれも、GUI で *.ipk をインストールするだけ。

fetchmail

POP サーバからメールを取得して(POP でも APOP でも可)、ローカル配信する、Unix 定番ツール。ローカル配信は、25番ポートの MTA でも、procmail などの MDA でもOK。ここでは、procmail を通じて、~/Mail/ に MH 形式で配信することにする。

インストールは、.ipk を GUI でインストール。/opt/QtPalmtop/ 以下に入るので、好みによって、本体メモリ、または、SDカードにインストール。

設定ファイルとして ~/.fetchmailrc にいろいろと設定を記述する(~/ は /home/zaurus/ のこと)。POPサーバのパスワードがプレーンテキストで記述されるので、パーミッションは 0600 でなければならない(でないと fetchmail はエラー終了する)。設定ファイルの書式は、半分英語風で文法の自由度が高く、どうにでも書けるのでわかりにくい。だいたい次のような感じ。詳しく知りたい人は、unix 版の fetchmail で man ページを参照のこと。

defaults
    limit 2000000
    mda "/opt/QtPalmtop/bin/procmail"
    no mimedecode
    no rewrite

poll your.pop3.server
    protocol POP3
    user username
    password password
#    keep

procmail

ローカル(ここでは zaurus)のメールボックスにメールを配信する。振り分け機能もついている。設定ファイルの .procmailrc の書式が悪魔的に難解。奥義のコピペで乗りきるしかない。Unix 定番ツールだが、乗り換え先が無いため定番の地位にいるにすぎない。(→ procmail の設定を googleに聞く)

procmail が配信するメールボックスの形式をどうしよう。上で挙げたメールソフトたち、さらに将来、IMAP も試してみたい。IMAP server は uw-imapd は遅かった。速度に定評のある、Courier にしたい。それぞれ、使えるメールボックスの種類を考える。あんまりまともに調べてないので、間違ってるかも。ごめん。

メールソフトmbox
(/var/spool/mail/)
MHMaildirPOPIMAP4その他
qtmail×××(実質)×保存は独自形式で ~/Application/dtm/ に。
mutt
MaidMail×××procmail で MH か Maildir に配信する必要がある。
Wanderlust××母艦上では、MH スプールで Wanderlust を使っている。
qpopper××--
Courier IMAP----
Courier ipop3d----
uw-imapd--独自形式の mbx だと速度が出るみたい。母艦の Vine-Linux はコレ。

今回は、振り分け機能は使わない。~/Maildir/ に Maildir 形式で配信するだけとする。よって、~/.procmailrc は単純である。

VERBOSE=off
LOGFILE=$HOME/procmail.log
DEFAULT=$HOME/Maildir/          #この行をコメントアウトすると /var/mail/ に mbox 形式で配信する。

Nomail

ダイアルアップ環境で、プロバイダの SMTP サーバにつながらない時でもメールを送れるようにする、ローカルで動く SMTP サーバ。perl で書かれている。nomail は、inetd 経由で SMTP ポートを監視する。/usr/sbin/sendmail コマンドの代用にもなる。nomail が受けたメールは、ローカル配送可能ならば、/etc/nomail.conf で local_mda に設定したローカルメーラ(default=procmail)で配送する。リモート配送の場合は、/var/nomail/ にキューしておく。ダイアルアップしたときに、nosend が /var/nomail/ にキューされたメールを、プロバイダの SMTP サーバに送信する。

  1. とりあえず、ipkg をインストールする。ipkはオリジナルの状態よりもいじってあるので、 パッケージ化したときのドキュメントを読む。/usr/ 以下に入るので、本体メモリにしか入らない。
  2. nomail の ipk に設定されている /opt/QtPalmtop/bin/procmail -> /usr/bin/procmail が気に入らないので symlink を削除(アンインストール時に symlink が削除されない)。かわりに、/etc/nomail.conf で local_mda を /opt/QtPalmtop/bin/procmail に指定。
  3. /etc/nomail.conf に設定する。
    # インターネットにメールを出す時のメールアドレス(必須)
    internetaddr    you@example.com
    
    # プロバイダの SMTP ホスト(必須)
    smtphost        mail.example.com
    
    # インターネットにメールを出す時に Message-Id: を削除する
    invalid_msgid   yes
    
    # ローカルメーラの指定(詳しい方向け)
    local_mda       /opt/QtPalmtop/bin/procmail -d
    
  4. /etc/inetd.conf に登録する。
    smtp    stream  tcp     nowait  root    /usr/sbin/tcpd   nomail
    
  5. いちおう、TCP wrapper で SMTP ポートのアクセス制限をする。
  6. 自分にメールを送ってみる。~/.procmailrc の通りに届いていれば OK。
    bash-2.05$ /usr/sbin/nomail zaurus@localhost
    This is a test mail.
    This is a test mail.
    This is a test mail.
    .                 {行頭 . は EOF で本文終了→送信}
    
  7. /etc/hosts.allow で ALL:127.0.0.1 など、localhost からのアクセスを許可する設定を確認して、telnet localhost 25 でテストする。
    $ telnet localhost 25
    Trying 127.0.0.1...
    Connected to zaurus.
    Escape character is '^]'.
    220 localhost.localdomain SMTP Nomail 0.4.10 (Caravanserai)
    HELO foo@baa.com
    250 localhost.localdomain Hello foo, pleased to meet you
    QUIT
    221 localhost.localdomain closing connection
    Connection closed by foreign host.
    
  8. 後々のために、/usr/sbin/nomail -> /usr/sbin/sendmail しておく。

qpopper

ほんとは、zaurus 上で IMAP サーバを構築して、いろいろなメールソフトで同一のメールボックスにしておきたいのだが、いろいろと調べてみると、標準のメールソフト(qtmail)は、IMAP が非常にタコ!らしい。~/ 以下の全ファイルをメールとして扱ったり、接続ごとに、本文全部を取り寄せようとしたり。というわけで、IMAP サーバの構築はあきらめて、POP サーバのみ作るとする。IMAP は、良いメールソフトができたら考えよう。

探してみたが、ipk が見つからなかったので、作る。→qpopper の ipk の作成メモ。ダウンロードもそちらからどうぞ。

/var/mail/ に配信するようにしたときに、qpopper が「/var/mail/.zaurus.pop を書けない」って文句を言ったので、/var/mail のパーミッションを root.root で 0777 にしておく。セキュリティなんてあったもんじゃない。(あっ、touch .zaurus.pop しておけばいいのか?!)

courier-imap

探してみたが、ipk が見つからなかったので、作る。→courier-imap の ipk の作成メモ。ダウンロードもそちらからどうぞ。

mutt

基本的には、ipk の配布元(http://kimux.org/liza/mutt.shtml) の説明通りでインストールできる。私の設定ファイル(~/.mutt/muttrc)を次に例示する。最初、キーバインドを覚えるまでが大変。

source "/home/QtPalmtop/etc/Muttrc"  # システムの設定ファイルを読み込む。
                                     #Muttrc は /home/QtPalmtop/etc/mutt-ja.rc を source している。

set mbox_type=Maildir
set spoolfile="~/Maildir"
set folder="~/Maildir"

set realname="KONDOU Nobuhiro"
set from="zkon@bz.wakwak.com"

set copy=yes   # make backup copy of sent mail.
set record="+sent"
set editor="vim %s"

# show follow headers
ignore *
unignore from date subject to cc
unignore x-mailer x-ml-name
hdr_order Date From To Cc Subject Reply-to

MaidMail

MaidMail も、ipk で何の問題もなく入る。フォントや見た目を GUI で設定できるとうれしいかも。インストールしただけだと、アイコン長押しで高速起動のチェックボックスが出ないが、/home/QtPalmtop/apps/???/maidmail.desktop に CanFastload=1 と書いておくと、高速起動のチェックボックスが出る。チェックすれば、高速起動に対応可能。

Test

テスト1。

  1. ネットワークを落としておく。
  2. zarurus の terminal 上で、
    $ sendmail my_mail_address@example.com
    本文を入力
    .  {行頭の . で入力終了}
    
  3. cat /var/nomail/xxxxxxxxxxで、ちゃんとスプールされていることを確認。
  4. ネットワークを繋げる。
  5. root になって、nosendコマンドを実行。次のように送信される。
    Connect to smtp.example.com ... Ok!
    Sending message xxxxxxxx ... OK!
    
  6. zaurus ユーザに戻って、fetchmailコマンドを実行。受信される。
    1 message for my_mail_address at example.com ( xxxx octets).
    reading message my_mail_address@example.com:1 of 1 (xxxx octets) . flushed
    ↑.fetchmailrc で keep を指定していないばあいは、サーバのメールボックスから削除される。
    テストではない必要なメールが意図せず取り込まれてしまわないように。
    
  7. ローカルのメールボックスに入っているかを確認する。→ls -R ~/Maildir してみると、Maildir/new に入っているようだ。~/procmail.log も見ておく。
    bash-2.05$ ls -R Maildir/
    
    Maildir/:
    cur  new  tmp
    
    Maildir/cur:
    
    Maildir/new:
    1058697389.1132_0.zaurus
    
    Maildir/tmp:
    bash-2.05$ cat ~/Maildir/new/1<TAB>
    確認する
    
  8. mutt で新着フラグ (N)が付いている?
  9. MaidMail で未読フラグ(U)が付いている?
  10. 読んだ後、Maildir/cur/ にメールが移動していることを確認。

CronInet

ipk でインストールあるのみ。ただし、同梱の mail_biff_maildir が ipk のインストールと GUI 設定だけでは連動しなかった。~/.cron_inetrc に手動で、次のように書き加える。

$biff = '/home/QtPalmtop/bin/led_biff_maildir /home/zaurus/Maildir/new/'

ruby 1.8 を使う時は、/opt/QtPalmtop/lib/ruby/ 以下のディレクトリが owner=root.qpe, mode=0755 になっていないとダメだ。

音声読み上げ

りなざうテクノウ経由、ひとりぶろぐを見て、CronInet でメールが届いたら、「You've got mail.」と喋るようにした。

今まで:
定期的に電源ONして fetchmail でメールを取りに行って、メールがあったら LED が光るが、すぐに電源OFFする。よって、能動的に Zaurus を使うとき(スケジュールやら計算やら)に初めて、メールLEDに気づく。

今後:
メールがあったら、音声で知らせるので、メールに気づきやすい。音声だと注目を浴びてしまう場合は、チャイムにすればいい(あまり面白くないが)。

■手順