mboxer scripting

Motoyuki Tanaka

Last Modified: March 13, 2000

mboxer を使ってメール処理を行う場合のスクリプトの書き方の解説です。 ここで取り上げる mboxer は 1.0gm2 以降のバージョンが対象です。それ以前 のバージョンでは、ここで解説したスクリプトは動かないと思いますので、注 意してください。


mboxer に何ができるのか?

具体的なスクリプトの説明に入る前に、mboxer の機能について説明しておきます。

mboxer は、メールをダウンロードし、そのメールのデータを色々と活用する ためのアプリケーションです。すべて AppleScript によって行うようになっ ています。大きく分けると、以下の3つの機能を持ったアプリケーションです。

【ダウンロード】

POP サーバーからメールをダウンロードしてファイルに保存する

mboxer は POP サーバからメールをスプールファイル(spool file)と呼んで いるファイルにダウンロードします。メールのデータを得る場合は、必ず、いっ たんスプールファイルへのダウンロードを行った上で、スプールファイルから メールのデータをとりだすという手順を踏む必要があります。

スプールファイル中には、メールは POP サーバー上に保存されていたままの形 式で保存されます。ですから、改行コードは CRLF で、日本語の場合は漢字コー ドは JIS 、またヘッダ部分の日本語は JIS が MIME 形式に変換されたものに なっています。ただし、各メールの先頭には以下のような形式のヘッダが1 行追加されます。

From ???@??? (ダウンロードした日時)

また、ファイル内の各メールの先頭位置(オフセット)を並べた TEXT リソー スがファイルに追加されます。

メールをダウンロードする際には、サーバー上に残したままにしておくことも 可能です。また、メールのヘッダだけをダウンロードするコマンド、サーバ上 のメールを削除するコマンド、あるいはサーバ上のメールの数をチェックする コマンドも備えています。

【メール取出】

保存されたファイルのメールをとりだしたり情報を得る

スプールファイルからメールのデータをとりだしたり、ヘッダに特定の文字を 含むメールを探したりできるようになっています。また、メールのデータを Mac 上で扱いやすい形に変換したうえで取り出す(MIME をデコードし、JIS を SJIS に変換し、改行コードを CR にする)ことも可能になっています。メー ルの本文のみ、あるいはヘッダのみを抜き出すことも出来ます。

【データ変換】

保存されたファイルを各種フォーマットに変換する

スプールファイルを別の形式のデータファイルに変換したり、フィルタによる 選別を行いながらスプールファイルを区分けすることが可能になっています。

以下の形式に変換が可能です。

  1. Eudora のメールボックスのファイル
  2. HTML のテキストファイル
  3. テキストファイル

これらの変換の際には、ヘッダに含まれる文字列をキーにして、保存先を振り 分ける(いわゆるフィルタリング)を行うことができます。

また、スプールファイルを、フィルタリングを行いながら分けることが出来る ようになっています。


mboxer のスクリプティングの注意点

mboxer は、色々と実装に制約を持った REALbasic によって作ったアプリケー ションです。このため、一般のアプリケーションに較べて少し変わった仕様に なっている部分があります。とくに、複数の作業を連続して行うスクリプトの 書き方は独特なスタイルを要求します。

先に述べた3つの機能のうち、【ダウンロード】と【データ変換】は、一部の 例外的なものを除いて、コマンド(イベント)は何の Reply も返しません。

そのかわり、作業が完了する(あるいは実行中にエラーが生じる)と、 post processor パラメータが指定されたアプリケーションに対して AppleEvent を送るようになっています。

ですから、コマンドの処理結果を確認したい場合や、処理が終了をうけて別の 処理を行いたいときなどは、かならず post processor にスクリプト自身のパ スを渡すようにし、mboxer からの AppleEvent を受け止めるようにする必要 があります。この場合、スクリプトは実行後も終了しないアプレットにしてお く必要があります。つまり、連続処理などを行うときには、アプリケーション としてスクリプトを作成しなければならないということです。

mboxer から post processor に送られる AppleEvent は、Class = 'mbox', ID = 'done' になっており、処理が無事に行われたときには、ダイレクトパラメータに処理 を行ったメールの数が文字列で収まっています。。何らかのエラーが生じたと きには、"Error" というメッセージが送られてくるようになっています。 mboxer から送られてくるメッセージを受け止めるには、以下のような AppleScript のハンドラーが必要になります。

on ヌevent mboxdoneネ myResult
  --- ここにメッセージを受けての処理が入る
end ヌevent mboxdoneネ

いわゆる AppleEvent を生の形で記述したハンドラーになります。 このままではスクリプトが書きにくいでしょうから、スクリプトが少しでも書 きやすいようにするおまけを付けてあります。

mboxer に付属の mboxer addition をシステムフォルダのスクリプティング機 能拡張フォルダに入れておいてください。すると、上記のような生の AppleEvent を書いたものではなく、以下のような普通の形のメッセージ・ハ ンドラとしてスクリプトが書けます(mboxer notified メッセージを受け止め る形になる)。

on mboxer notified myResult
  --- ここに処理が入る
end mboxer notified

なお、コマンド(イベント)を mboxer に送ったときに mboxer が受け付けら れない状況だった場合(処理中であるなど)には、イベントの受け取りを拒否 する(メッセージを理解しないというエラーになる)ようになっています。

このように、少し変則的な仕様になっているのは、POP サーバとの交信が非同 期で行われるということと、処理の終了までに時間がかかるものが多いという 理由です(REALbasic の仕様から来る制約もある)。

おそらく、ここまでの説明を読んでも、具体的にどのようなスクリプトを書け ばよいのかよく分からないと思いますが、一応、頭の片隅で覚えておいてくだ さい。後ほど、連続処理の説明の中で、具体的なスクリプトは示します。


【ダウンロード】

では、メールのダウンロードから説明します。

以下の説明において、POP サーバのアドレスは pop.my.host とし、アカウン ト名は uuu、パスワードは ppp であるとします。

メールをダウンロード: download in

POP サーバからメールをスプールファイルにダウンロードするには、download in コマンドを使用します。以下のような書式になっています。

  download in  file specification  -- スプールファイル
    POP server  string  -- POP サーバのアドレス
    user  string  -- アカウント名
    password  string  -- パスワード
    [deleting  boolean]  -- メールをサーバから削除するか?(デフォルトは削除しない=false)
    [index  list]  -- ダウンロードするメールの Index 番号のリスト
    [size limit  integer]  -- ダウンロードするメールのサイズ制限
    [post processor  alias]  -- Post Processor

一番単純なダウンロードを行うスクリプトは以下のようになります。

-- Script 01 --
tell application "mboxer PPC"
    activate
    download in POP server "pop.my.host" user "uuu" password "ppp"
end tell

このスクリプトで、mboxer と同じフォルダーの中のスプールファイル(ファ イル名は Preference で指定したデフォルトのファイル名)に、メールがすべ てダウンロードされます。ダイレクトパラメータでスプールファイルを指定し た場合には、そのファイルにメールがダウンロードされます。ダウンロードの 際には、データを上書きで書き込みます。この点は気をつけてください。

なお、mboxer はバックグランドで実行時にはダウンロードの処理が極端に遅 くなりますので、できれば、一番手前のアプリケーションとして実行してくだ さい。

Script 01 では、ダウンロードしたメールはサーバ上に残ったままになってい ます。もしダウンロードしたメールはサーバ上から削除したい時には、 deleting パラメータを true に指定します。

-- Script 02 --
tell application "mboxer PPC"
    activate
    download in POP server "pop.my.host" user "uuu" password "ppp" with deleting
end tell

index と size limit はダウンロードするメールを選別するためのパラメータ です。

Index はサーバ上の通し番号によってダウンロードするメールを指定す るものです。たとえば、{1,5,6} をパラメータに渡すと、POP サーバに保管さ れているメールのうちから1番目、5番目、6番目の3通のメールをダウンロー ドします。

size limit は、指定したサイズより小さなメールだけをダウンロードするよ うにするものです。取り込む最大のサイズをバイト単位で指定します。ですか ら、たとえば 10K 以下のメールだけをダウンロードしたいときには、以下の ようなスクリプトを使います。

-- Script 03 --
tell application "mboxer PPC"
    activate
    download in POP server "pop.my.host" user "uuu" password "ppp" size limit 10240
end tell

post processor は、先ほど述べたように、処理終了後にメッセージを送るべ きアプリケーションを指定するものです。アプリケーションの名前ではなく、 エイリアス型のデータで指定するようになっています。

メールのダウンロードを行い、ダウンロードが終了したらメッセージを表示す るスクリプトは以下のようになります。このスクリプトを「実行後、終了 しない」というオプションをチェックしたアプリケーション(StayOpen のアプレットと呼びます)として保存して実行します。

-- Script 04 --
on run
    set myPath to path to me
    tell application "mboxer PPC"
        activate
        download in POP server "pop.my.host" user "uuu" password "ppp" post processor myPath
    end tell
end run

on mboxer notified myResult
    activate me
    if myResult = "Error" then
        set myMsg to "エラーが起きました"
    else
        set myMsg to "ダウンロード終了です"
    end if
    display dialog myMsg
    quit
end mboxer notified

このように、post processor を利用する場合には、StayOpen のアプレットとして実行す る必要があります。

メールのヘッダをダウンロード: download headers in

サーバ上のメールのヘッダ部分だけをダウンロードするコマンドです。このコ マンドによってヘッダをダウンロードし、そのヘッダを解析することで実際に ダウンロードするメールを決定するといった処理に使います。

    download headers in  file specification  -- spool file
        POP server  string  -- POP server address
        user  string  -- POP account
        password  string  -- password
        [post processor  alias]  -- post processor
以下のスクリプトで、サーバ上のすべてのメールのヘッダ部分のみがスプール ファイルにダウンロードされます。

-- Script 05 --
tell application "mboxer PPC"
    activate
    download headers in POP server "pop.my.host" user "uuu" password "ppp"
end tell

サーバ上のメールを数える: check mails

POP サーバにあるメールを数えます。

    check mails
        POP server  string
        user  string
        password  string
        post processor  alias  -- Post Processor
このコマンドもリプライを返しません。つまり、メールの数は post processor でしか分からないということになります。mboxer notified メッセー ジのダイレクトパラメータに、サーバ上のメールの数が収められるようになっ ています。

以下のようなスクリプトを、StayOpen のアプレットで走らせることになります。

-- Script 06 --
on run
    set myPath to path to me
    tell application "mboxer PPC"
        activate
        check mails POP server "pop.my.host" user "uuu" password "ppp" post processor myPath
    end tell
end run

on mboxer notified myResult
    activate me
    if myResult = "Error" then
        set myMsg to "エラーが起きました"
    else
        set myMsg to "チェック終了です" & return & (myResult as string) & " 通のメールが届いています"
    end if
    display dialog myMsg
    quit
end mboxer notified

サーバ上のメールを削除する: delete mails

サーバ上のメールを削除するコマンドです。いったん削除したメールは2度と 復活できませんので、気をつけてください。

    delete mails
        OP Server  string  -- POP server address
        user  string  -- POP account
        password  string  -- POP password
        [index  list]  -- List of mail number (index numer) to delete
        [post processor  alias]  -- post processor

以下のスクリプトで、サーバ上のすべてのメールを削除します。

-- Script 07 --
tell application "mboxer PPC"
    activate
    delete mails POP Server "pop.my.host" user "uuu" password "ppp"
end tell

index パラメータで、サーバ上の通し番号によって削除するメールを指定する ことも出来ます。以下のスクリプトは、5番目と8番目のメールを削除するも のです。

-- Script 08 --
tell application "mboxer PPC"
    activate
    delete mails POP Server "pop.my.host" user "uuu" password "ppp" index {5, 8}
end tell


【メール取出】

このグループのコマンドは、すべてリプライを返します。

スプール中のメールを数える: count mails in

スプールファイルに記録されているメールの数を数えるコマンドです。

    count mails in  alias  -- スプールファイル
    Result:   integer  -- メールの数

ダイレクト・パラメータでスプールファイルを指定します。省略するとデフォ ルトのスプールファイルのメールの数を数えます。

このコマンドはリプライとしてメールの数を返します。

メールをとりだす: get mail from

スプールファイルからメールをとりだします。

    get mail from  alias  -- スプールファイル
        index  small integer  -- 何番目のメールをとりだすか
        [conversion  boolean]  -- データ変換を行うか
    Result:   string  -- メールのデータ

何番目のメールをとりだすのかを Index で指定する必要があります。index にリストを渡すことによって、複数のメールのデータを一度に取り出すことが 可能です。

Index で指定されたメールが1つの場合は、そのメールのデータを文字列で返 します。index がリストになっていて複数のメールが指定されていた場合には、 各項目にそのメールのデータを収めたリストが返ります。

一番単純なスクリプトは以下のようになります。

-- Script 09 --
tell application "mboxer PPC"
    set myMail to get mail from index 4
end tell

このスクリプトによって、myMail には、スプールファイル中の4番目のメー ルのデータが収まります。

-- Script 10 --
tell application "mboxer PPC"
    set myMails to get mail from index {4, 6}
end tell

このスクリプトによって、myMails には、スプールファイル中の4番目と6番 目のメールのデータがリスト形式で収まります。

注意しなければならないのは、このときのメールのデータというのは、POP サー バ上に保存されていたデータの形式そのままのものであるということです。 つまり、すべてのヘッダが含まれ、改行コードは CRLF になっており、漢字コー ドは JIS 、またヘッダ部分の日本語はすべて MIME エンコードされたままに なっています。

conversion パラメータを true にしておくと、漢字コードなどの変換を行い、 Mac 上で普通に扱えるテキストデータに変換されたメールをとりだすことが出 来ます。

-- Script 11 --
tell application "mboxer PPC"
    set myMail to get mail from index 10 with conversion
end tell

このスクリプトによって、myMail には、スプールファイル中の10番 目のメールのデータが SJIS に変換されて収まります。

ヘッダをとりだす: get headers from

スプールファイルから、指定されたメールのヘッダ部分だけを取り出します。

    get headers from  alias  -- スプールファイル
        index  small integer  -- 取り出すメールの番号
        [conversion  boolean]  -- 変換を行うかどうか
    Result:   string  -- Headers

メールのヘッダ部分だけで、メッセージは含まれません。

get mail from コマンド同様に、index にリストを渡すことで、複数のメール のヘッダを一度に抜き出すことが可能です。この場合、返り値はリストになり ます。

conversion パラメータが false の時(デフォルト)、すべてのヘッダが無変 換で抜き出されます(改行コードは CRLF で、日本語は MIME エンコードされ たまま)。conversion を true にすると、MIME のデコードを行い SJIS への 変換を行い、改行コードを CR に変換したものを返します。

メッセージ本文をとりだす: get body from

メールのメッセージ本文(body)を取り出します。

    get body from  alias  -- スプールファイル
        index  small integer  -- とりだすメールの番号
        [conversion  boolean]  -- 変換を行うかどうか

get mail from や get headers from コマンド同様に、index にリストを渡す ことで、複数のメールの本文を一度に抜き出すことが可能です。この場合、返 り値はリストになります。

デフォルト(conversion パラメーターが false)の場合は、index で指定さ れたメールのメッセージを無変換で取り出します。conversion が true の場 合には、漢字コードを SJIS に変換し改行コードを CR にした形でメッセージ を取り出します。

メールの情報を得る: get Info from

index で指定したメールの情報を得ます。

    get Info from  alias  -- spool file
        index  small integer  -- index of mail
    Result:   string

たとえば

-- Script 12 --
tell application "mboxer PPC"
    get Info from index 4
end tell

を実行すると、以下のような情報を返します。

2368
From: WSM Express <webmaster@antares.ecn.fpu.ac.jp>
To: "WSM Express" <wsmex@mtlab.ecn.fpu.ac.jp>
Subject: RE: Apple ShareIP 3.0の使い心地は?
Reply-To: 

5行からなるデータになっており、

  1. メールのサイズ(byte)
  2. From ヘッダ
  3. To ヘッダ
  4. Subject ヘッダ
  5. Reply-To ヘッダ

の情報が各行に収められています。Subject は MIME デコードの上、SJIS に 変換されたものが返ります。Reply-To ヘッダが含まれていなかった場合には、 ヘッダのタイトルのみが記されています。

ヘッダを検索して該当メールの番号を調べる: pick mails from

スプールファイル中の各メールのヘッダを検索して、検索文字列を含んでいた メールの番号の一覧を返します。

    pick mails from  alias  -- スプールファイル
        filters  list  -- フィルターのリスト
        [excluding  boolean]  -- 該当しなかったものを選ぶ(デフォルト=false)
    Result:   list  -- 該当したメールの番号のリスト

スプールの中から必要なメールをとりだすための検索、あるいはdownloads headers in でヘッダ情報のみをダウンロードしておき、このコマンドで必要なメールの番 号を検索してからメールをダウンロードするといった使い方ができます。

検索条件の指示には、以下のようなレコードのリストを filters パラメータと して渡すようになっています(mail filter というclass として定義してあり ます)。

{header:検索するヘッダ名, key:検索文字列}

たとえば、Reply-To: ヘッダに REALbasic という文字列が含まれているメー ル(REALbasic 関連のメーリングリストがこのパターン)を取り出したいとき には、

{header:"Reply-To:", key:"REALbasic"}

というレコードを使うことになります。大文字と小文字の区別はありません。

以下のスクリプトは、私のサイトが差出人になっているメールを検索します。

-- Script 13 --
tell application "mboxer PPC"
    activate
    set myList to pick mails from filters {{header:"From:", key:"@mtlab.ecn.fpu.ac.jp"}}
end tell

filters パラメータは、mail filter のリストになっている必要がありますの で、上記のように、検索条件を一つしか指定しない場合でも必ずリスト形 式にしてください

同じヘッダに対して、複数の文字列で検索したいときには、key に文字列のリ ストを指定することが出来ます。このとき、or 検索になります(どれかに該 当したものが抜き出される)

{header:"Reply-To:", key:{"REALbasic", "Scripting"}}

という指定によって、Reply-To ヘッダに REALbasic か Scripting という文 字が含まれているものを探すことになります。

Subject あるいは From 等のヘッダで日本語が書かれている可能性があるもの に対しては、日本語で検索文字列を指定することが出来ます。検索の処理の際 には、ヘッダの MIME をデコードし、かつ漢字コードを SJIS に変換したうえ で処理を行うようになっています。

{header:"Subject:", key:"評価"}

という指定で、Subject に「評価」という文字列が含まれるメールを検索する ことができます。

以下のスクリプトは、スプールの中から WSM Express のメールの本文だけを 抜き出して一つのファイルにまとめるサンプルスクリプトです。

-- Script 14 --
tell application "mboxer PPC"
    set mylist to pick mails from filters {{header:"To:", key:"wsmex@mtlab"}}
    
    set myData to ""
    repeat with thisM in mylist
        set myData to myData & (get body from index thisM with conversion) & return
    end repeat
end tell

set myFile to new file
set myRef to open for access myFile with write permission
write myData to myRef
close access myRef


【データ変換】

スプールファイルを各種フォーマットに変換します。このコマンド群は、基本 的にはリプライを返しませんので、post processor で実行結果を確認する必 要があります。

REALbasic の実装の関係で、コマンドの実行が終了するまで、スクリプトの実 行が停止すると思いますので、このコマンド群を利用するときには、make HTML index コマンドを除いて、ignoring application responses で実行する と、スクリプトの実行速度が速くなり、タイムアウトの心配が不要になるはず です。

スプールファイルを区分けする: filter mbox

スプールファイルを、ヘッダの検索によって区分けして、分割するコマンドで す。メールソフトで言うメールのフィルタリングにあたります。

    filter mbox  alias  -- スプールファイル
        to  file specification  -- デフォルトの保存先
        filing filters  list  -- 検索条件を指示した filing filter のリスト
        [post processor  alias]  -- post processor
        [deleting  boolean]  -- 作業完了時に元のスプールを削除するか?(デフォルトは削除しない=false)

to パラメータでデフォルトの保存先を指定します。次に述べる filing filters の指定に基づいた検索を行った際、該当しなかったメールが、このデ フォルトのファイルに保存されていくことになります。

filing filters パラメータでフィルタリングを行うための検索条件と保存の 指示を与えるようになっています。このパラメータには、次のようなレコード (filing filter という class として定義してあります)のリストを渡しま す。

{header:検索対象のヘッダ, key:検索文字列, FolderItem:保存先}

pick mails from コマンドの mail filter レコードに似ていますが、こちら は保存先を指定する FolderItem という項目があることに注意してください。

header および key の指定の方法は、pick mails from の mail filter と同 じです。header に検索するヘッダを、key に検索文字列を指定します。また、 key には複数の文字列のリストを渡すことも可能です。

以下のスクリプトは、Reply-To ヘッダに REALbasic が含まれるものを RB_Spool に、WSM Express を WSM_spool に振り分け、それ以外のメールは mySpool に保存するというものです。

-- Script 15 --
set mySpool to "Macintosh HD:Development:RealBASIC:mail-solution:mySpool"
set RB_Spool to "Macintosh HD:Development:RealBASIC:mail-solution:RB_Spool"
set WSM_Spool to "Macintosh HD:Development:RealBASIC:mail-solution:WSM_Spool"

tell application "mboxer PPC"
    activate
    filter mbox to file mySpool filing filters {{header:"Reply-To:", key:"REALbasic", folderItem:file RB_Spool} ツ
        , {header:"To:", key:"wsmex@mtlab", folderItem:file WSM_Spool}}
end tell

このコマンドは、指定されたファイルが存在しなかった場合には新たにファイ ルを作成しますが、すでに存在していたばあいには、それぞれ指定されたファ イルに追記でデータを書き込んでいきます。

なお、既存のファイルを指定する場合は、そのファイルは、必ず mboxer によっ て作られたスプールファイルでなければなりません。つまり、ダウンロードの コマンドか、あるいはこの filter mbox によって作成されたファイルでなけ ればならないということです。

スプールファイルは、冒頭でも述べたように、基本的にはメールが収められた テキストファイルなのですが、処理を高速化するため、各メールの先頭位置の オフセットをリストにしたリソースを持っています。

filter mbox は、このリソースの作成/更新も行おうとしますので、もしリソー スがないファイルをスプールに指定するとエラーになります。

この点は気をつけてください。

Eudora のメールボックスに変換する: convert to Eudora

Eudora で読み込める形式に変換するものです。なお、変換後のファイルを Eudora で開いたとき、最初に管理情報(TOC)の再構築が行われますが、これ は mboxer 側では Eudora の管理情報を作成しないためです。

変換の際には、filing filter による仕分けが可能になっています。

    convert to Eudora  alias  -- spool file
        to  file specification  -- デフォルトの保存先
        [filing filters  list]  -- 検索条件を指示した filing filter のリスト
        [post processor  alias]  -- post processor
        [deleting  boolean]  -- 作業完了時に元のスプールを削除するか?(デフォルトは削除しない=false)

検索&振り分けの指示の仕方などは、filter mbox コマンドと同じです。

この convert to Eudora コマンドは、ダイレクトパラメータのスプールファ イルの指定に、フォルダーを指定することが可能になっています。フォルダー を指定すると、フォルダー内のすべてのファイルを順に読み込んでいって、 Eudora のファイルへの変換を行っていきます。

この場合、スプールとして指定するフォルダーに mboxer のスプールファイル 以外のファイルが入っているとエラーになります。フォルダーを指定する場合 には、必ず、スプールファイルだけが入ったフォルダーを指定してください。

以下のスクリプトは mySpools フォルダーの中のスプールを Eudora のファイ ルに変換するスクリプトです。変換の際に、Reply-To: が REALbasic のもの と、WSM Express (To: ヘッダに wsmex@mtlab が含まれる)のメールは別の ファイルに振り分けるように指示しています。

-- Script 16 --
set mySpoolFldr to alias "Macintosh HD:Development:RealBASIC:mail-solution:spools:"

set mySpool to "Macintosh HD:Development:RealBASIC:mail-solution:myMails"
set RB_Spool to "Macintosh HD:Development:RealBASIC:mail-solution:RB_Mails"
set WSM_Spool to "Macintosh HD:Development:RealBASIC:mail-solution:WSM_Mails"

tell application "mboxer PPC"
    activate
    convert to Eudora mySpoolFldr to file mySpool filing filters {{header:"Reply-To:", key:"REALbasic", folderItem:file RB_Spool} ツ
        , {header:"To:", key:"wsmex@mtlab", folderItem:file WSM_Spool}}
end tell

メール毎にテキストファイルにする: convert to files

スプールファイル中のメールを、メール毎のテキストファイルに分解します。

    convert to files  alias  -- spool file
        to  file specification  -- デフォルトの保存フォルダ
        [filing filters  list]  -- 検索条件を指示した filing filter のリスト
        [excluding Received  boolean]  -- Received ヘッダを削除するかどうか?(デフォルトは削除しない=false)
        [conversion  boolean]  -- 漢字コードや改行コードを Mac 向けに変換するか(デフォルトは変換しない=false)
        [post processor  alias]  -- post processor
        [deleting  boolean]  -- 作業完了時に元のスプールを削除するか?(デフォルトは削除しない=false)

保存先の指定がフォルダーになる点は注意してください。filing filters パ ラメータに渡す filing filter の FolderItem もフォルダーになっている必 要があります。

先ほどの Eudora 変換の場合と同じ検索条件でファイル化を行うスクリプトは 以下のようになります。

-- Script 17 --
set myFldr to "Macintosh HD:Development:RealBASIC:mail-solution:myFiles:"
set RB_Fldr to "Macintosh HD:Development:RealBASIC:mail-solution:RB_Files:"
set WSM_Fldr to "Macintosh HD:Development:RealBASIC:mail-solution:WSM_Files:"

tell application "mboxer PPC"
    activate
    convert to files to file myFldr filing filters {{header:"Reply-To:", key:"REALbasic", folderItem:file RB_Fldr} ツ
        , {header:"To:", key:"wsmex@mtlab", folderItem:file WSM_Fldr}}
end tell

保存先がフォルダーの指定になっています。

指定されたフォルダーに、メールを1通ずつ1つのテキストファイルとして保 存していきます。その際のファイル名には、処理を行った日時のタイムスタン プと処理したメールの通し番号が組み合わさったものが使われます。

ファイルに書き込まれるデータの形式は、スプールファイル中の形式と全く同 じ、つまり、POP サーバ上にあったのと同じ形式のデータになっています。 改行コードは CRLF ですし、日本語は JIS 形式、さらにヘッダ中の日本語は MIME 形式にエンコードされたものになっているわけです。

ただし、conversion パラメータを true にしておくと、MIME ヘッダをデコー ドしたうえで漢字コードを JIS に変換し、また改行コードは CR に変換され た形でファイルが作成されます(つまり、エディタなどでそのまま読める形の ファイルになるわけです)。

excluding Received パラメータを true にしておくと、Receiced ヘッ ダ(メールが中継された経路が記録されているヘッダです)は削除されます。 これは、 UVJ Mailer の send raw file コマンドと組み合わせて、メールの転送(簡易メーリングリストの運用)を行う場合の ことを考慮したものです。

さらに、個々のファイルには、メールの Subject、From および Date ヘッダ の内容を記録した以下のようなリソースが追加されるようになっています。

TYPE = 'TEXT' ID = 1000 Name = "SUBJECT" --> Subject ヘッダの内容
TYPE = 'TEXT' ID = 1001 Name = "FROM" --> From ヘッダの内容
TYPE = 'TEXT' ID = 1002 Name = "DATE" --> Date ヘッダの内容

それぞれ、ヘッダ名は含まれません。また、日本語は SJIS の文字列にデコー ドされた形で収められています。

メール毎に HTML 形式のファイルにする: convert to HTML

スプールファイル中のメールを、HTML 形式メール(ブラウザで見ることがで きる形式のファイル)に変換して保存するコマンドです。

    convert to HTML  alias  -- spool file
        to  file specification  -- デフォルトの保存フォルダ
        [extension  string]  -- ファイルの拡張子(デフォルトは html)
        [filing filters  list]  --  検索条件を指示した filing filter のリスト
        [post processor  alias]  -- Post processor
        [deleting  boolean]  -- 作業完了時に元のスプールを削除するか?(デフォルトは削除しない=false)

convert to files 同様に、保存先としてはフォルダーを指定する必要があり ます。

HTML への変換の際には、mboxer の Preference で指定したヘッダを削除の上、ヘッダと本文がともに<PRE>タグによって 表示されるように指示したファイルに変換されます。もちろん、日本語(日本 語のヘッダ)は SJIS に変換されます。

extension パラメータによって、ファイルの拡張子を指定できます。このパラ メータによる指定がない場合には html が拡張子として使われて、ファイルが 作成されます。ファイル名は、変換処理を行った日時のタイムスタンプと、変 換を行った順番を組み合わせたものになります。

以下のスクリプトは、先ほどの convert to files と同じ設定で HTML への変 換を指示したスクリプトです。

-- Script 18 --
set myFldr to "Macintosh HD:Development:RealBASIC:mail-solution:myFiles:"
set RB_Fldr to "Macintosh HD:Development:RealBASIC:mail-solution:RB_Files:"
set WSM_Fldr to "Macintosh HD:Development:RealBASIC:mail-solution:WSM_Files:"

tell application "mboxer PPC"
    activate
    convert to HTML to file myFldr filing filters {{header:"Reply-To:", key:"REALbasic", folderItem:file RB_Fldr} ツ
        , {header:"To:", key:"wsmex@mtlab", folderItem:file WSM_Fldr}}
end tell

なお、convert to files の場合同様に、各ファイルには Subject, From, Date のヘッダ内容を記録したリソースが付加されます。

HTML の一覧ページを作る: make HTML index

HTML 化されたメールの Index ページ(一覧ページ)を作るコマンドです。 mboxer で作成された HTML 化されたメールしか掲示しませんので注意してく ださい。convert to HTML を利用して Web メーラーを組むことを考慮して 追加してあるコマンドです。

    make HTML index  alias  -- HTML 変換済みのメールが入っているフォルダ
    Result:   string  -- result

無事の実行されると、指定されたフォルダーの中に default.html という名前 で Index ページを作成します。個々のメールについて、Subject, From, Date が記されたリストを作成し、そこにリンクを張ったものになります。

以下のスクリプトは、先ほどの convert to HTML と連動して Index を作り、 それを Netscape で開くというスクリプトです。post processor による処理 ですので、StayOpen のアプレットとして実行する必要があります。

-- Script 19 --
property myFldr : "Macintosh HD:Development:RealBASIC:mail-solution:myFiles:"
property RB_Fldr : "Macintosh HD:Development:RealBASIC:mail-solution:RB_Files:"
property WSM_Fldr : "Macintosh HD:Development:RealBASIC:mail-solution:WSM_Files:"

on run
    set myPath to path to me
    tell application "mboxer PPC"
        activate
        convert to HTML to file myFldr filing filters {{header:"Reply-To:", key:"REALbasic", folderItem:file RB_Fldr} ツ
            , {header:"To:", key:"wsmex@mtlab", folderItem:file WSM_Fldr}} post processor myPath
    end tell
end run

on mboxer notified myResult
    if myResult is not "Error" then
        tell application "mboxer PPC"
            activate
            make HTML index alias myFldr
            make HTML index alias RB_Fldr
            make HTML index alias WSM_Fldr
        end tell
        tell application "Netscape Communicator"
            make new window
            open file (myFldr & "default.html")
            make new window
            open file (RB_Fldr & "default.html")
            make new window
            open file (WSM_Fldr & "default.html")
            activate
        end tell
    end if
    quit
end mboxer notified


他のソフトとの連携

mboxer を UVJ Mailer や CGI と組み合わせることで、様々なメールのデータ 処理システムを組むことが可能です。こうしたメール・ソリューションのサン プルについては、改めて説明のページを作る予定です。