Mew での Submission に関するフィールド実験

山本和彦
IIJ 技術研究所
2005年11月11日

はじめに

まず、「投稿ポートから SMTP ポートへのフォールバック」を読み趣旨をご理解下さい。 細かな部分は理解できなくても結構です。

実験の目的は、ケース 1) 〜 5) がどの程度の割合で分布しているかを調べることです。 ケース 5) が少なければ、それだけメールリーダの作者を安心させることができます。

実験期間は、2005年11月18日から2005年12月5日です。

Emacs の準備

non-blocking connect() をサポートしているのは Emacs 22 だけです。 Emacs 21 以前ではサポートされていません。 実験に参加できるのは、 Emacs 22 ベースの Emacs を使っている方だけです。

BSD/Linux/Mac をお使いの方は、 Emacs 22 を CVS で入手し、コンパイルして下さい。 できる限り、最新のソースを使って下さい。

Windows の Emacs 22 には、 CVS のソースをそのままコンパイルした NTEmacs と、 改良が加えられた Meadow 3 とがあります。

Meadow 3 で、 non-blocking connect() が正しく動くようになったのは最近のことです。 Meadow 3 を利用する場合、 最新版を Netinstall でインストールするか、 最新のソースからコンパイルして下さい。

Meadow 3 のコードは Emacs 本家へ将来マージされると思いますが、 2005年11月18日現在ではマージされていません。 ですので、NTEmacs では実験に参加できません。

備考:Mew は将来以下のように改良されます。

Mew の準備

まず、Emacs を終了させて下さい。

次に、Mew を CVS で最新にしましょう。 最新にするだけでは、何も動作は変わらないので、ご安心を!

% make distclean
% cvs update -d -P

必要なら、make してインストールしましょう。

% ./configure
% make
% sudo make install

".mew" か ".emacs" で、mew-smtp-port を変更しているなら、 その部分を削除して下さい。

Emacs を起動し、Mew を実行すれば、準備完了です。

実験

1) 以下を実行します。

M-x mew-submission-init

2) 自分宛にメールを書き、送信します。

3) メールが戻ってきたら、以下を実行します。

M-x mew-submission-report

これで、レポート用の草稿が作られるので、 必要事項を埋めてレポートを送ります。

4) 複数のサーバを使っていたり、Mew を家庭や仕事場からのように 複数の場所から使っているなら、その環境分だけ 1) 〜 3) を繰り返して下さい。

5) 以下を実行して、実験終了です。Mew は、今までと同じように動きます。 これを実行しなくても、Emacs 再起動すれば、今までと同じように動きます。

M-x mew-submission-finish

SMTP session info

レポートで表示される SMTP session info を見ると、 どのケースか分かります。

1) 投稿ポートが提供されている場合

SMTP session info: 
2005/11/10 16:18:31: SUBMISSION try to open a connection
2005/11/10 16:18:31: SUBMISSION open
2005/11/10 16:18:31: SUBMISSION connection broken by remote peer

"open" が実際に接続できた瞬間です。 "connection broken by remote peer" は、接続が正常終了した瞬間です。 エラーではありません。

2) TCP RST が返る場合

SMTP session info: 
2005/11/10 16:18:31: SUBMISSION try to open a connection
2005/11/10 16:18:31: SUBMISSION failed with code 111
2005/11/10 16:18:31: SMTP try to open a connection
2005/11/10 16:18:31: SMTP open
2005/11/10 16:18:31: SMTP connection broken by remote peer

エラー番号の意味は、各 OS によって異なります。 UNIX なら "/usr/include/errno.h" を見ると意味が分かります。 上記は Linux の場合で、code 111 は ECONNREFUSED です。

3) ICMP ハードエラーが返る場合

現在、例題なし。

5) TCP がタイムアウトする場合

SMTP session info: 
2005/11/10 15:12:01: SUBMISSION try to open a connection
2005/11/10 15:13:16: SUBMISSION failed with code 60
2005/11/10 15:13:16: SMTP try to open a connection
2005/11/10 15:13:16: SMTP open
2005/11/10 15:13:18: SMTP connection broken by remote peer

時刻情報に注目すると、タイムアウトにかかった時間が分かります。 上記は Mac の例で、code 60 は ETIMEDOUT です。