MailMsg Ver 0.91 説明書 2001/11/05 Copyrigth "KOHNO Takashi" [概要] メッセージ送受信サービス IPMSG をメールの到着通知に利用するための ソフトウェアです。 UNIX端末から IPMSG にメッセージを送ることもできます。 メールがサーバに届いた瞬間にメールの差出人、サブジェクトなど自分の 欲しい情報だけがサーバーから知らされます。 メールクライアントソフトの到着確認と違いメールが来たときにだけ 連絡が来るので余計なパケットがネットワークを流れることはありません。 [コンパイル] make; make install でインストールできます。 動作確認は Vine Linux 2.0 で行っています。 Ver 0.71 までのものは SunOS4.1.3, Solaris2.4でおこなっていました。 (SunOS4.1.3 標準のccではエラーが出ます) ・通常は普通に make して下さい。 ・Solaris の場合は Makefile中の LDFLAGS を有効にして -lsocket -lnsl を 追加します。 コンパイル時に -DMIME を指定すると動作が変わります。 nkf1.5 以上と組み合わせて MIMEデコードをする場合には有効かもしれません。 例 cc -DMIME mailmsg.c -o mailmsg -lsocket -lnsl -DMIME が指定されないときにはヘッダー中に“<”,“>”が存在するときには “<”と“>”ではさまれた文字列が存在するときにはさまれた文字列のみを 抽出します。 また-DMIMEが指定されないときはヘッダー中に“(”が存在するときには “(”の直前までを抽出します。 (nkfがないときにFrom:に日本語が挿入しているときの対策です。) [使用環境] このソフトウェアは以下の条件を満たす環境でのみお使いになれます。 ・サーバにUNIXを利用していること。 ・サーバに本人のアカウントがありシェルを使えること。(*) また、フリーソフトの nkf が利用できる環境ではより便利に使えます。 nkfが使えない環境では日本語が含まれている時に日本語がIPMSGに 表示できません。 nkfのバージョンが1.5未満の場合にはMIMEエンコードされたSubject:を IPMSGへ表示させることができません。 [取り扱いなど] ・「mailmsg」は「IP Messenger for Win32」同様に「永久に」 フリーソフトウェアです。 ・アーカイブの転載・再配布は自由です。どんどん、やってください。転載の 報告なども特に必要ありません。 ・最新版は、下のURLにあります。 http://www.kouno.jp/home/soft_lab/ ・感想・リクエスト・バグ報告などを頂けると嬉しいです(単に「使ってます」 だけのメールでも、結構嬉しい(^^;) [注意(.forward について)] ※ コマンドラインからのメッセージの送信にのみ使われる場合は関係ありません mailmsgは .forward の機能を利用します。 .forward は リストアップされた受信先にメールを転送するものです。 .forwardファイルに関して知らない方は利用前に sendmail のオンラインマニュアル 等を読むなどして.forwardに関する基礎的な知識を付けることを推奨します。 自信がないときはシステム管理者の方に聞いてみてください。 ※ 最新の sendmail では .forward にグループ書き込み許可があると .forward 中でのプログラム起動をなってますね。 "unsafe address ..."というエラーが出る場合はチェックしてみてください。 [使い方(メイル着信通知)] ※ 任意文のコマンドライン送信は『ちょっと進んだ使い方 8』を参照のこと 自分のホームディレクトリへ 以下の内容の .forward ファイルを作成します。 ---ここから--- \mail_address, "| /usr/local/bin/mailmsg machine_name" ---ここまで--- mail_addressには自分のメールアドレスを入れます。 ※これを忘れると自分宛てのメールが届かなくなるので注意して下さい。 mailmsgのパスは自分の環境に合わせて変更して下さい。 パスは絶対パスで指定することを推奨します。 machine_nameには到着を知らせるマシンの名前、もしくはIPアドレスを入力します。 またmachine_nameに該当するマシンが存在せず文字列中に[]が存在する場合は その中を抽出してIPアドレスと認識します。 machine_nameのマシンにはIPMSGが起動している必要がありますが、 IPMSGが起動していなくても、エラーにはなりません。(通知されないだけです) 以上の用意ができていればメールが到着したときに machine_nameのマシンに 「〜から、メールが届きました。」と表示されます。 [ちょっと進んだ使い方] {使い方リスト : 利用するオプションなど} 1. メールの到着通知に発信者名以外の情報を含めたい (引数) 2. 発信者名やサブジェクトに含まれる漢字を正しく表示したい (nkf) 3. 別のポートで起動しているIPMSGへ通知したい (-p) 4. メールの到着もログにとりたい(いないと思うけど -l) 5. 同時にメールの内容も知りたい (-b) 6. メイル通知に封書/錠付き封書をしたい (-s, -w) 7. 特定のメイルのみ通知/封書/錠付き封書を行いたい (procmail) 8. IPMSG にメッセージを任意の送信したい (-d, -D) 8.1 メッセージ作成をエディタで行いたい (-e) 9. 手元のファイルの内容を送りたい (-f) 10. DHCP環境など動的にIPアドレスが変化する相手にメッセージを送りたい。 (-t & tipmsg) 11. ユーザー名で送りたい (-u) 12. 送信相手に別名をつけたい、複数人に一度に送りたい。(-a) 13. オプションが増えて面倒臭い (alias) 14. recvmsg でメッセージを受けた相手に返信したい。(-r) 1.メールの到着通知に発信者名以外の情報を含めたい。 mailmsg のmachine_name 以降の引数に欲しいヘッダを記入します。 例 "| /usr/local/bin/mailmsg machine_name From: Subject:" machine_name 以降の引数を指定した場合には、指定したヘッダの情報だけ が表示されます。 明示的にFrom:を指定しないと発信者名も表示されなくなります。 2.発信者名やサブジェクトに含まれる漢字を正しく表示したい。 nkf を利用します。 例 "| /usr/local/bin/nkf -m -s | /usr/local/bin/mailmsg machine_name From: Subject:" nkfは漢字コード変換用の有名なフリーソフトで各所のFTPサイトから 入手できます。 たとえば、 ftp.lab.kdd.co.jp/Japan/nkf/nkf-1.5pl1.tar.gz にもあります。 nkfのバージョンが1.5未満の場合には-mオプションは使えません。 またバージョン1.5では一部のMIMEフォーマット(ISO-2022-JPが大文字のもの)は デコードできないようです。 このような場合はバージョン1.6以降のnkfをおつかいください。 3.別のポートで起動しているIPMSGへ通知したい -pのあとにポート番号を指定して下さい。 例 "| /usr/local/bin/mailmsg -p2003 machine_name From: Subject:" 4.メールの到着もログにとりたい(いないと思うけど) -l オプションでIPMSGのログにMailmsgの到着通知が記載されます。 この機能を使うのはIPMSG側でログに記載する設定をしておく必要があります。 5.同時にメールの内容も知りたい -b に続いて行数を指定することで指定行数のメール本文を通知文章と同時に 表示します。 ※ 送信できるメッセージの最大は8000Byte程度です。 例 "| /usr/local/bin/mailmsg -p2003 -b100 machine_name From: Subject:" mailmsg.c の BODY_START 定数が本文の最初につく文字列です。 ここを変更してコンパイルすると自由に文字列を付けることができます。 たとえば "\n\n\n\n\n--- ここから本文---\n" とすればメール通知文から 5行開けて本文が表示されます。 6.送信・メイル通知に封書/錠付き封書をしたい 2つのオプションが使えます。 オプション -s は通知メッセージに封書をします。(IPMSG送信画面の封書と同じ) オプション -w は通知メッセージに錠付き封書をします。(〃 錠と同じ) 例 "| /usr/local/bin/mailmsg -p2003 -b100 -w machine_name From: Subject:" 7.特定のメイルのみ通知/封書/錠付き封書を行いたい procmail を使う。 8.IPMSG に任意のメッセージを送信したい -d オプションを付けることでコマンドラインからメッセージを送ることができます。 -d オプション使用時は machine_name を複数書くことで同じ文を複数のホストに 送ることができます。(IP Messenger Multicast) -d オプションをつけた場合は、-l の指定に関わらずログをとる設定になります。 またオプションを大文字(-D) とした場合は、通知先の IPMSG で「返信」が 有効になります。 recvmsg などの IPMSG 受信クライアントが起動していれば 価値があります。 ※ .forward 中で使うとヘッダを含めたメイル全文をIPMSGに通知します。 例 : (# はプロンプト) # mailmsg -d -p0x979 machine_name 任意の文章 複数行も可能 終了はコントロールキーを押しながら D Ctrl-D 例2 : mailmsg -ffilename -d -p0x979 machine1 machine2 machine3 -s, -w のオプションも併用できますが開封通知は mailmsg では受けとれません。 端末の文字コードがEUC などの場合には nkf -s | mailmsg -d machine など することで漢字コードの変換もできます。 (.forward の書き方と一緒ですね。) Mule の shell モードなどで使っているのであれば、C-x C-k p で プロセスのコーディングシステム(Output)を *sjis* にすれば OK です。 [注意点] メッセージを送るところで BackSpace が使えない(^hが表示される)場合は recvmsg を起動する前に stty erase ^h を入力することで BackSpace が 使えるようになります。 ^h は1文字のコントロールコードです。 シェルで入力する場合は Ctrl-V Ctrl-H や Ctrl-Q Ctrl-H で 入力できます。(利用するシェルによります) 8.1 メッセージ作成をエディタで行いたい -e オプションを付けると環境変数 EDITOR に設定されているエディタで ファイルをメッセージを編集できます。 エディタを終了すると送るかどうかを聞いてきます y を答えると メッセージが送られます。 例 : mailmsg -e -d machine_name デフォルトのエディタは vi です。 また -e につづけてエディタ名を入力することで指定のエディタを利用できます。 例 : mailmsg -emule -d machine_name このときにエディットされるファイル名は環境変数 MAILMSGSFILE で 設定したものが使われます。 デフォルトのファイル名は /tmp/mailmsg.send です。 (『9.手元のテキストファイルの内容を送りたい』で説明する -f オプションで 任意にファイル名を切り替えることもできます) ※1 編集したファイルは削除されません、必要な場合は個人で削除してください。 ※2 ファイルの文字コードはシフトJISにしてください、 シフトJISを扱えないエディタでは日本語は正常に送れません。 9.手元のファイルの内容を送りたい -f オプションをつけるといままで標準入力からとっていた入力を ファイルからに切り替えることができます。 ファイル名は -f に続けて入力します。 ファイル名が入力されていないときは環境変数 MAILMSGSFILE の設定が 使われます。 デフォルトのファイル名は /tmp/mailmsg.send です。 -e オプションと併用することでファイルを編集後に送信できます。 送信するファイルの漢字コードはシフトJISにしてください。 例1 : mailmsg -f./test.txt -d machine_name 例2 : mailmsg -f -d machine_name 例3 : mailmsg -e -f -d machine_name 10.DHCP環境などでIPアドレスが固定でない相手にメッセージを送りたい。 (Ver0.9 未満のものと大きく内容が変わりました) -t オプションをつけるとメッセージを標準出力に出すようになります。 tipmsg を設定しておけば IPMSG の動的なユーザー&マシン名で送信先を 指定できます。 ※ この目的だけに tipmsg を起動する場合には tipmsgd に -n オプションを つけておくと IPMSG に参加させずに userlist の収集ができます。 例1 : mailmsg -t dummy_machine_name | nkf -e -m | tipmsg -s machine_name 例2 : mailmsg -t dummy_machine_name | nkf -e -m | tipmsg -u -s user_name 11.ユーザー名やDNSに登録されていないマシン名で送りたい tipmsg と組み合わせれば -t オプションで対応できます。10番を参照のこと これ以外には -u オプションをつけるとホスト名、IPアドレスで検索する以前に ユーザーリストから検索を行うようになります。 $HOME/tipmsg/userlist ファイル(-uのあとに指定可能)に ユーザー名 [ホスト名](または[IP Address])という記述をすると ユーザー名で指定が可能です。 recvmsg 0.4以上で userlist を作成している場合には、userlist に メンバーの設定している(WindowsやMacでの)マシン名が入っているので これを利用するともできます。 ※1 tipmsg でもユーザーリストは作成できます。 例 : mailmsg -u -d user_name ユーザーリスト例(自分で作成する場合) --- ここから --- username1[192.168.1.1] username2[192.168.1.2] machinename1[192.168.1.10] machinename2[192.168.1.11] --- ここまで --- ※ ユーザーリストからの検索は行単位の単純な文字列検索です。 各行に含まれている文字であれば、どんな文字列でも検索対象にできます。 逆に対象文字列が複数行に含まれる場合には、最初に見つかった行が 選択されます。 [] 内には DNS に登録されたマシン名をいれることもできます。 12.送信相手に別名をつけたい、複数人に一度に送りたい。 -a オプションをつけるとマシン名をエイリアスファイルから検索するように なります。 エイリアスファイルはデフォルトで $HOME/tipmsg/aliases です。 -a に続いてエイリアスファイルを指定することもできます。 エイリアスファイルにはユーザーリストでの検索に使う文字列を定義すること もできます。 一つのエイリアスに複数のユーザーを登録して送信することが可能です。 エイリアスファイルでは行頭にエイリアス名を記述して空白文字で区切り 実名を記述します。 例: nkf -s | mailmsg -d -a -u ProjectXXX エイリアスファイル例 --- ここから --- ProjectXXX username1 username2 a username1 b username2 hogehoge 192.168.1.1 192.168.1.2 192.168.1.3 --- ここまで --- 13.直接送信時のオプションが増えて面倒臭い tipmsg の送信機能を使うか、ご利用のシェルで alias に登録して下さい。(^^;) 14.recvmsg でメッセージを受けた相手に返信したい。 1. tipmsg を使いましょう :-) 2. -r オプションで最新のメッセージ受信先に返信できます。 -r オプションは最新受信者ファイルに記述されている送信者に メッセージを出します。(ファイルはデフォルトで $HOME/tipmsg/recent_recvfrom) 最新受信者ファイルは recvmsg で -r オプションを使うことで 更新できます。 -r の代わりに -R を使うと送信前にファイルの中身(送信先)を確認できます。 [オプション一覧] Mail Messenger で指定できるオプションの一覧です。 (各オプションは大文字でも指定できますが微妙に意味のことなるものがあります) -l : 通知した IP Messenger にログを残します -d : 標準入力からのデータを加工せずに送ります(-D で「返信」の有効化) -s : 封書で通知します -w : 錠付きの封書で通知します -c : 通知確認を送信要求をだします。(MailMsg では受けとれません。) -p : IP Messenger のポート番号を指定します -b : メイルの本文を指定行数だけ通知します -e : エディタを用いて送信メッセージを作成します(エディタ指定可) -f : メッセージをファイルから読み込みます(ファイル指定可) -h : 簡単な使い方を表示します -u : ユーザーリストからの検索を行います。(ユーザーリストファイル指定可) -a : エイリアスファイルを有効にします。 -r : 宛先をファイルから取得します。 -t : メッセージを標準出力に出力します。 (tipmsg と組み合わせての使用) 『指定』のできるものはオプションに続けて空白を開けずに指定を綴ります。 変更履歴 (01/11/05) Ver 0.91 userlist のデバグ、Makefile のデバグ、readme.txt の修正 (00/07/23) Ver 0.9 -t オプションを追加 (99/11/12) Ver 0.81 エディタ名に引数をつけることができるように改良(/bin/sh を経由) (99/11/08) Ver 0.8 空白を削除するためのパッチを組込み ユーザーリストでの指定オプションを用意 (マシン名への)エイリアス利用オプションを用意 環境変数 RECENTRECVFROM の参照オプションを用意 ダイレクト送信オプションで 'd' と 'D' を区別する。 (99/02/01) Ver 0.71 長いヘッダを読み込んだときに落ちるバグを修正 (get_target関数内) (99/01/22) Ver 0.7 machine_name 中の[]区間をIPアドレスとして認識するように変更 machine_name を hostname として判断した後に、失敗したあとで IPアドレスとして判断するように変更(いままでは逆) -d 指定時に Multicast ができるようになりました。 (98/12/10) Ver 0.6b IPMSGへの送信(受信はダメ)をできるようにした。 ようするに送信専用のコマンドライン版 IP Messenger です。 (98/12/04) Ver 0.52 正式リリース、 MailDeli のかわりに MSG PICK というソフトを説明 (procmail にしましょう^^;) < 99/11 (98/12/03) Ver 0.52b ソケットの作成タイミングを変更と作成失敗時のリトライを 追加して大量にメイルを受けとったときの通知抜け対策をした。 MailDeli に致命的なエラー(セマフォが消えない)を発見して MailDeli を1時削除。組み合わせの文章も削除した。 (98/11/27) Ver 0.51b 封書通知、錠付き通知の為の -s, -w オプションを用意。 別ソフト maildeli との組み合わせを Readme.txt に記述 (maildeli削除 '99) (98/11/26) Ver 0.5b 指定量のメール本文を通知する -b オプションを追加 Ver0.34をベースに作りVer0.4bで採用した自由文通知には対応しない。 (プログラム中の不必要な calloc を malloc に変更) (98/11/25) Ver 0.34 Readme.txt のメイルアドレスを変更 (97/01/23) Ver 0.34 メモリ使用に関係する BugFix とメールの1行が長い時の対応方法の変更 Readme.txt中の.forward に関する記述を変更 (97/01/07) Ver 0.33 IPMSGのリストへ加わらないフラグを追加 Ver 0.32 packet_noの作成方法を変更、timeとgetpidを併用。 (97/01/06) Ver 0.31 To:やSubject:が長い場合にもメモリエラーが発生しないように変更。 (96/11/22) Ver 0.30 -p オプションの追加。 (96/10/16) Ver 0.22 オプション判別部分のバグ修正。(gccでは発覚しないです。) readme.txt 中の SUN OS 4.3 -> SUN OS 4.1.3 に修正 (96/10/03) Ver 0.21 ヘッダ行取得部分のバグ修正、プログラムのあまりに見苦しいところを訂正 Ver 0.2 メールのヘッダ解析機能を作成。メール発信者名等を表示する。 Ver 0.1 単純にメールの到着を知らせる機能で mailmsgの雛形 誕生 謝辞 MailMsg の製作にあたってIPMSGの作者白水氏、IPMSG for Mac の藤田氏には、 お世話になりました。 Ver0.8 で取り入れた空白除去パッチは九州大の橋本さんから頂きました。 その他の助言、指摘をいただけた皆様も大変ありがとうございます。