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

UVJ MailerでguestMail_2

発言者:あつ
( Date Tuesday, October 10, 2000 20:35:28 )


いつも大変お世話になっております.
現在,NetEvents版のGuestMail_2を使わせていただいてフォームからメール
を受けているのですが,最近タイムアウトになる事が多くて困ってました.

そこで,メール送信の部分をUVJ Mailerにやって貰おうと思い,CGIを
書き換えていたのですが,GuestMail_2のどこの部分が必要なのか
(どこを削ってもいいのか)がちょっと分かりません.
やりたいことはフォームからデータを受けて整理してメールを送る.
(そのままです...)

とりあえずNEの処理の所をUVJ Mailer用に書き換えて動いたのですが,
リプライのタイミングも少し不安です.

そのほか注意すべき事なども教えていただけるとうれしいのですが..

田中求之 さんからのコメント
( Thursday, October 12, 2000 15:08:34 )

UVJ Mailer を使う場合には、send_message ハンドラーを UVJ mailer の呼
びだしに書き換えることになります。メインのハンドラーの方は変更する
必要はありません(UVJ mailer もメール受付時のエラーに対しては Error
という文字列を返しますので)。

具体的には、send_message ハンドラーを以下のように書き換えます。

on send_message(email_address, email_subject, email_data)
  
  if email_address = "" or email_data = "" then
    return "ERROR"
  end if
  
  if "@" is not in email_address then
    return "ERROR Invalid Mail Address"
  end if
  
  tell application "UVJ Mailer PPC"
    send mail email_data to email_address subject email_subject
  end tell
  
  return the result
  
end send_message

また、readresponse ハンドラー(スクリプトの一番最後のハンドラー)は
不要になります。

さらに、UVJ mailer 側でデフォルトのメールサーバやアドレスの設定は
行っておくことになっていますので、スクリプトの冒頭で宣言してある
YourEMail と MailHost の2つのプロパティも不要になります。

UVJ Mailer を使うと、実際のメール送信が完了する前にリプライを返す
ようになりますので(メール送信を受け付けた瞬間にリプライを返せる)
少々混んだサーバでもタイムアウトすることはなくなると思います。

あつ さんからのコメント
( Thursday, October 12, 2000 18:48:53 )

ありがとうございます.

だいたい試してみたとおりです.エラーの返しの所と 
readresponseハンドラの所が不安だったんです.
あとは文字周りの所を調整すれば動かせます.

もう一つ質問なんですが,メールを送ったあとのUVJ Mailerは
1.起動したまま
2.「寿命」で一定時間毎に終了
3.stay open で送る度に終了
のどれがいいんでしょう?

田中求之 さんからのコメント
( Thursday, October 12, 2000 19:01:54 )

もしサーバを1週間に一度程度はリスタートする(たとえばメンテナンス等)
ならば、起動したままにしておくのがベストです。というのも、起動には
それなりに時間がかかりますし、ファイルの読み書きやメモリーの処理など、
エラーを引き起こす率の高い操作が含まれますので、サーバマシン上では
極力、アプリケーションの頻繁な起動は避けたほうがよいとおもいます。
(個人的な意見です)

もしサーバマシンが、基本的にはリスタートを行ったりしないものでしたら、
寿命を24時間とか48時間のように長めにとって、自動終了させるのが
よいと思います。サーバマシン上で stay open を false にして、そのつど
終了させるのは、あまりお勧めできません(問題は起きないはずですが)

あつ さんからのコメント
( Friday, October 13, 2000 11:13:00 )

ありがとうございます.参考になります.

やっぱり,熟練者の「個人的な意見」はとてもありがたいです.
初心者・初級者にとっては,なかなか得ることのできない貴重な資料ですよね.

たびたびすみませんが,「寿命」による終了も stay open と同じく
Queue に残っているメールを吐き出してから終了と考えていいんですよね.

田中求之 さんからのコメント
( Friday, October 13, 2000 12:46:49 )

>「寿命」による終了も stay open と同じく
>Queue に残っているメールを吐き出してから終了と考えていいんですよね.

そうです。寿命のチェックは、メールが Queue に無いときにしか行いません
ので、メールが残っている状態で終了することはありません。