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 は将来以下のように改良されます。
- Emacs 21 以前:これまで通り blocking connect() を使って SMTP ポートへ接続します。
- Emacs 22 以降:non-blocking connect() を使って、 まず Submission ポートへの接続を試みます。失敗したら、non-blocking connect() を使って SMTP ポートへ接続します。
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 です。