電信八号 API Copyright (C) 1996-1998 ISHIOKA, Takamitsu All Rights Reseved Version 1.0 1996/04/27 Version 1.1 1996/05/27 Version 1.2 1996/07/20 Version 1.3 1996/08/17 Version 1.4 1997/03/09 Version 1.5 1997/05/31 Version 1.6 1997/11/26 Version 1.7 1998/02/08 Version 1.8 1998/04/06 Version 1.9 1998/07/31 ■はじめに デンパチを他のアプリケーションから制御するために、DDE 等によるデンパチサー バ API を決めました。 また、デンパチの機能の一部を他のアプリケーションに代替させることができる ように、デンパチクライアント API も決める予定です。 これらの API を利用して、デンパチを利用する、あるいは、デンパチの使い勝 手を向上させるアプリケーションを自由に作ってください。 API は必要に応じて逐次追加して行きますので、アイデアをお持ちの方はご連絡 ください。 デンパチの配布アーカイブファイルに入っている mainfrm.cpp というファイル は、クライアント(デンパチにコマンドを送るアプリ)のサンプルで、私が実験 のために作成したプログラムのソースの一部です。 ■サーバ API 他のアプリケーションからデンパチを制御したり、デンパチの機能を利用してデー タを取得したりするための API です。 ● WM_DDE_EXECUTE ------------------------------------------------------------------------ サービス名 Den8 トピック名 Command ------------------------------------------------------------------------ 注:以下の説明の中で「フォルダ」というのは、Windows のフォルダのことでな く、デンパチのフォルダ (*.fld, *.can) を意味します。 アプリケーション定義返却値は、0が成功をあらわします。 Version 1.0 ------------------------------------------------------------------------ コマンド名 Update 引数1 フォルダのフルパス。 引数2〜n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。 複数個指定する場合は、昇順に並べなければならない。 動作 指定したフォルダの指定したメールを読み込み、表示を更新する。 引数が一個なら、そのフォルダに対して「最新の情報に更新」を行 ない、かつアクティブにする。 例 [Update("c:\Share\Den8\In.fld",0147,0258,0369)] ------------------------------------------------------------------------ Version 1.1 ------------------------------------------------------------------------ コマンド名 Select 引数1 フォルダのフルパス。 引数2〜n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。 複数個指定する場合は、昇順に並べなければならない。 動作 指定したフォルダをアクティブにし、アイコン化されていれば復元 する。更に、そのフォルダのメールの選択状態をいったんクリアし、 引数2以降があれば、それらのメールを選択する。 例 [Select("c:\Share\Den8\OUT.FLD",0147,0258,0369)] ------------------------------------------------------------------------ Version 1.1 ------------------------------------------------------------------------ コマンド名 Move 引数1 移動先フォルダのフルパス。 引数2 移動元フォルダのフルパス。 引数3〜n メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。 動作 引数2のフォルダにある3〜nのメールを、引数1のフォルダに移 動する。 例 [Move("c:\Den8\TRASH.CAN","c:\Den8\IN.FLD",0012,0013)] ------------------------------------------------------------------------ Version 1.1(Version 1.8 で引数3をオプショナルにした) ------------------------------------------------------------------------ コマンド名 Reply 引数1 返信対象メールを含むフォルダのフルパス。 引数2 返信対象メールファイル名の拡張子を取り除いたもの、つまり、4 桁の数字。 引数3 返信用原稿の出力ファイルのフルパス(オプショナル)。 動作 引数1、2によってあらわされるメールに対する返信の原稿を作成 し、引数3で指定されるファイルに書き込む。 引数3が省略されていたら、メール編集用プログラムを呼び出し、 エディタ終了後に送信動作を起こす。 例 [Reply("c:\Den8\IN.FLD","8823","c:\Windows\Temp\foo.tmp")] ------------------------------------------------------------------------ Version 1.1 ------------------------------------------------------------------------ コマンド名 Send 引数1 送信したいメールファイルのフルパス。このファイルの内容は、デ ンパチのメールの形式でなければならない。場所はどこでもよく、 デンパチのフォルダに入っている必要はない。 動作 メールを解析し、送信先アドレスを抽出して送信の確認を求める。 その先はデンパチで新規メールを送信する時と同じ。 例 [Send("c:\Windows\Temp\foo.tmp")] ------------------------------------------------------------------------ Version 1.1 ------------------------------------------------------------------------ コマンド名 Receive 引数なし 動作 受信を行なう。 例 [Receive] ------------------------------------------------------------------------ Version 1.2 ------------------------------------------------------------------------ コマンド名 Focus 引数1 フォルダのフルパス 引数2 メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。 動作 指定したフォルダをアクティブにし、アイコン化されていれば復元 する。更に、そのフォルダのメールの選択状態をいったんクリアし、 引数2があれば、そのメールにキャレットを移動し、かつ選択する。 そのメールをリスト表示するために、必要ならばスクロールする。 例 [Focus("c:\Share\Den8\IN.FLD",0147)] ------------------------------------------------------------------------ Version 1.6 ------------------------------------------------------------------------ コマンド名 Realize 引数1 フォルダのフルパス 引数2 メールファイル名の拡張子を取り除いたもの、つまり、4桁の数字。 引数3 出力先ディレクトリのフルパス。 動作 指定されたフォルダの指定されたメールがマルチパートメッセージ ならば、指定されたディレクトリ下にパーツの階層構造を作成する。 その形式は電信八号がマルチパートメッセージを表示するときに作 業用に作成しているものと同じ。 例 [Realize("c:\Share\Den8\IN.FLD",0147,"c:\foo")] ------------------------------------------------------------------------ Version 1.8 ------------------------------------------------------------------------ コマンド名 Attach 引数1 電八形式のメールファイルのフルパス 引数2〜n 添付したいファイルのフルパス 動作 引数1で指定されたメールファイルに2〜nで指定されたファイル を Base64 エンコードして添付する 例 [Attach("c:\Temp\_den0000.tmp","c:\foo\bar.zip")] ------------------------------------------------------------------------ Version 1.8 ------------------------------------------------------------------------ コマンド View 引数1 次の文字列のうちどれか一つ Prev Next PrevRecv NextRecv 動作 現在アクティブなフォルダでフォーカスされているメールの、 一つ前のメール (Prev) 一つ後のメール (Next) 一つ前の未読メール (PrevRecv) 一つ後の未読メール (NextRecv) を表示する。 例 [View("NextRecv")] 注 「表示」はデンパチ側でダブルクリックする場合と同じ処理を行う。 従って、同じビューワーを複数個起動されたくない場合は、ビュー ワ側が、system トピックの open コマンドなどのサーバー機能を 持つ必要がある。詳細は後述の「クライアント API」を参照。 ------------------------------------------------------------------------ Version 1.8 ------------------------------------------------------------------------ コマンド名 Forward 引数1 転送対象メールを含むフォルダのフルパス。 引数2 転送対象メールファイル名の拡張子を取り除いたもの、つまり、4 桁の数字。 動作 引数1、2によってあらわされるメールに対する転送の原稿を作成 し、メール編集用プログラムを呼び出し、エディタ終了後に送信動 作を起こす。 例 [Forward("c:\Den8\IN.FLD","8823")] ------------------------------------------------------------------------ ------------------------------------------------------------------------ サービス名 Alias (サーバーは Alias.exe) トピック名 system ------------------------------------------------------------------------ Version 1.7 ------------------------------------------------------------------------ コマンド名 Append 引数1〜n メールアドレス 動作 RootAlias の直下に、指定されたメールアドレスを登録する。 例 [Append("ishioka@tky.3web.ne.jp")] 備考 サーバーを起動するには、Alias.exe の場所および住所録ファイル の名前を知る必要があります。これらの情報は、denshin8.ini の [Global Parameters]セクションの AliasEditor エントリーおよび AliasFile エントリーから取得できます。 denshin8.ini の場所は、常に denshin8.exe の場所と同じです。 ------------------------------------------------------------------------ ● WM_DDE_POKE ------------------------------------------------------------------------ サービス名 Den8 トピック名 Command ------------------------------------------------------------------------ Version 1.3 ------------------------------------------------------------------------ アイテム名 Headers データ形式 CF_TEXT Toの値 \0 Ccの値 \0 Bccの値 \0 Subjectの値 \0 転送メール \0 ToやCcの値を複数ならべる場合はカンマで連結 <転送メール>というのは、そのアドレスへ転送したいメールのパス。 新規作成の場合は "New" ------------------------------------------------------------------------ 上記以外に、システムトピックで、open コマンドを受け付けます。 open の引数には、起動時のコマンドライン引数と同じものを指定可能です。 ------------------------------------------------------------------------ サービス名 DENSHIN8 トピック名 system ------------------------------------------------------------------------ ------------------------------------------------------------------------ コマンド名 open 引数 コマンドライン引数と同じ 動作 コマンドライン引数と同じ 例 [open(-receive)] 例 [open("c:\boo\foo.fld")] ------------------------------------------------------------------------ ■クライアント API 電信八号がクライアント側になる DDE 通信の仕様です。 ●WM_DDE_EXECUTE ------------------------------------------------------------------------ サービス名 [サーバに依存しない設定]の[メール表示用プログラム]に書かれた コマンドラインの実行モジュール名。たとえば RE8 トピック名 system ------------------------------------------------------------------------ Version 1.1(昔からあるのですがドキュメント化を忘れていました) ------------------------------------------------------------------------ コマンド名 [サーバに依存しない設定]の[メール表示用プログラム]の[DDE]の ところに描かれた文字列。例えば open。 引数1 メールファイルのフルパス 動作 そのファイルを表示する 例 [open("C:\Den8\IN.FLD\0000.txt")] ------------------------------------------------------------------------ ■コマンドラインオプション 「組み合わせ不能」と明示されているもの以外は、任意のオプションを組み合わ せることができます。 Version 1.1 ・宛先を指定しての起動 denshin8.exe -mailto
例)denshin8.exe -mailto ishioka@tky.3web.ne.jp 起動し、
を To: に埋め込んでエディタを立ち上げる。 -receive とは組み合わせ不能 ・フォルダ状態の復元を行なわない denshin8.exe -norestore 2つ目以降のインスタンスでは無効 ・起動後自動的に受信する denshin8.exe -receive ・アイドル状態になると自動的に終了する denshin8.exe -quitonidle -mailto とは組み合わせ不能 2つ目以降のインスタンスでは無効 Version 1.5 ・起動後新規作成(後、送信)動作を起こす denshin8.exe -new [ ...] 例)denshin8.exe -new attachment="c:\temp\boo.gif" attachment="c:\temp\foo.dcr" inline="c:\temp\woo.html" は再生方法の指定と添付ファイルのパスを = で結合したもの。 再生方法の指定は、attachment または inline 。 attachment はファイルにセーブする指定(ただし、実際にどのような動作 になるかは相手側メールソフトの種類と設定に依存するかも)。 inline はその場で実行(表示)する指定(ただし、以下同文)。 添付は引数で与えられた順序で行われる。 他のコマンドラインオプションとは組み合わせ不能。 Version 1.9 ・起動後自動的にすべての未送信メールを送信する denshin8.exe -send 巡回先に指定された最初のサーバーへ送信する。巡回先の指定がなければ、 現在のサーバーを使う。 ■他のアプリとの連携に関するその他の情報 Version 1.1 ・メインウィンドウハンドルの取得 クラス名 "DeN8:MaIn" Version 1.4 ・キャッシュ (*.fld) の形式 先頭がキャッシュヘッダ(フォルダに関する情報を格納する部分)で、その後ろ にそのフォルダの最大のメール番号 + 1 個のレコードが続きます。 つまり、n 番のメールのキャッシュレコードの位置は、次の式で与えられます。 sizeof(CACHE_HEADER) + sizeof(CACHE_RECORD) * n 欠けた番号(メールが存在しない番号)のレコードは、status の値が NONE と なっていることにより識別します。 // キャッシュヘッダ typedef struct { char cIdentifier[64]; // "Den8 Cache Format 3.01" BOOL bDirty; // 正常にセーブされていない印 BOOL bOutFolder; BYTE bSortByDate; BYTE bSortByFrom; BYTE bSortBySubject; BYTE bReverseOrder; int nUnreadCount; int nCaretIndex; int nTopIndex; char cPadding[40]; } CACHE_HEADER; BOOL 4 バイト BYTE 1 バイト int 4 バイト ヘッダの合計 128 バイト // キャッシュレコード typedef struct { STATUS status; // X-Status time_t timeDate; // 日付時刻 int nSize; // メールサイズ char cHeader [500]; // 文字列情報 } CACHE_RECORD; // cHeader の中身 // \0\0\0\0\0 // ステータス typedef enum { NONE = 0, RECV = 1, READ = 2, RPLY = 3, RPLD = 4, WRIT = 5, SENT = 6, ERRR = 7 } STATUS; STATUS 4 バイト time_t 4 バイト キャッシュレコードの合計 512 バイト