IMPOST
******

This is Edition 0.1, last updated Jan 2, 1998, of The IMPOST Manual, for IMPOST, Version 0.99i-ssh.

概要
**

IMPOST:インターネットメッセージ発信ツールマニュアル(impost 0.99i-ssh版)

  * Perlスクリプトとして記述されています。Perl4, Perl5のどちらでも利用可能ですが、Perl5の場合は5.003より古いバージョンはサポートしていません。

  * UNIXは当然として、OS/2でも利用することができるそうです。

  * MHの send コマンドの代りとして利用することができます(基本機能のみ)。 See MUAから起動.

  * UCBMAILなどから起動される sendmail の代りとして利用することができます。See MUAから起動.

  * メールやニュースのメッセージをSMTP/NNTP経由で発信できます(To:, Cc: などのヘッダがあればメールとしてSMTP経由で発信し、 Newsgroups: ヘッダがあればニュースとして発信します)。See MUAから起動.

  * ESMTPのSIZE, DSNをサポートしています。

  * 複数のSMTP/NNTPサーバが指定でき、サーバに障害が発生しているような場合には、指定したサーバを順に試行させることができます。また、サーバのサービスポートを変更することもできます。See サーバに関するオプション.

  * ヘッダ部の日本語をMIME(RFC2047)形式に変換することができます。 See 日本語に関するオプション.

  * EUC/SJISで書かれた日本語をJISに変換することができます。 See 日本語に関するオプション.

  * 8bitコードを含むメッセージの本文をquoted-printableもしくはbase64に変換します(RFC2045)。See 日本語に関するオプション.

  * 発信エラーが発生した場合はDelivery Status Notification形式(RFC1891, RFC1892, RFC1894)のエラーメールを生成します。

  * MIME Message/rfc822形式カプセル化(RFC2045)によるBCC(blind carbon copy)を発信します。See メッセージの配送動作に関するオプション.

  * DCC(distribution carbon copy)(BCC的カプセル化をせず、ヘッダにアドレスを表示しない宛先指定方式) をサポートします。 See メッセージの配送動作に関するオプション.

  * FCC(folder carbon copy)(MH形式(ディレクトリフォルダ)/mbox形式(ファイルフォルダ)) をサポートします。See メッセージファイルに関するオプション.

  * Message-Id:/Date: ヘッダを生成することができます。 See Date:とMessage-Id:.

  * MHコンパチブルな anno, dist インタフェースをサポートしています。

  * list:; (RFC822)形式のアドレスが利用できます。 See ヘッダの生成に関するオプション.

  * group:u1, u2; (RFC822)形式のアドレスが利用できます(メールは u1, u2 に送られ、ヘッダは group:; に書き換えられます)。 See ヘッダの生成に関するオプション.

  * group:/file; (非標準) 形式のアドレスが利用できます(/file に記述されたメールアドレスを読み込み、それらのアドレスに向けてメールを発信します。ヘッダは group:; に書き換えられます)。 See ヘッダの生成に関するオプション.

  * サイズの大きなメッセージはMIME Message/partial形式(RFC2045)で分割します。 See メッセージ分割に関するオプション.

  * 個人レベルのメールアドレスのエイリアスをサポートします(MHの mailalias形式)。See エイリアスの展開とアドレスの補完.

  * 個人レベルのドメインパートのエイリアスをサポートします(BINDの hostalias 形式)。See エイリアスの展開とアドレスの補完.

  * メッセージの発信履歴が記録されます。See 発信履歴(ログ)ファイルの形式.

インストール
******

システムの実行可能ファイルが置かれているディレクトリ (/usr/local/bin 等)に impost スクリプトをコピーします。 chmod +x で実行可能ビットを立てるのを忘れないようにしてください。SetUID等の設定は必要ありません。インストールの際には先頭行の perl コマンドのパスをシステムに合わせて変更してください。

SGIのIRIXの一部では、メッセージの発信がうまくできないという問題があるかもしれません。その場合はスクリプト中の以下の部分を探して、中央の行のコメント行を示す # を削除し、print $CHAN " "; を活かすようにしてみてください。

     ## if you have mysterious TCP/IP bug on IRIX/SGI
     #		print $CHAN " ";
     ## endif

利用方法
****

シェルから直接起動
=========

     impost [オプション] [宛先のリスト|メッセージファイルのパス]

として起動します ([] は省略可能であることを示します。)。

オプションについては、後述します。See オプション.

宛先のリスト|メッセージファイルのパス は、どちらかを指定することを示します。

宛先リストは、メールアドレスを空白で区切ったものを指定します。宛先のリストを指定した場合で、メッセージファイルをオプションで指定しなかった場合は、標準入力からメッセージを読み込みます。メッセージファイルのパスは絶対パス表記で指定します。

MUAから起動
=======

Mew

          (setq mew-prog-send "impost")

     を実行して下さい。

MH
     ~/.mh_profile の sendproc に impost を指定して下さい。例:

          sendproc: /home/motonori/cmd/impost

mh-e (ver.4 or later)

          (setq mh-send-prog "impost")

     を実行して下さい。

UCB Mail
     環境変数sendmailを設定して下さい。例(csh 等の場合):

          setenv sendmail /home/motonori/cmd/impost

     .mailrc に記述することもできます。例:

          set sendmail /home/motonori/cmd/impost

sendmail を直接起動するメールクライアント
     /usr/lib/sendmail (あるいは /usr/sbin/sendmail。これはOSによって異なる) をこのスクリプトに置き換えて下さい。メールの受信等のためにオリジナルの sendmail も残しておく必要がある場合は、パスを変えるなど各自工夫して下さい。

inews を起動するニュースクライアント
     inews をこのスクリプトに置き換えて下さい。ただし -h 以外のオプションはサポートしていません。

オプション
*****

コマンドラインあるいは環境設定ファイルにて指定できるオプションを以下に示します。現在の設定は、impost -Help で表示されます。なお、オプション名の指定において大文字小文字の区別はありません。

オプションが引数を伴う場合の、引数の形式は以下の記号で示されます。

<num>
     数字を指定する。

<mode>
     モード(8進数)を指定する。

<str>
     文字列を指定する。

<str,>
     文字列を指定する(複数指定する場合は、空白を入れず , で区切る。

<STR> に @HOSTNAME@ を指定した場合は、動作させている計算機のホスト名に置き換えられます。置き換えられたホスト名はFQDN (Fully Qualified Domain Name) になることが期待されていますが、計算機の設定によっては、ドメイン名を含まないホスト名になることもあるので注意が必要です。

オプションリストの()内は短縮形(コンパチ系)の代替オプション名です。

同一オプションを複数回指定した場合は、後のオプションが優先されます (-MultipartAddオプションを除く)。

設定に関するオプション
===========

-Help
     ヘルプメッセージを表示する。

-rc <str>
     ユーザレベル環境設定ファイルのパスを指定する。See 環境設定ファイル.

-Config <str>
     ユーザレベル環境設定ファイル中の参照すべき定義ブロック名 (config: WORD という行から始まるブロックを参照させたい場合は <str> に WORD)を指定する。メッセージのヘッダから宛先情報等を抽出するように指定した場合は、Config: ヘッダに定義ブロック名を指定することもできる。環境設定ファイルの詳細については 環境設定ファイル を参照のこと。

-Require <str>
     初期化処理時に読み込ませる perl スクリプトファイルを指定する。

-Debug
     デバッグモードで動作することを指定する。全てのデバッグ情報が出力される。

-DebugFlag <str,>
     デバッグ情報を出力させたい機能を指定する。指定可能な機能名は以下のとおり:

          addr, alias, code, conf, create, encode, fcc, from, header, include,
          judge, multipart, opt, put, queue, smtp

     複数指定する場合は、空白を入れずに , で区切って列挙する。

-Verbose
     verboseモードでの動作を指定する。

-NoVerbose
     verboseモードでの動作を抑制する。

サーバに関するオプション
============

-SMTPservers <str,>
     SMTPサーバおよびポートを指定する。形式は、サーバ名 あるいはサーバ名/ポート番号 で /ポート番号 を省略した場合は SMTP(25)を使用する。複数のサーバを指定する場合は、空白を入れずに , で区切って列挙する。

-TryNextOnFatal
     恒久エラーが発生した場合であっても、-SMTPservers で指定されているサーバでまだ試行されていないものがあればすぐにエラーにせずにそちら試行する。

-NNTPservers <str,>
     NNTPサーバおよびポートを指定する。形式は、サーバ名 あるいはサーバ名/ポート番号 で /ポート番号 を省略した場合は NNTP(119)を使用する。複数のサーバを指定する場合は、空白を入れずに , で区切って列挙する。

-EmgSMTPsvrs <str,>
     配送エラーが発生した場合で、かつ、-SMTPservers に指定した全てのサーバにメールを送れなかった場合に試行すべきメールサーバを指定する。

-Clientname <str>
     SMTPの際にHELOで名乗るホスト名を指定する。

-ESMTP
     SMTPサーバがESMTPによる通信が可能である旨を提示しなかった場合でも、まず ESMTPを試みることを指定する。

-noESMTP
     相手がESMTP受理可能であることがわかった場合のみESMTPを利用する。

-NewsPost
     ニュースのポストを許可する(必要に応じてポストされる)。

-noNewsPost
     ニュースのポストを禁止する。

ヘッダの生成に関するオプション
===============

-User <str>
     発信者のローカルパート(ユーザ名)を指定する。デフォルトではログイン名が利用される。

-Name <str>
     発信者のフルネームを指定する。Full Name <User@FromDomain> のFull Nameに利用される。デフォルトでは、パスワードファイルのGCOSフィールドの内容が利用される。

-NameInComment
     デフォルトでは、From: Full Name <User@FromDomain> というヘッダが生成されるがこれを From: User@FromDomain (Full Name) という形式にしたい場合に指定する。

-Org <str>
     Organization: ヘッダにつける情報を定義する。

-FromDomain <str>
     発信者のメールアドレスのドメインパートを指定する。

-ToDomain <str>
     受信者のデフォルトのドメインパートを指定する。受信者のアドレスに @ 以下が指定されていなかった場合は、このドメインパートが補われる。

-ObeyMTAdomain
     アドレスの @ 以下が指定されていなかった場合に、default domainを補う処理を impost で行わず sendmail 等のMTAにさせることを指定する。

-MsgIdDomain <str>
     Message-Id: を生成する場合に使用するドメインパートを指定する。指定しなかった場合は -FromDomain で指定されたものが使用される。

-MsgId
     Message-Id: ヘッダを自動生成することを指定する。

-noMsgId
     Message-Id: ヘッダを自動生成しないことを指定する(MTAにより補われることになる)。

-PidMsgId
     プロセス番号もメッセージID文字列に含めることを指示する。1秒間に複数のメールを発信することがある場合に指定することが望ましい。

-Date
     Date: ヘッダを自動生成する。

-noDate
     Date: ヘッダを自動生成しない(MTAにより補われることになる)。

-NewsGMTdate
     GMTによる日付を生成することを指定する。ニュースではGMTが推奨されているらしい(RFC1036)。

-NScmpl
     ネームサーバを利用してメールアドレスのドメインパートを補完することを指定する。/etc/resolv.conf に定義されたdomain, searchの内容がリゾルバによって利用されることになる。

-noNScmpl
     ネームサーバを利用してメールアドレスのドメインパートを補完しないことを指定する。

-MailAliases <str,>
     メールアドレスを補完するためのエイリアスファイルのパスを指定する。 , で区切って複数のファイルを指定することも可能。例:

          alias1: u1
          alias2: u2@domain
          alias3: User-Three <u3@domain>
          alias4: 43, u5
          alias5: group:u6, u7;
          alias6: group:/address/list/file;
                    :

-HostAliases <str,>
     ドメインパートを補完するためのエイリアスファイルのパスを指定する。 , で区切って複数のファイルを指定することも可能。例:

          alias1	realname1.domain
          alias2	realname2.domain
          	 :

-ShowRcpts
     Apparently-To: ヘッダがMTAにより付加されることを許し、 To: undisclosed-recipients:; ヘッダを付加しない。

-noShowRcpts
     To: undisclosed-recipients:; ヘッダを付加することにより、MTAが Apparently-To: ヘッダを付けることを抑制する。

-Subj <str> (-s)
     Subject: ヘッダに記載する文字列を指定する。すでに Subject: ヘッダが存在する場合は無視される。

-ObeyHeader (-t)
     メッセージの受信者をヘッダから抽出することを指定する。ニュースへの投稿も Newsgroups: によって起動される。コマンドラインで受信者が指定されていても無視される。

-IgnoreHeader
     ヘッダの To:, Cc:, Newsgroups: 等に書かれているアドレスを実際の宛先アドレスとして解釈しないことを指定する。宛先等はコマンドラインで指定されなければならない。

メッセージの配送動作に関するオプション
===================

-MeToo (-om)
     発信者にも(Dcc的に)メールを送ることを指定する。

-Receipt
     配送完了通知の返送を指定する(RFC1891による)。

-MIMEbcc
     MIME Message/rfc822形式カプセル化(RFC2045)によるBCCを発信することを指定する。

-noMIMEbcc
     カプセル化せずにBCCを発信することを指定する。

-NewsCheck
     To:, Cc: ヘッダが存在した場合はニュースにはポストしないことを指定する。

-noNewsCheck
     Newsgroups: ヘッダがあればニュースにポストすることを指定する。

-Group <str,>
     ポストすべきニュースグループを指定する。ヘッダから情報を抽出させない場合に使用する。

-Dist
     redistributionモードにする。Resent-*: という形式のヘッダが利用される。See redistributeとResent-*:ヘッダ.

-DistMsg <str>
     redistributeするメッセージのパスを指定する。宛先はコマンドラインで指定するか、あるいは -Message で指定されたメッセージのヘッダで指定する。

-SMTP (-bs)
     SMTP形式によるメッセージを受け付ける。(sendmail -bs 的動作でメールを受理)。

メッセージファイルに関するオプション
==================

-MailFolders <str>
     メールフォルダの置かれているディレクトリを指定する。ディレクトリの自動作成は行われない。

-MsgMode <mode>
     FCC等によって生成されるファイルのモードを指定する。キューにファイルを生成する場合にも利用される。

-FolderMode <mode>
     FCCフォルダ(ディレクトリ)を作成する必要がある場合のモードを指定する。キュー用ディレクトリを作成する場合にも利用される。

-Folder <str>
     メッセージの発信時に参照されるドラフトフォルダを指定する。

-TrashMark <str>
     発信されたドラフトメッセージをリネームするときにファイル名の前に付加すべき文字を指定する。See エラー処理.

-Message <str>
     送信するメッセージのパスを指定する。相対パス指定の場合は、-Folder で指定されたドラフトフォルダからの指定となる。絶対パス指定の場合は、 -Folder で指定されたドラフトフォルダは無視される。

-Fcc <str>
     発信メールを保存すべきフォルダ名を指定する。

-FccDir
     FCCの保存形式を MH(ディレクトリ)形式にする。保存しようとするディレクトリが存在しなかった場合は、自動的に作成される。

-FccFile
     FCCの保存形式を mbox(単一ファイル)形式にする。

-FccPartial
     FCCで保存する際にmultipart/partialで分割された形式のまま保存することを指定する。

日本語に関するオプション
============

-JPheader
     ヘッダのJISをMIME(RFC2047)形式で符号化する。

-noJPheader
     ヘッダのJISをMIME(RFC2047)形式で符号化しない。

-HdrQEncoding
     ヘッダの符号化をQ符号化方式で行うことを指定する。指定がなければB符号化方式で行われる。

-NoHdrFolding
     72文字/行程度の改行挿入を行わないことを指示する。

-JPconv
     EUC/SJIS => JIS 変換を行なう。

-noJPconv
     EUC/SJIS => JIS 変換を行なわない。

-DefCode <str>
     EUC/SJIS の自動判別ができないときのデフォルトコードを指定する (EUC/SJIS/8BIT)。

-Through8
     8bitコードの含まれるメッセージボディを7bitに符号化しない。

-8to7
     8bitコードの含まれるメッセージボディを7bitに符号化する。8bitコードの割合によりbase64とquoted-printableのどちらかが自動的に選択される。

-8BitLabel <str>
     まだ Mime-Version: ヘッダの存在しない8bitコードを含むメッセージを発信する場合に、付加するMIMEヘッダのCTに付けるラベルを指定する。

本文の処理に関するオプション
==============

-TermDot
     . のみの行をメッセージの終端であると解釈することを指定する。

-IgnoreDot (-oi)
     . のみの行をメッセージの終端と解釈しないことを指定する。

-MultipartAdd <str>
     マルチパートのメッセージに追加する文書を指定する。このオプションを複数回指定すれば、指定した順序で別々のパートとして追加されていく。元のメッセージがマルチパートでなければ自動的にマルチパートとなる。元のメッセージがマルチパートであれば、新たなパートが追加される。

メッセージ分割に関するオプション
================

-Lines <num>
     サイズの大きなメールを分割する行数を指定する。分割はMIME Message/partial 形式(RFC2045)によって行われる。

-noPartial
     サイズの大きなメールでも分割しないことを指定する。

-Sleep <num>
     メッセージを分割する場合に、複数に分割された個々のメッセージの送信の間隔 (秒)を指定する。

キュー処理に関するオプション
==============

-QueueDir
     キューとして利用するディレクトリのパスを指定する。ディレクトリが存在していなかった場合は、自動的に作成される。

-JustQueuing (-odq)
     メッセージを直ちにキューに保存する。

-Queuing
     サーバにメッセージを渡せなかった場合にキューに保存する。

-ProcessQueue (-q)
     キューに溜まっているメッセージを発信する。

-QueueStatus (-bp)
     キューに溜まっているメッセージの状況を表示する。

キューの形式については、キューの形式 を参照のこと。

エラー処理に関するオプション
==============

-Report
     送信エラーが発生した場合にメールでエラーを通知することを指定する。

-noReport
     送信エラーを端末に表示することを指定する。

-Dead <str>
     エラーメールさえ発信できなかった場合にメッセージを保存するファイルのパスを指定する(mbox 形式)。

エラー処理の詳細については、エラー処理 を参照のこと。

メッセージ発信履歴に関するオプション
==================

-History <str>
     発信履歴を保存するファイルのパスを指定する。

-noHistory
     発信履歴を保存しないことを指定する。デフォルトは ~/.posthistory で、ファイルが存在していなかった場合は自動的に作成される。

その他のオプション
=========

前述の他、MHの send コマンドとコンパチブルないくつかのオプションが存在します。

inews については、現在、-h オプションしかサポートしておりません。

解釈される環境変数
*********

HOSTALIASES
     -HostAliases の指定と同等。See ヘッダの生成に関するオプション.

MAILALIASES
     -MailAliases の指定と同等。See ヘッダの生成に関するオプション.

SMTP_SERVERS
     -SMTPservers の指定と同等。See サーバに関するオプション.

NNTP_SERVERS
     -NNTPservers の指定と同等。See サーバに関するオプション.

ORGANIZATION
     -Org の指定と同等。See ヘッダの生成に関するオプション.

MSGIDDOMAIN
     -Msgid の指定と同等。See ヘッダの生成に関するオプション.

FROMDOMAIN
     -FromDomain の指定と同等。See ヘッダの生成に関するオプション.

TODOMAIN
     -ToDomain の指定と同等。See ヘッダの生成に関するオプション.

NAME
     From: のコメントパートに利用される。

SIGNATURE
     From: のコメントパートに利用される(NAME を上書きする)。

ヘッダの取り扱い
********

メールの宛先
======

ヘッダから宛先情報を抽出することを指定した場合、

     To:, Cc:, Dcc:, Bcc:

から宛先情報が抽出されます。Bcc: に指定したアドレス宛のメッセージについてはMIME message/rfc822でカプセル化されます。これらのヘッダには、値として @MYSELF@ または @ME@ を指定することができます。これらの値を指定した場合、メッセージの発信者のアドレス (From: ヘッダに自動的に付与されるアドレス)に置き換えられます。

エイリアスの展開とアドレスの補完
================

以下のヘッダのアドレスは、-HostAliases, -MailAliases で指定されたファイル中の定義により書き換えが行なわれます。また、ドメイン部 (@以下)が存在しない場合は -ToDomain に指定したドメイン部が補われます(-ObeyMTAdomain オプションを指定していない場合)。

     To:, Cc:, Bcc:, Dcc:, Resent-To:,
     Resent-Cc:, Resent-Bcc:, Resent-Dcc:

以下のヘッダのアドレスは、-HostAliases, -MailAliases で指定されたファイル中の定義により書き換えが行なわれます。また、ドメイン部 (@以下)が存在しない場合は -FromDomain に指定したドメイン部が補われます(-ObeyMTAdomain オプションを指定していない場合)。

     From:, Resent-From:, Reply-To:,
     Resent-Reply-To:, Errors-To:, Return-Receipt-To:

Fcc:
====

メッセージの発信時に Fcc: (あるいは -Fcc オプション) を指定すると、メッセージ発信が完了した後、指定されたフォルダにコピーが保存されます。フォルダの形式としては、ディレクトリの中に連番のメッセージ単位のファイルを作成するMH形式と、一つのファイルに複数のメッセージを追加保存するmbox形式が選択利用できます。

Date: と Message-Id:
===================

いくつかのUA (User Agent; メール送受信用ユーザアプリケーション)では、 Date: や Message-Id: ヘッダの生成をそれ自身で行なわずにMTA (Mail Transfer Agent) に任せてしまっているものがありますが、その場合 Fcc: 等て手元に保存されるメッセージに Date: や Message-Id: ヘッダが付加されておらず、あとでメッセージの特定が困難になってしまう場合があります。impost では、デフォルトで発信時に生成するようになっています。

Sender: と Originator:
=====================

送ろうとするメッセージにすでに From: ヘッダが存在し、値が自動的に付加されるものと異なっている場合は、Sender: ヘッダが生成され、設定されている発信者アドレスが付与されます。ただし、メッセージがニュースとして送出される場合は、Sender: でなく Originator: ヘッダが用いられます。

redistributeと Resent-*: ヘッダ
===========================

redistributeモードで発信されるメッセージについて、その配送に関するアドレス等は、

     To:, Cc:, Dcc:, Bcc:, From:,
     Reply-To:, Sender:, Date:, Message-Id:

の代わりに、

     Resent-To:, Resent-Cc:, Resent-Dcc:,
     Resent-Bcc:, Resent-From:, Resent-Reply-To:,
     Resent-Sender:, Resent-Date:, Resent-Message-Id:

が利用されます。すでに、Resent-*: ヘッダが存在している場合は、それらのヘッダは Prev-Resent-*: に置き換えられてから、今回の配送に関するアドレス等が Resent-*: を用いて付与されます。

Return-Receipt-To: ヘッダ
======================

従来、着信通知を要求するには Return-Receipt-To: ヘッダを付加することになっていました。この場合、ヘッダ情報に配送情報が混ざり込むためエンベロープとヘッダの役割が完全に分離できていないことになります。RFC1891では、着信通知もエンベロープの中で扱うことを定義しています。impost では、メッセージに Return-Receipt-To: ヘッダが存在した場合、エンベロープで着信通知を要求し、ヘッダ部から Return-Receipt-To: を削除します。ただし、受信者のメールサーバまでの経路上のMTAが全てRFC1891をサポートしていなければ機能しないかもしれません。

ニュースへの投稿時のヘッダ処理
===============

Newsgroups: ヘッダが存在した場合、あるいは -Group オプションで投稿先ニュースグループが指定された場合は、メッセージのニュースへの投稿が行なわれます。

ニュースの投稿の際には以下のヘッダが必須とされていますから、これらのヘッダのうちの一つでも存在しなければ、投稿処理は失敗します。

     From:, Subject:, Newsgroups:

また、本文が空であってはなりません。

ニュースに投稿する場合に、以下のヘッダがすでに存在しているとメッセージの受け付けが拒否されます(例えばINN 1.4の場合など)。従って、impost では、ニュースへの投稿の際にはこれらのヘッダは自動的に削除します。

     Path:, Received:, Return-Path:,
     NNTP-Posting-Host:, Xref:,

また、ニュースとメールの同時発信を制限する -NewsCheck オプションが指定されている場合、To:, Cc:, Apparently-To: ヘッダが存在した場合は、Newsgroups: ヘッダが存在してもニュースへの投稿は行なわれません。

Config:
=======

ヘッダからアドレス等を抽出する場合、Config: ヘッダによって指定された設定ブロックが参照されます。

その他
===

本文の行数をカウントしその値を示す Lines: ヘッダが生成されます。 impost のバージョン情報が、X-Dispatcher: ヘッダで示されます。

エラー処理
*****

メッセージをSMTPサーバやNNTPサーバに渡そうとした際にエラーが返された場合は、エラー処理が行なわれます。一時エラーの場合で -Queuing オプションが指定されている場合は、メッセージはキューに保存されます。

恒久的エラーの場合、あるいは一時エラーであっても -Queuing オプションが指定されていなかった場合は、エラーが発生したことがレポートされます。

-Report オプションが指定されている場合は、発信者のアドレスにメールによってエラーが通知されます。ドラフトメッセージが -Message (同等のオプションを含む)によって指定されていた場合は、トラッシュ処理 (メッセージのファイル名の前に -TrashMark で指定した文字を追加する) が行なわれます。

-noReport オプションが指定されていた場合は、メールによるレポートは行なわれず、エラーメッセージをエラー出力に書き出すとともに、メッセージは dead.letterファイルに保存されます。ただし、ドラフトメッセージが -Message (同等のオプションを含む)によって指定されていた場合は、トラッシュ処理は行なわれず、ファイルがそのまま残されます。また、 dead.letter にも保存されません。どの場合でも、エラーは発信履歴ファイルに記録されます(発信履歴ファイルへの記録を抑制した場合を除く)。

環境設定ファイル
********

環境設定ファイルは、全ユーザ共通の設定用のものと個人単位の設定用のものがあります。全ユーザ共通の設定ファイルのパスはスクリプト中で $System_config に定義されていて、デフォルトでは /usr/local/etc/impostrc になっています。これを変更する場合はスクリプトを直接編集して下さい。個人単位の設定設定ファイルのパスはデフォルトで ~/.impostrc になっています。これは、-rc オプションで起動時に変更することが可能で、全ユーザ共通の設定ファイル中で変更しておくこともできます。See 設定に関するオプション.

環境設定ファイルは、config: 行と option: 行から成り立ちます。

config: 行
     そこから設定ブロックが始まることを示し、ブロックの名前は config: に続けて記述します。同じ名前のブロックを複数に別けて記述することができます。複数のブロック名で共有できる定義は、config: bn1,bn2 のようにブロック名を複数記述することでつくることができます。

option: 行
     オプションを一行一つの単位で記述します。

空行および # 文字から始まる行は無視されます。ちなみに、作者の .impostrc は以下のようになってます。

     config: default
     # default のブロックは -Config オプションの指定にかかわらず必ず参照されます。
     # 設定ファイルの最初から config: 行までの間に、option: 行があった場合は
     # その option: 行も default と解釈されます。
     option: -mailfolders Mail
     option: -hostaliases ~/.hostaliases
     option: -mailaliases ~/.mailaliases
     option: -lines 3000
     #option: -name 中村 素典

     option: -smtpservers mail.econ.kyoto-u.ac.jp
     option: -nntpservers news.imel.kyoto-u.ac.jp
     option: -emgsmtpsvrs localhost
     option: -fromdomain econ.kyoto-u.ac.jp
     option: -todomain econ.kyoto-u.ac.jp
     option: -org Faculty of Economics, Kyoto University, Japan

     config: wide
     option: -fromdomain kyoto.wide.ad.jp
     option: -todomain wide.ad.jp
     option: -org Kyoto Network Operation Center, WIDE Project, JAPAN

キューの形式
******

-Queuing オプションが指定されていてメッセージの発信が失敗(一時的エラー)した場合、または、-JustQueuing が指定されている場合は、メッセージがキューに蓄積されます。

メッセージは、-QueueDir に指定されたディレクトリに、連番で1から順にメッセージ単位でファイルに保存されます。ファイルの内容は、

     内部状態保存用データ
     <空行>
     RFC822ヘッダ
     <空行>
     RFC822本文

という形式になっています。impost を -QueueStatus オプションを指定して起動すると、キューに蓄積されているメッセージに関する情報が表示されます。

impost を -ProcessQueue (-q) オプションを指定して起動すると、小さい番号のファイルから順に配送を試みていきます。配送が失敗したメッセージは、恒久的エラーでない限り、そのままキューに残されます。

発信履歴(ログ)ファイルの形式
***************

発信履歴ファイルには、1アクション1行で発信履歴が記録されます。形式は、

     日付 時間 proto=[p] server=[s] id=[m] from=[f] to=[t] stat=[r]

で、[p], [s], [m], [t], [r]は以下の通りです。

[p]:

     smtp
          SMTPで接続。

     esmtp
          ESMTPで接続。

     nntp
          NNTPで接続。

     fcc
          FCC要求によるファイルへの書き込み。

     queue
          キューに関する処理。

     dead-letter
          配送の失敗により dead.letter への書き込み。

     draft
          ドラフトメッセージに関する処理。

[s]:
     接続した サーバ/ポート。デフォルトのポートが利用された場合は、 /ポート情報は省略される。エラーの場合は、最後に接続したサーバに関する情報が記録される。

[m]:
     Message-Id: ヘッダの値。

[f]:
     発信者アドレス。Config: あるいは -config でデフォルト以外の設定が指定された場合は、() で設定名が付記される。

[t]:
     受信者アドレス。または 書き込みフォルダ/ファイル。複数ある場合は , で区切られる。Bcc: に記述されたアドレス以外は、<> で囲まれる。

[r]:

     sent
          配送の成功を示す。サーバの返した受信プロセスIDなどの情報が () で付記される。

     skipped
          サーバへの配送が成功せず、次のサーバに処理を移したことを示す。

     failed
          配送の失敗(エラー)を示す。失敗の理由が () で付記される

     queued
          キューへの保存を示す。

     preserved
          (ドラフトメッセージが)そのまま残されたことを示す。

フック
***

個人的に特殊な処理を、impost の中で行わせるようにしたい場合のために、impost スクリプト中ではフックとして以下のものが用意されている。

$Hook_PreHeaderconv
     ISO-2022-JPヘッダ変換処理の直前。

$Hook_PreFinalHeaderProc
     ヘッダの最終調整処理の直前。

$Hook_PreDispatching
     配送処理の直前。

それぞれの変数は、定義されていた場合、それぞれの場所で eval される。定義は、-Require で読み込ませる perl スクリプトの中で行う。

防火壁を越えた通信
*********

セキュリティ上の理由などから、メールサーバやニュースサーバは特定のホストからのみアクセスを受け付けるようになっている場合がある。そのような場合に対応するため、SSH の Port Forwarding 機能を利用して通信を中継させるように拡張した。次の3つのオプションが拡張されている。

-SMTPServers <str,>

-NNTPServers <str,>
     従来の書式に加えて、サーバ名:ローカルポート番号, サーバ名/ ポート番号:ローカルポート番号 の2つの形式を受け付けるように拡張している。 :ローカルポート番号 の指定が省略された場合は、SSH による中継を行なわない。

-Clientname <str>
     -SMTPServers <str,>, -NNTPServers <str,> の指定によって SSH による中継を行なうよう指定された場合は、このオプションで指定されたホストを中継ホストとして使う。

例えば、下記のように指定して防火壁外の host.foo からメールを送信した場合を考える。

     -SMTPServer mail.in.firewall:1234
     -Clientname host.in.firewall

この場合の動作は次の通り。まず、次のコマンドを実行して、 host.in.firewall にログインすると同時に、mail.in.firewall のSMTP(25番)ポートへの接続を localhost の1234番ポートに転送する (指定されたホスト host.in.firewall に対して、パスワードなどの入力なしにログインできるように設定されている必要がある。)。

     ssh -n -x -o BatchMode yes -L:1234:mail.in.firewall:25 host.in.firewall

その上で、impost は、localhost の1234番ポートに対して接続する。こうすると、mail.in.firewall からこの接続を見ると host.in.firewall から接続されているように見えるので、通常通りにメールの送信などを行うことができる。

なお、:ローカルポート番号 によって指定されたポートが既に利用されている場合には、ポート番号を1つずつ順に増やしてみて、使えるポートがないか検索を行う。