#2724
Last-modified: Sunday, 22-Feb-2004 02:24:10 JST
[ トップページ/ いとしの liza(SL-C700 のページ)/ Mutt と仲間たち 【旧版】/ Mutt と仲間たち 〜 make 編〜/ ウクレレ日記 ]
←本家はこちら


[SL-C700] Mutt と仲間たち Version 2.3

!!警告!! Mutt 1.4.1i にはセキュリティ・ホールがあります。 最新版 1.4.2.1i 日本版LinuxZaurus 用パッケージ を作ったので乗り換えてください。

2003-04-28 (Version 2.0) ♪きむらかずし kimu*st.rim.or.jp
2003-04-29 綴りミス修正(MailDir→Maildir)
2003-04-30 "ipk" を本文中では "ipkg" で統一。Nomail のメモに加筆。
2004-01-04 (2.1) 各種パッケージの入手情報を更新。 買ったままの SD/CF カードには Maildir 形式を置けないことを加筆。
2004-02-14 セキュリティ・ホールの告知
2004-02-16 (2.2) バグ・フィックス版 1.4.2.1i-ja1 をパッケージ化( POP, IMAP 可能に)
2004-02-22 (2.3) SSL 対応版(人柱さん向け)公開POP, IMAP, IMAP/SSL 加筆メモ公開

目次

[目次/ はじめに/ 主な登場人物/ 日本語ターミナル環境/ アプリケーションの追加/削除/ メールの受信/ メール・スプール/ Mutt のグローバル設定ファイルとドキュメント/ 環境変数等の設定/ Mutt のローカル設定ファイル/ fetchmail の設定/ procmail の設定/ メール受信を試してみる/ POP, IMAP, IMAP/SSL/ メールの送信/ nomail の設定/ メール送信を試してみる/ 技術メモ/ Mutt の ipkg 作成メモ/ Nomail の ipkg 作成メモ/ その他/ リンク集]

はじめに

Sharp Linux Zaurus (SL-C700) の標準メーラーはあまりにも(以下省略)。 かといって emacs 環境は重そうだし。 というわけで、Mutt という軽いターミナル・ベースのメーラーを入れてみることに。 でも、のら犬 Mutt くんは寂しがりや。 次々と UNIX 仲間を呼び寄せて……。 ちなみに GUI をお望みの方にはお役に立てません。あしからず。

2003-04-27 nomail の ipkg 化に伴い、全面改訂した。 旧版はこちら

主な登場人物

日本語ターミナル環境

まずは前提として、日本語ターミナル環境を整える必要がある。 既に整っている方は次へ

まずは黙って qpe-embeddedkonsole-ja ワイド版 をインストール。 詳細はリンク先のページを参照のこと。(2004-01-04)

Mutt ではメールを書く時には外部のエディタを呼び出して使う。 付属の vi は日本語を扱えないので日本語対応エディタが必要となる。 例えば軽い jvim 3.0 あるいは、重いけど高機能 vim-6.1 をどうぞ。 /usr/bin/vi のシンボリック・リンクを張り替えておくと便利。

オリジナル( /usr/bin.rom/elvis へのリンク)を退避。
# mv /usr/bin/vi /usr/bin/vi.orig

jvim 3.0 を使う場合は、
# ln -s /usr/bin/jvim /usr/bin/vi

vim-6.1 を使う場合は、
# ln -s /opt/QtPalmtop/bin/vim /usr/bin/vi

vi の使い方を忘れちゃった方は思い出すこと。 vi なんか嫌いな方、知らない方は代替案を探すこと。 ZEditor 等が使えるかも。

付属のシェル環境である bash を使っていると、 サスペンド復帰時に表示が乱れたりする。 あらかじめ set +m と打ち込んでおくと大丈夫だがその自動設定はできないようだ。 シェル自体を zsh 等に入れ替えている方も多い。

アプリケーションの追加/削除

libiconv, nomail の ipkg を「本体メモリー」にインストールする。 Nomail の ipkg にはメール関連の各種設定が仕込んであるので忘れずに。

mutt, fetchmail, procmail の ipkg は、 「本体メモリー」と「SDカード」等のどちらでもインストールできる。

「本体メモリー」の容量に余裕がなく、「SDカード」を挿しっぱなしの場合は、 「SDカード」にどうぞ。

メールの受信

まずはメールの受信から。その流れは次の通り。 ユーザがインターネット接続時に fetchmail プログラムを起動すると、 メール・サーバから未読メールが読み込まれ、 procmail プログラムにより自動的に各メール・ボックスに振り分けられる。

それからユーザは、オフライン時にゆったりと(?) メール・クライアントたる mutt プログラムを起動して、 メール・ボックスに貯まったメールを読むわけだ。

!!注意!! 本稿ではメールの保存形式に Maildir 形式を用いているが、この場合、 買ったままの SD/CF カードには、メールファイルを置くことができない。 メモリー・カードの工場出荷時のファイルシステムである FAT 形式では 許されないファイル名を Maildir 形式で使うためだ。 SD/CF カードに Maildir を置きたい方は、ext2 フォーマットするか、 ext2 のディスクイメージを置くかすること(詳細はご自分で調べてね)。 (2004-01-04)

メール・スプール

/var/mail/zaurus
/var/nomail/

上記のメール・スプール(システムがメールを貯めておくところ)は、 (もし無ければ)Nomail の ipkg が作ってくれるので何もしなくてもよい。 Nomail の ipkg は、ついでに下記のリンクも自動的に張ってくれている。

# ln -s /opt/QtPalmtop/bin/procmail /usr/bin/procmail

Mutt のグローバル設定ファイルとドキュメント

Mutt 1.4.1ja1 では、グローバルな設定ファイルは、 /opt/QtPalmtop/etc/ にインストールされている。 Muttrc と mutt-ja.rc (と mutt-en.rc )である。 これらは既に日本語環境に対応しており、特に編集する必要はない。

/opt/QtPalmtop/doc/mutt/ には、 主要なドキュメントをピックアップしておいたので、 オンライン・マニュアルとしてどうぞ。

環境変数等の設定

シェルの設定ファイルにて環境変数等を設定する。 ここではデフォルトの bash の設定ファイル ‾/.bashrc の場合を示す。 Nomail で用いる Perl が、 locale 関連の警告を出さないように、 環境変数 PERL_BADLANG を 0 とする。 Mutt やエディタのために環境変数 TERM を xterm-new とする。

ついでにお好みで alias 設定も。下記の例では、 fe でメールをダウンロードして、 mu でメールを読み書きし、 no で外にメールを送信!となる。

$ cd
$ vi .bashrc
(前略)
export PERL_BADLANG=0
export TERM=xterm-new

alias fe="fetchmail"
alias mu="mutt -y"
alias no="nosend"

Mutt のローカル設定ファイル

ここではメールボックスを、流行りの(?) Maildir 形式 (メール 1 通が 1 ファイルとなる)として話を進める。 まず、ホーム・ディレクトリに Maildir ディレクトリと、 Mutt 用のテンポラリ・ディレクトリを掘っておく。

$ cd
$ mkdir Maildir
$ mkdir Maildir/tmp

つづいて Mutt の設定ファイル ‾/.mutt/muttrc を用意する。 下の例をコピー&ペーストして用いるとよい(以下、同様)。 メール送信 sendmail は /usr/sbin/nomail (後述)に設定。 ユーザ設定 realname, from, hostname は下記の例そのままではなく、 必ず自分に合わせて書き変えること。 メインのメール・ボックスは、‾/Maildir/mbox/ となる。 その他、下記の通りにメール・ボックス等を設定する。 ちなみにメール・ボックス名の頭の "+" 記号には、 変数 folder が展開される。

mailboxes コマンドは、mbox 以外にも複数のメール・ボックスを 扱うときに用いる。 例えば下記のように設定すると、mutt -y オプション起動時に、 ふたつのメール・ボックス mbox, mac がリスト表示される。

Mutt 自身が持つ POP 受信機能は使わないので "#" でコメントにしてある。

$ mkdir .mutt
$ vi .mutt/muttrc
set sendmail="/usr/sbin/nomail"

set realname="NANASHI Gonbei"  # ←必ず書き変えること!!
set from="nanashi@example.com" # ←必ず書き変えること!!
set hostname="example.com"     # ←必ず書き変えること!!

set mbox_type=Maildir
set spoolfile="/var/mail/zaurus"
set folder="‾/Maildir"         # ←内蔵メモリ( ext2 形式)に置くこと
set mbox="+mbox"
set record="+outbox"
set postponed="+postponed"
set tmpdir="‾/Maildir/tmp"
set editor="vi %s"

mailboxes "+mbox" "+mac"

# I use fetchmail&procmail
# set pop_host="pop://nanashi@example.com"
--- end ---

↑set tmpdir="‾/MailDir/tmp" → "‾/Maildir/tmp" に訂正。(2003-04-29)

さらに、下記を付け加えてもよい。 画面の上部にメール一覧、下部にメール本文を表示したいとき、 メール一覧の行数を pager_index_lines で指定する。

unignore/ignore を使って、 ヘッダ表示にて Date: (デフォルトでは非表示)を表示し、 逆に X や List- で始まる行は非表示とする。

ターミナルのフォントを大きくしてフォルダ一覧を表示すると、 肝心のメール・ボックス名が横にはみ出して見えなくなってしまうので、 folder_format をいじってメール・ボックス名を前に出してみた。

$ vi .mutt/muttrc
(前略)
# show both index and body
set pager_index_lines=5

# view/hide lines on header
unignore Date:
ignore X
ignore List-

# directory and mailboxes listing format
# default         "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
set folder_format="%2C %t %N %d %-16.16f %F %2l %-8.8u %-8.8g %8s"

fetchmail の設定

外部のメール・サーバからメールを取り出すために fetchmail を使う。 その設定は、‾/.fetchmailrc で行う。 以下は、ふたつの POP アカウントを設定した例。 もちろんひとつだけでも構わない。 "keep" は、受信したメールをサーバに残す。 今時(いまどき)の POP サーバ向けに、"uidl" で既読管理を行う。 mda (Mail Delivery Agent) にて、メールを振り分けてくれる procmail を、 絶対パスで指定する。

!!! パスワードを直接記述するので、他人に見せないように !!!

$ cd
$ vi .fetchmailrc
set nobouncemail

defaults
        protocol POP3
        uidl
        keep                                                                   
        no mimedecode
        mda "/usr/bin/procmail"

poll pop1.example.com       ← POP サーバ名(1)
        username "nanashi"  ← POP ユーザ名(1)
        password "himitsu1" ← パスワード(1)

poll pop2.example.com       ← POP サーバ名(2)
        username "nanashi"  ← POP ユーザ名(2)
        password "himitsu2" ← パスワード(2)

必ず下記のパーミッション設定(自分だけ読み書き可)をすること。

$ chmod 600 .fetchmailrc

procmail の設定

fetchmail で受信したメールを自動的に振り分けるために procmailを使う。 /opt/QtPalmtop/bin/procmail にインストールされるが、 Nomail の ipkg で /usr/bin/procmail にシンボリック・リンクが作られる。

というわけで、設定ファイル ‾/.procmailrc を書く。 振り分けのところは相変わらず呪文のようだ。 詳細は Google 等で解説ページを探すこと。

"#" で始まるのはコメント文なので入力しなくてもよい。 ":0 " (最後にはスペースが入る)は振り分け設定開始の合図。 "*" に続いて、振り分けのための検索文字列を書く。 例ではヘッダー部に "X-Ml-Name:osa-users" が含まれていたら、 "mac" というメールボックスに入れる。"^" は行の先頭を示している。

メールボックス指定では、Maildir 形式を示す最後の "/" を忘れないこと。 振り分けの設定はいくらでも追記できる。 すべての振り分けに該当しなかったメールはデフォルトの "mbox" に入る。

最初に試すときには、面倒な振り分け設定は止めて、 最初の 5 行だけ入力してみよう。

$ cd
$ vi .procmailrc
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/mbox/
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/.lockmail

# ":0 " ... colon,zero,space
:0 
* ^X-Ml-Name: osx-users
mac/

メール受信を試してみる

インターネット接続時に、下記のコマンドを打ち込むと、 メール・サーバから未読メールを受信できる。

$ fetchmail

受信が終わったらインターネット接続を切っても構わない。 受信されたメールは procmail によって自動的に振り分けられて、 ‾/Maildir 内の各メールボックスに納められる。

おもむろに Mutt を立ち上げてみよう。

$ mutt -y

メールが受信できたら一安心。でも、設定はまだ終わらない。 Nomail を設定しないと、メールを外部に送信ができないのだ。

POP, IMAP, IMAP/SSL

Mutt が持つ POP 受信機能は貧弱なのでここでは触れない。 IMAP 機能は、Mutt の設定ファイルの mailboxes に、 下記のような URL を書き加えればよい。

mailboxes "+mbox" "imap://user-name@imap-server-name/inbox"

また、SSL 対応版をインストールすれば、IMAP/SSL を使えるが、 この場合の URL のプロトコル指定は "imaps:"となる。

mailboxes "+mbox" "imaps://user-name@imap-server-name/inbox"

メールの送信

nomail の設定

シンプルな“オフライン SMTP サーバ” Nomail を、 さらに割り切って最少限の設定で使う。 設定ファイル /etc/nomail.conf を開いて、 「(必須)」と書いてある 2 行のコメントを外して書く。

# vi /etc/nomail.conf
(省略)
internetaddr    nanashi@example.com ← 自分のメールアドレス
smtphost        smtp.example.com    ← SMTP サーバ名

複数の送信先を使い分けたい場合は、 /etc/nomail.conf をすりかえるか、 nosend のオプション -f -s を使うこと。

Nomail のドキュメント類が /usr/share/nomail/ に入っているので、 適宜参照すること。

メール送信を試してみる

まず Mutt を起動。

$ mutt -y

-y オプションをつけるとメールボックス一覧となるので、 メール・ボックスを選ぶ。

"m" (mail) を入力すると、メールを書くモードとなる。 宛先を入力すると、外部エディタが起動されるのでメールを書いて保存終了すると、 書き終わったメールが表示されるので、"y" で送信する。 このとき裏で nomail プログラムが呼ばれる。 オフラインを前提としているので、すぐには外部には送信されずに、 /var/nomail にメールが貯まる。何通でも溜め込めるはず。 実験としてはまずは自分宛にメールを出してみよう。

さて、メールを実際に外の SMTP サーバに投げつけるコマンド、 nosend を叩いてみよう。 メールが外に出ていったかな(自分宛メールが届いたかな)?

$ nosend

ここまでうまくいったら、あとはあなた次第。 Have fun!

技術メモ

Mutt の ipkg 作成メモ

以下は 1.4.1i-ja1 作成時のメモです。 1.4.2.1i-ja1 についてはこちらへ。 (2004-02-22)

libiconv の ipkg には、GNU libiconv-1.8 の共有ライブラリのみ入っている。 /usr/lib に入るので本体メモリにしかインストールできない。

Mutt の ipkg は、 テキスト・ベースのメール・クライアント Mutt のセキュリティ対策版 1.4.1 に、 日本語パッチ ja.1 を当てて、 LinuxZaurus SL-C700 のセフル・コンパイル環境 dev_img-1.3 で make したもの。 /opt/QtPalmtop 以下に入るので SD カード等へもインストールできる。

コンパイル時の苦労、じゃない、技術メモについては、 Mutt と仲間たち 〜 make 編〜を参照のこと。

/opt/QtPalmtop/doc/mutt/ には、 主要なドキュメントをピックアップしておいたので、 オンライン・マニュアルとしてどうぞ。

セキュリティ・ホールの知られている旧バージョン mutt 1.4 の ipkg が インストールされている場合は、予めアンインストールした方がよい。 mutt 1.4.1 の人柱版(/usr/local/bin にインストールされる)で、 問題なく運用されている方はあえて乗り換える必要はないが、 ipkg 版に乗り換えるのであれば関連ファイルを削除した方がよろしいかと。 いずれにせよローカル設定 .mutt/muttrc はそのまま流用できる。

Nomail の ipkg 作成メモ

Perl 環境

Nomail は Perl 環境を前提とする。 Perl 5.6.1 の ipkg をインストールしておけばよいが、 Nomail を動かそうとすると Getopt::Std モジュールがなくてエラーになる。 Getopt/Std.pm は普通に Perl をインストールすれば含まれるものなのだが。 しょうがないので勝手ながら nomail の ipkg に含めておいた。 /usr/share/perl/5.6.1/Getopt/Std.pm にインストールされる。

その後発表された塚本さんの Perl パッケージには、Getopt::Std モジュールも 含まれているので、上記の処置は不要となった(が、そのままでも特に問題はない)。 (2004-01-04)

Nomail の使い方とパッチ当て

LinuxZaurus で Mutt からメールを送信するだけのために、 元々シンプルな“オフライン SMTP サーバ” Nomail を、 さらに割り切って最少限の設定で使うことを考えた。 ipkg 版の perl では、 いわゆる suid script (管理者権限で実行されるスクリプト) を作れないようなので、Nomail のドキュメント通りにはいかないのだ。 inetd から呼び出すこともしないで済ませている。

Perl スクリプトとしての "nomail" に対して syslog 対策を施した。 LinuxZaurus では、デフォルトでは syslog デーモンが動いていない。 たとえ動かしても、なぜかダイアルアップ接続の切断時に、 自動的に syslog デーモンが止まってしまうので、使い物にならないのだ。 よって、syslog 行に出力フラグをくっつけて( if ($syslog_f); )、 デフォルトでオフにしておいた。 どうしても syslog 出力が必要なときは syslog デーモンを起動しておいて、 syslog_f を立てればよい。

Nomail の自動インストール

Nomail の正規のインストールでは、各ファイルは以下の場所にコピーされる。 ipkg 版でも同様とした。

# cp -p nomail /usr/sbin/
# cp -p nosend /usr/bin/
# cp -p nomail.conf /etc/

nomail が「未送信メール」をスプールしておく場所が必要である。 割り切ってユーザ zaurus 専用としている。 Nomail の ipkg では、!!!もし存在しなければ!!! 自動的に作られる。

# mkdir /var/nomail
# chown zaurus:qpe /var/nomail
# chmod 700 /var/nomail

今回は使わないが、一般的なメール・スプールも作っておいた。 Nomail の ipkg では、!!!もし存在しなければ!!! 自動的に作られる。

# mkdir /var/mail
# chown root:root /var/mail
# chmod 755 /var/mail
# touch /var/mail/zaurus
# chown zaurus:qpe /var/mail/zaurus
# chmod 600 /var/mail/zaurus

すでに述べたように、procmail のシンボリック・リンクも、 便宜上、Nomail の ipkg で自動的に設定している。

# ln -s /opt/QtPalmtop/bin/procmail /usr/bin/procmail

ipkg のコントロール・ファイル

Nomail の ipkg には、以下のコントロール・ファイルが含まれる。

ドキュメント

一般的な設定等については、 Nomail のドキュメント類が /usr/share/nomail/ に入っているので、 適宜参照すること。 インターネット上では、 Nomail のホームページ( negi さん)はもちろん、 リンク集に挙げた鍋 RWiki (さきらさん)が LinuxZaurus でのさらなる活用方法として参考になる。

その他

(またの機会に……)

リンク集

Mutt Japanese Edition

Mutt については、とにかくここ。 「LinuxJapan掲載記事」は勉強になるなぁ(まだ全部は読んでないけど)。

Nomail - オフライン SMTP サーバ

SL-C700 の「メール関連」(さきらさんの鍋 RWiki)

先にここを読んでおけば、もうすこし楽だったに違いない。 nomail の踏み込んだ使い方もここに。

ターミナルでメール送受信 Part-1 Part-2 Part-3

☆ ぬ〜 ☆さんのページ。当ページより懇切丁寧な解説がある。