このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

EUDORAで受信したメール本文をテキストファイルに保存するには

発言者:PAPI
( Date Thursday, October 26, 2000 22:02:59 )


はじめまして、
CGIでタブ区切りテキストにした注文データをメールで自分宛に届けているのですが、現在はメールをテキストで保存して、ファイルメーカーに取り込んでいます。
しかし、たまにメールの保存や取り込み忘れがあるため顧客とのトラブルがあり、この作業を自動化したいのですが、その方法が分かりません。
メーラーはEUDORAで、本文のテキスト保存と、メールボックスの移動をアップルスクリプトにできれば、あとはファイルメーカーで操作できそうなのですが、お知恵をお借りできないでしょうか?

田中求之 さんからのコメント
( Saturday, October 28, 2000 17:10:38 )

Eudora のバージョンはいくつですか? フリーウェア版だと AppleScript
には対応していませんので、自動化は無理なのですが。

それと、

>メールボックスの移動

というのは、具体的にはどういうことなんでしょうか?

処理の手順を具体的に教えていただければ、もう少し具体的なアドバイスも
可能なのですが。

PAPI さんからのコメント
( Sunday, October 29, 2000 10:52:59 )

コメントありがとうございます。

アップルスクリプトを使うのは始めてですので、さっぱり分からなかったのですが、
メールボックスの移動は
move message 1 of mailbox mailboxName to end of mailbox endmailboxName
とういう感じで成功しました。

Eudoraは4.2をスポンサードモードで使用しています。

あれから色々やってみたのですが、現在はメッセージのBODYをスクリプタブルな
テキストエディタに引き渡して保存させて、それからファイルメーカーで取り込む
というスクリプトを作りました。
あまりスマートな方法ではないので、できれば余分なテキストエディタを起動させ
ずに直接EudoraでBODYを保存させたいのですが、それができずに悩んでいます。

<現在の手順 ファイルメーカー上で実行しています>
set mailboxName to "注文"
set endmailboxName to "注文転送終了"
set savefolderName to "Macintosh HD:注文保存:odr.txt"
set savefileName to "odr.txt"

tell application "Eudora"
  activate
  set Count_of_MES to count of message of mailbox mailboxName
  if Count_of_MES > 0 then
      set the clipboard to "EXIST"
      set Mail_of_MES to body of message 1 of mailbox mailboxName
      move message 1 of mailbox mailboxName to end of mailbox endmailboxName
      tell application "CuTE 0.6 PPC"
          activate
          make new document
          tell front document of application "CuTE 0.6 PPC"
              set selection to Mail_of_MES
          end tell
          save document "名称未設定" in file savefolderName as string
              close document savefileName saving no
          end tell
       else
          set the clipboard to "END"
       end if
end tell
tell application "ファイルメーカー Pro" 
       activate
end tell

田中求之 さんからのコメント
( Sunday, October 29, 2000 22:43:49 )

>あまりスマートな方法ではないので、できれば余分なテキストエディタを起動させ
>ずに直接EudoraでBODYを保存させたいのですが、それができずに悩んでいます。

     set Mail_of_MES to body of message 1 of mailbox mailboxName

によって、変数 Mail_of_MES の中にメールの本文の内容が収められるわけですから、
これを直接ファイルメーカーに取り込めばよいと思うのですが、どうですか?

たとえば以下のスクリプトは、Eudora の MuON というメールボックスにあ
るメールの内容を、ファイルメーカーの mailbox というデータベースに取
り込むスクリプトです。mailbox には、Subject, Date, From, Body という
4つのセルがあって、それぞれに該当するメールのデータを放り込むように
なってます。

tell application "Eudora"
  tell mailbox "MuON"
    set x to count messages
    repeat with i from 1 to x
      tell message i
        set myMsg to body
        set mySub to field "Subject:"
        set myDate to message date
        set mySender to field "From:"
      end tell
      makeRecord(myMsg, mySub, myDate, mySender) of me
    end repeat
  end tell
end tell

on makeRecord(myMsg, mySub, myDate, mySender)
  tell application "ファイルメーカー Pro"
    tell database "mailbox"
      set thisR to create new record
      go to thisR
      tell thisR
        set cell "From" to mySender
        set cell "Subject" to mySub
        set cell "Date" to myDate
        set cell "Body" to myMsg
      end tell
    end tell
  end tell
end makeRecord

このように、直接ファイルメーカーのデータベースに取り込んでしまうのが
よいと思います。

PAPI さんからのコメント
( Wednesday, November 01, 2000 16:06:54 )

ありがとうございます。

一度テキストファイルにしているのは、
ひとつに、引き渡す1レコードの項目数が多いため、仮にBodyというフィールドを
作成した場合、各フィールドに分ける作業が面倒で、タブで区切ったテキストを
取り込んだ方が一発で各フィールドに振り分けられるからで、

もうひとつに、項目数に変化があった場合でも、もう一度取り込み直して記憶
させればよい点にあります。

と勝手に思いこんでいるだけかもしれませんが…
(全部で30項目を計算式やスクリプトでフィールドに振り分ける方法しか知らないのです。)

そこで、Bodyをそのまま保存できたらいいなと思うのです。
分かりずらい説明で恐縮です。

kiki さんからのコメント
( Wednesday, November 01, 2000 20:37:41 )

便乗質問です・・・

田中先生のかかれたスクリプトで処理が終わった「Eudora の MuON というメールボックス」のメールを
「処理済MuON」等のメールボックスに移動するにはどうすればよいのでしょうか?

教えていただければ幸いです

田中求之 さんからのコメント
( Wednesday, November 01, 2000 23:02:57 )

>そこで、Bodyをそのまま保存できたらいいなと思うのです。

ということは、ようするに、メールの本文をテキストファイルに保存できれ
ばいいのでしょうか?

田中求之 さんからのコメント
( Wednesday, November 01, 2000 23:03:01 )

>処理が終わった「Eudora の MuON というメールボックス」のメールを
>「処理済MuON」等のメールボックスに移動するにはどうすればよいのでしょうか?

あのスクリプトですと、以下のようになりますね

tell application "Eudora"
  tell mailbox "MuON"
    set x to count messages
    repeat with i from 1 to x
      tell message i
        set myMsg to body
        set mySub to field "Subject:"
        set myDate to message date
        set mySender to field "From:"
        move to end of mailbox "処理済MuON" --- これを追加
      end tell
      makeRecord(myMsg, mySub, myDate, mySender) of me
    end repeat
  end tell
end tell

つまり

move  ... to end of mailbox "XXX"

を追加するだけです (^_^;;


kiki さんからのコメント
( Thursday, November 02, 2000 12:26:51 )

ありがとうございます>田中先生

move to end of mailbox "処理済MuON" の行を自分の環境に合わせて
早速やってみたところ下記のようなエラーが出ました
#"123"は"MuON"の替わりです

「Eudoraにて誤りが起きました:masage 1 of mailbox "123":を取り出すことは出来ません。利用が許されていません」

利用許可をEudoraのどこかで設定するのでしょうか?
Eudoraのバージョンは4.3.1-Jです

何度もすみません

春風はるか さんからのコメント
( Thursday, November 02, 2000 14:28:41 )

話の腰を折るようで申し訳ないですけど、

> ということは、ようするに、メールの本文をテキストファイルに保存できれ
> ばいいのでしょうか?

単に、それだけならば、MacPerl を使ってみてはどうでしょうか?

open MAILBOX, "mailbox";   #「mailbox」という名前のメールボックスを開く
open FILE, ">Order";       # 書き出し用に「Order」という名前のファイルを開く(作成する)
@Mail =<MAILBOX>;          # メールボックスの各行を配列にする
foreach $Text(@Mail)
{ if($Text =~ /適当なパターンマッチ/){print FILE, $Text}}
# 各行について、あるパターンに一致すれば、その行をファイルに書き出す。

という感じで、「適当なパターンマッチ」の部分を、本文の形式に合うようにつくれば出来ると思います。
あと、ファイルのパス(置き場所)の指定も必要ですけど。

MacPerlからアップルスクリプトも使えるので(そちらは良く知りませんが)
メールボックスの移動や、ファイルメーカーへの取り込みも一発でできるはずです。

田中求之 さんからのコメント
( Friday, November 03, 2000 10:40:49 )

まず

>masage 1 of mailbox "123"

となってますが、これは発言を書き込む際に message というのを書き間違
えたんですよね? スクリプトの方は message になっているものとして話
をします。

>利用許可をEudoraのどこかで設定するのでしょうか?

あれ? そんなエラーが出ましたか? Eudora のバージョンは私が今使っ
ているのと同じですが、そのようなエラーは出ませんし、mailbox にユーザー
の権限のような制限がかかることはないと思うのですが…

Eudora を何か特別な環境で動かしているのでしょうか?

kiki さんからのコメント
( Saturday, November 04, 2000 16:36:15 )

masageは間違いです・・すみません

特殊な環境といえば・・・
デフォルトでシステムフォルダーに入る「Eudora」のフォルダーをエイリアスにして本体は別のところに置いてあるぐらいです。
この件はデフォルト状態にし直してテストしてみましたがやはり同じエラーメッセージが出ます
moveの1行を加えなければきちんとファイルメーカーに入るんだけどなぁ・・
叉試行錯誤してみます・・・

ありがとうございます>田中先生