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

ファイルメーカとEudoraの連携方法

発言者:shoda
( Date Thursday, March 06, 1997 14:59:26 )


ファイルメーカに登録されているデータを定期的に電子メールで自動発信
したく思考錯誤しているのですが、スクリップトを定期的にの実行させるのは
ファイルメーカサーバ3.0のスケジュール機能でアップスクリップトの実行で。
なんとかできそうなのですが


1.ファイルメーカのスクリップト実行
 tell application "ファイルメーカー Pro"
  do script FileMaker script "スクリップト名"
end tell
 
ファイルメーカのスクリップトで条件で検索してファイルメーカ側にあらかじめ
登録してあるEudora-PROのヘッダ部用ファイル「メールの宛先とSUBJECTの部分」
と送り先に知らせたい更新情報のEudora-PROのBody部用ファイル(複数レコード
から注出したデータ)の2つのファイルを書き出します。

2.アップルイベントでEudoraを起動して(1)で作成した2つのテキストファイル
を新規メッセージに取込んで送信

というようなことをやりたいのですが素人なのでこのあとのEudora-PROへ書き
出したデータを取り込んで自動発信するAppleScliptの記述の仕方がよくわかり
ません。

お力をお貸しください。


田中求之 さんからのコメント
( Thursday, March 06, 1997 17:20:15 )

>登録してあるEudora-PROのヘッダ部用ファイル「メールの宛先とSUBJECTの部分」

これはどのような形式のファイルになっていますか? それ次第でスクリプトが
変わります。

Eudora を使ってメールを送るためのスクリプトは、一番単純な形は以下のような
ものになります。

on sendMailByEudora(ToAddress, mySubject, mailBody)
  tell application "Eudora Pro 2.3-J"
    set targetMail to make new message at end of mailbox "送信"
    tell targetMail
      set field "To" to ToAddress
      set field "Subject" to mySubject
      set body to mailBody
    end tell
    queue targetMail
    
    -- connect --- 即座に送るときにはこれを有効に
    
  end tell
end sendMailByEudora

このハンドラ-を呼び出せば、ToAddress に mySubject をサブジェクトにした
mailbody が内容のメールを送ることができます。

ですから、ファイルメーカー側から、ToAddress(送り先アドレス) と mySubject
(サブジェクト)をうまく渡してやれば、メールを送れることになりますので、ファイルに
書き出したデータを読み込む部分を追加してやればよいことになります。



shoda さんからのコメント
( Friday, March 07, 1997 09:29:00 )

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

なるほど!

>どのような形式のファイルになりますか
「タブ切りtext」で特定のフォルダに書き出そうかと思います。

>ファイルメーカー側から、ToAddress(送り先アドレス) と mySubject
>(サブジェクト)をうまく渡してやれば

「Address」と「Subject」を別々のTextファイルで書き出したほうがいいのかも
しれませんね。

Eudoraの「set field "To" to ToAddress」の部分に特定のフォルダ内の
TEXTファイルをsetする場合のスクリップトはどのようになるのでしょうか?

今、気づいたのですが、定期的に特定のフォルダにTEXTファイル書き出すと
メール送信後にフォルダ内のTEXTファイルを削除するか。
書き出すときに常に置き換えるように指定しないと「ファイルを入れ替えますか」
とアラートが表示されてしまうような気がします。困ったな

なにか対策はないでしょうか?
アドバイスよろしくお願いします

田中求之 さんからのコメント
( Friday, March 07, 1997 15:02:10 )

具体的にどのようなデータをメールで送ることになるのか分からないのですが、
たとえば、新製品のお知らせのように、同じ内容のメールを多くの人に送る
ことになりますか? それとも、一件毎に違う内容のメールを送り出すので
しょうか? こうした処理内容によってもどのようなスクリプトを組むべきか
は変わってきます。

たとえば、新製品のアナウンスのように、同時に同じ内容のメールを
多くの人に発送するのであれば、メールの内容と Subject は同じままで
宛先だけ違うわけですよね?

また、1件ごとに違うのであれば、そのつど、宛先と、サブジェクトと
内容が異なったメールを送る処理を組むことになります。

たとえば、一つのファイルに、1行目に宛先のアドレス、2行目にサブジェクト
そして3行目以降に内容を書いておくようにして、このファイルを Eudora が
メールとして送信するという処理を行わせることもできます。

ファイル名が重複した場合の上書きや、処理してしまったファイルの
削除などは、AppleScript で簡単に対応できますので、まったく問題が
ありません。

田中求之 さんからのコメント
( Friday, March 07, 1997 15:22:07 )

サンプルとして、宛名用ファイルと、ボディ用ファイルを読み込んでメールする
スクリプトを書いておきます。処理後はファイルを削除します。

宛名用ファイルには、各行に

宛先のアドレス<TAB>サブジェクト

という形式で、タブ区切りでアドレスとサブジェクトを並べておく、という
仕様になってます。

----


set TgFile to choose file with prompt "宛先とサブジェクトが書かれたファイルを選んでください" of type {"TEXT"}

set tgBody to choose file with prompt "メールの内容が書かれたファイルを選んでください" of type {"TEXT"}

set myRef to open for access TgFile
set myList to read myRef
close access myRef

set myRef to open for access tgBody
set myBody to read myRef
close access myRef

set oldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to {return}
set myList to text items of myList

set AppleScript's text item delimiters to {tab}

repeat with thisAdd in myList
  set thisAdd to contents of thisAdd
  if thisAdd ュ "" then
    set myAddress to text item 1 of thisAdd
    set mySubject to text item 2 of thisAdd
    sendMailByEudora(myAddress, mySubject, myBody)
  end if
end repeat

set AppleScript's text item delimiters to oldDel

--- ファイル削除

tell application "Finder"
  delete TgFile
  delete tgBody
end tell

--- 即座に送るときには以下を有効に

-- tell application "Eudora Pro 2.3-J" to connect 


----

on sendMailByEudora(ToAddress, mySubject, mailBody)
  tell application "Eudora Pro 2.3-J"
    set targetMail to make new message at end of mailbox "送信"
    tell targetMail
      set field "To" to ToAddress
      set field "Subject" to mySubject
      set body to mailBody
    end tell
    queue targetMail
    
  end tell
end sendMailByEudora

shoda さんからのコメント
( Friday, March 07, 1997 17:04:48 )

ありがとうございます。
そっそく使わしていただきます。

>具体的にどのようなデータをメールで送ることになるのか

ファイルメーカのデータ更新内容の情報をメールで通知する業務を
自動化したくて苦戦してました。

アドレス->メーリングリストのアドレス
Sabuject->ファイルメーカ側のスクリップトと関数で作成す
     るようにしてあります。

Body->  複数のレコードからスクリップトで検索した結果を
     計算フィールドで書き出すデータを整えて書き出します。
     このとき通知したものに「済」マークを付け次の定期発進時
     のFMPスクリップト実行の検索時に検索されないようにします。

AppleScriptはすばらしいですね