#516
Last-modified: Tuesday, 29-Apr-2003 01:34:40 JST
[ トップページ/ いとしの liza(SL-C700 のページ)/ Mutt と仲間たち Version 2.0/ Mutt と仲間たち 〜 make 編〜/ ウクレレ日記 ]


[SL-C700] Mutt と仲間たち 【旧版】

2003-02-16 ♪きむらかずし kimu*st.rim.or.jp
2003-03-22 加筆修正。ちょっと HTML 化。
2003-04-01 mutt 1.4.1i-ja.1 をつくったので make 編を公開。
2003-04-18 mutt 1.4.1i-ja.1 (と libiconv )の ipk をどうぞ。
2003-04-26 nomail の ipk 化を作業中なので、本ページも加筆修正。
2003-04-27 リニューアル版リリースにより、本ファイルは旧版とした。

はじめに

Sharp LinuxZaurus (SL-C700) の標準メーラーはあまりにも(以下 省略)。かといって emacs 環境は重そうだし、SL-C700 じゃ小指 でcontrol を押せないし。で、 Mutt という軽いターミナル・ベー スのメーラーを入れてみることに。でも、のら犬 Mutt くんは寂し がりや。次々と UNIX 仲間を呼び寄せて……。

ちなみに GUI をお望みの方にはお役に立てません。あしからず。

zaurus-ja 版の mutt-1.4i-j1 がセキュリティ上の問題で非公開に。 代わりに mutt-1.4.1i-ja.1 を作ってみました( Mutt と仲間たち 〜 make 編〜)。 その後、特に不具合報告がなかったので ipk 化して公開中です。 このページも更新しました。(2003-04-18)

主な登場人物

用意するもの

libiconv_1.8-2_arm.ipk
http://kimux.org/liza/arc/libiconv_1.8-2_arm.ipk
GNU libiconv-1.8 (共有ライブラリのみ)。Mutt で必要。
/usr/lib に入るので本体メモリにしかインストールできない。
(2003-04-18)

mutt_1.4.1ja1-1_arm.ipk
http://kimux.org/liza/arc/mutt_1.4.1ja1-1_arm.ipk
テキスト・ベースの軽快メーラー Mutt のセキュリティ対策版
1.4.1 に日本語パッチが当たったもの。/opt/QtPalmtop に入るの
で SD カード等へもインストールできる。
古いバージョン mutt 1.4 が入っている場合は予めアンインストー
ルした方がよい。人柱版(/usr/local/bin にインストールされ
る)で問題なく運用されている方はあえて乗り換える必要はない
が、ipkg版に乗り換えるのであれば関連ファイルを削除した方がよ
ろしいかと。いずれにせよ、ホームディレクトリの .mutt/muttrc
はそのまま使える。(2003-04-18)

zaurus-ja より
  fetchmail_5.9.11-1_arm.ipk
  procmail_3.22-1_arm.ipk
  qpe-embeddedkonsole-ja_1.5.0-2_arm.ipk
http://sourceforge.jp/projects/zaurus-ja/

embeddedkonsole-ja hack 版のフォント選択追加版 by memn0ck さん
http://www.memn0ck.com/d/index.cgi?LinuxZaurus%2FDownload#i1

jvim-plain_3.0-2.1a-4_arm.ipk ( jvim パッケージ)by kaze さん
http://www.yk.rim.or.jp/‾kaze/zaurus/
あるいは、ちょっと重たいけど(2003-04-26 追記)、
vim-base_6.1.392kaoriya-1_arm.ipk (vim-6.1 パッケージ)
http://kimux.org/liza/arc/

perl_5.6.1-7_arm.ipk (nomail で必要)
http://www.killefiz.de/zaurus/showdetail.php?app=312

nomail by negi さん。 nomail-0.4.10.tar.gz は下記から
http://www.ku3g.org/negi/nomail/

Perl の Getopt::Std モジュール。
一般的な Perl パッケージには含まれるはず。
単体では下記から入手できる (2003-04-18)
http://www.io.com/docs/perl5-modules/Getopt/

インストール

ソフトウェアの追加/削除

mutt, libiconv, fetchmail, procmail, perl の ipk をインストール。 それに「用意するもの」でまだ入れていないものをインストール。

embeddedkonsole-ja は hack 版(の hack 版)で入れ替える。 これでキーボードから日本語入力可能となる。

日本語対応エディタが必要なので jvim 3.0 あるいは vim-6.1 をインストール。 この場合、/usr/bin/vi のシンボリックリンクを張り替えておく。

# mv /usr/bin/vi /usr/bin/vi.orig

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

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

↑加筆修正(2003-04-26)

perl の設定

"nomail" の引数処理で必要となる Getopt::Std モジュールが、 なぜか perl パッケージに含まれていないので、どこからか Std.pm を盗ってくる。 nomail で難しいことをしないなら不要(だが nomailスクリプトを改造する必要がある)。

$ su
# cp -p Std.pm /usr/share/perl/5.6.1/Getopt/

↑置き場所をより正しい /usr/share/perl に変更(2003-04-26)

"‾/.bashrc" の設定

Perl 実行時の warning: Setting locale failed. を出ないように、 環境変数 PERL_BADLANG を 0 に。 embeddedkonsole-ja のために TERM をセット。 もちろん bash を使っていない人は、当該シェルの設定ファイルにどうぞ。

エディタにて、"--- start ---" と "--- end ---" に挟まれた中身だけ、 追記する(以下、同じ)。

$ cd
$ vi .bashrc
--- start ---
export PERL_BADLANG=0
export TERM=xterm-new
--- end ---

↑環境変数の設定を短縮形に修正。 2003-04-26

Mutt の準備、設定ファイル

ローカル設定ファイル

sendmail すなわちメール送信は /usr/sbin/nomail (後述)に設定。 realname, from, hostname は必ず自分に合わせて書き変えること。 メールボックスは流行りの(?) Maildir 形式 (メール 1 通が 1 ファイルとなる)にしてみる。 mutt -y オプション起動時に(例えば)ふたつのメールボックス mbox, mac を表示するように、mailboxes コマンドを置いてみる。 メールボックス名の頭の "+" 記号には変数 folder が展開される。 mutt 自身が持つ POP 受信機能は使わない。

$ cd
$ mkdir Maildir

$ mkdir .mutt
$ vi .mutt/muttrc
--- start ---
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"
set mbox="+mbox"

mailboxes "+mbox" "+mac"

set record="+outbox"
set postponed="+postponed"

set tmpdir="‾/tmp"
set editor="vi %s"

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

↑サンプルのドメイン名を example.com に変更(2003-04-26)

さらに、下記を付け加えてもよい(2003-03-22 追記)。 上部にメール一覧、下部にメール本文を同時に表示したいとき、 その行数を pager_index_lines で指定する。

# show both index and body
set pager_index_lines=5

ヘッダーにて Date (デフォルトでは非表示)を表示する。 X や List- で始まる行は非表示とする。

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

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

mutt 1.4.1ja1 では、グローバルな設定ファイルは、 /opt/QtPalmtop/etc/ にインストールされている。 Muttrc と mutt-ja.rc (と mutt-en.rc )である。 mutt-en.rc は敢えて英語メッセージを主に使う場合に、 これを呼び出すように Muttrc を書き換える。 (2003-04-18)

/opt/QtPalmtop/doc/mutt には、 主要なドキュメントをピックアップしてある。 (2003-04-18)

fetchmail の設定

メールの受信には fetchmail を使う。以下は、ふたつの POP アカ ウントを設定した例。"keep" でサーバに残す。今時(いまどき) の POP サーバ向けに、"uidl" で既読のチェックを行う。

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

$ cd
$ vi .fetchmailrc
--- start ---
set nobouncemail

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

poll pop1.example.com
        username "nanashi"
        password "himitsu1"

poll pop2.example.com
        username "nanashi"
        password "himitsu2"
--- end ---

↑サンプルのドメイン名を example.com に変更(2003-04-26)

必ず下記のパーミッション設定をすること。

$ chmod 600 .fetchmailrc

procmail の設定

fetchmail で受信したメールを自動的に振り分けるために procmail を使う。必須ではないが、どうせ後から欲しくなるので、最初から 入れませう。

パッケージをインストールすると QtPalmtop に入るので、一般的 なパスからシンボリックリンクを張っておく。

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

で、設定ファイルを書く。振り分けのところは相変わらず呪文のよ うだ。詳細は Google って調べること。

"#" で始まるのはコメントなので入力しなくてもよい。":0 " は振り分け設定開始の合図。"*" に続いて、振り分けのための検索 文字列を書く。"^" は行の先頭を示す。例ではヘッダー部に "X- Ml-Name:osa-users" が含まれていたら、"mac" というメールボッ クスに入れる。メールボックス指定では、Maildir 形式を示すらし い最後の"/" を忘れないこと。振り分けの設定はいくらでも書ける。 すべての振り分けに該当しなかったメールはデフォルトの "mbox" に入る。

最初に試すときには、最初の 5 行だけ入力して、それ以降の振り 分けの設定はしない方がいいかも。

$ cd
$ vi .procmailrc
--- start ---
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/
--- end ---

メール受信を試してみる

これで、下記のコマンドを打ち込むと、メールを受信できる(はず)。

$ fetchmail 

受信されたメールは procmail によって自動的に振り分けられて、 ‾/Maildir 内の各メールボックスに納められる(はず)。

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

$ mutt -y

メールが受信できたら一安心。でも、設定はまだ終わらない。 nomail をインストールしないと、メールの送信ができないのだ。

nomail のインストール

シンプルな「オフライン SMTP サーバ」nomail を、さらに割り 切って使う。インストール済みの perl では、いわゆる suid script (管理者権限で実行されるスクリプト)を作れないみた い。よって同封されている INSTALL の通りにはいかないのだ。

(作業ディレクトリにて)

$ zcat nomail-0.4.10.tar.gz | tar xvf -
$ cd nomail-0.4.10

一応、ドキュメントを読む。

$ vi README
$ vi FAQ
$ vi INSTALL
$ vi Makefile

Perl スクリプト "nomail" に対して syslog 対策(後述)を施す。

$ vi nomail

syslog 行にフラグをくっつける( if ($syslog_f); )。下記の diff -c 出力を参考に修正する。面倒であれば、 syslogが出てく る行を全て # (コメント)にしてしまう。

--- start ---
*** nomail.orig Fri Dec 15 02:19:56 2000
--- nomail      Sat Feb 15 19:08:07 2003
***************
*** 22,27 ****
--- 22,30 ----
  $remote_host = "localhost";
  $msg_c = 0;                   # Message Counter;
  
+ $syslog_f = 0;        # 0: dont use syslog  2003-02-15 kimura
+ 
+ 
  @localuser = ();
  @mail_data = ();
  @header = ();
***************
*** 117,123 ****
        print MAIL join("¥n", @body) ."¥n";
        close MAIL;
      }
!     syslog('info', "DELIVERY: rcpt=" . join(",", @local_rcpt))
  }
  
  #
--- 120,126 ----
        print MAIL join("¥n", @body) ."¥n";
        close MAIL;
      }
!     syslog('info', "DELIVERY: rcpt=" . join(",", @local_rcpt)) if ($syslog_f);
  }
  
  #
***************
*** 130,136 ****
      print MAIL "¥n";
      print MAIL join("¥n", @mail_data) . "¥n";
      close MAIL;
!     syslog('info', "QUEUE: qid=$time$msg_c$$ rcpt=" . join(",", @inet_rcpt));
  }
  
  #
--- 133,139 ----
      print MAIL "¥n";
      print MAIL join("¥n", @mail_data) . "¥n";
      close MAIL;
!     syslog('info', "QUEUE: qid=$time$msg_c$$ rcpt=" . join(",", @inet_rcpt)) if ($syslog_f);
  }
  
  #
***************
*** 196,202 ****
      $|=1;
      print "220 $host SMTP Nomail $VERSION ($CODENAME)¥r¥n";
      while(<STDIN>){
!       syslog('debug', $_);
        if(/DEBUG/i){
            while(my ($key, $val) = each %OPTION){
                print "$key = $val¥n";
--- 199,205 ----
      $|=1;
      print "220 $host SMTP Nomail $VERSION ($CODENAME)¥r¥n";
      while(<STDIN>){
!       syslog('debug', $_) if ($syslog_f);
        if(/DEBUG/i){
            while(my ($key, $val) = each %OPTION){
                print "$key = $val¥n";
***************
*** 298,305 ****
  if(@ARGV){
      # MUA mode
      my $unknown = undef;
!     syslog('info', "invoked MUA mode");
!     syslog('debug', "ARGV: " . join " ", @ARGV);
      getopts('F:f:o:ti');
      while(<STDIN>){
          chomp;
--- 301,308 ----
  if(@ARGV){
      # MUA mode
      my $unknown = undef;
!     syslog('info', "invoked MUA mode") if ($syslog_f);
!     syslog('debug', "ARGV: " . join " ", @ARGV) if ($syslog_f);
      getopts('F:f:o:ti');
      while(<STDIN>){
          chomp;
--- end ---

さて、root になってインストール。置き場所が違うので注意。

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

設定ファイルを開いて、「(必須)」と書いてある 2 行だけ、 コメントを外して書く。 複数の送信先を使い分けたい場合は、 /etc/nomail.conf をすりかえるか、 nosend のオプション -f -s を使えばいいみたい。

# vi /etc/nomail.conf
(省略)
internetaddr    nanashi@example.com
(省略)
smtphost        smtp.example.com

オフライン時でも大丈夫なように、nomail が「未送信メール」を スプールしておく場所を作る。割り切ってユーザ zaurus 専用とする。

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

(↑ chmod 600 となっていたので修正。 2003-03-22 )

使わないけどメールスプールを作っておく。(たぶん)作らなくて も大丈夫。

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

メール送信を試してみる

$ mutt -y

mutt で "m" でメールを書いて、"y" で送信だ。このとき nomail が 呼ばれて、オフラインを前提として /var/nomail にメールが貯まる。 何通でも溜め込めるはず。

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

$ nosend

(↑間違えて nomail と書いてました。すみません。 2003-03-22 )

nomail や nosend の "no" は、英語のノー(無し、否定)じゃな いので、ご注意。いやしかし紛らわしいお名前。

リンク集

Mutt Japanese Edition
http://www.emaillab.org/mutt/
ここの「LinuxJapan掲載記事」は勉強になるなぁ(全部読んでないけど)。

Nomail - オフライン SMTP サーバ
http://www.ku3g.org/negi/nomail/

SL-C700 の「メール関連」(さきらさんの鍋 RWiki)
http://sun.dhis.portside.net/‾sakira/wiki/index.cgi?cmd=view;name=SL-C700
先にここを読んでおけば、もうすこし楽だったに違いない。

procmail の振り分けの呪文については、Google で探してね。

ターミナルでメール送受信 Part-1, 2, 3(☆ ぬ〜 ☆さん)
http://www25.cds.ne.jp/‾fakira/pda/sl/neta/neta-001.htm
http://www25.cds.ne.jp/‾fakira/pda/sl/neta/neta-002.htm
http://www25.cds.ne.jp/‾fakira/pda/sl/neta/neta-003.htm
当ページより懇切丁寧な解説があります。