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

TCP/IP Scripting Additionについて

発言者:Homma
( Date Saturday, December 07, 1996 15:50:45 )


氏の、スクリプトを参考に、フォームをデコードしてメールで送るCGIを作りました。
HTMLの隠しフィールドで、通常のメールにするか、ファイルメーカーに取り
込めるようにコンマ区切りのテキストで送るか、選べるようし、ようやく完
成しました。

で、質問なんですが、メール送信の際に、プロバイダをメールホストにして
送るんですが、送られてきたメールの時間が、GMT表示になってるんです。

この部分、スクリプトでどうにかならないんでしょうか?お願いします。

田中求之 さんからのコメント
( Saturday, December 07, 1996 21:02:29 )

メールを送信する部分で Date ヘッダーをスクリプトで追加するようにしておけばOK
です。

具体的には、TCP でメールホストにデータを送信している部分で、

tcp write data "Date: " & ((DateToHeaderStr (current date) with as1123) & " +0900") & crlf stream sss

という1行を追加します(From: と To: の送信の後にでも挿入してください)
(Tanaka's osax 1.0 が必要です)

これによって、日本時間での Date ヘッダーが追加されるはずです。

お試しください。

Homma さんからのコメント
( Sunday, December 08, 1996 14:29:44 )

ご指導の通りスクリプトを追加してみましたが、構文チェックでエラーが出てしまいます。

A as 1123:true can't go after this DateToHeaderStr(current date)
とかいったような内容だったと思います。Tanaka's osax 1.0も入ってます。

Homma さんからのコメント
( Sunday, December 08, 1996 14:43:22 )

もしや、と思い、Tanaka's osax 1.0を再ダウンロードしました。
β版ではなかったのですが、Tanaka's osax 1.0ができてすぐに取ってきたものを使ってましたので。

で、上手くいきました。どうもありがとうございます。

Homma さんからのコメント
( Monday, December 09, 1996 17:30:18 )

上手くいきました、といった途端、サーバーーがフリーズ。
再起動後、CGIからエラーが返ってくるようになりました。

入れ直してもだめでした。理由がまったくわかりません。それまでちゃんと動いてたのに。

CGIを前のものに変えてみましたがこちらも結果は同じでした。

田中求之 さんからのコメント
( Monday, December 09, 1996 17:47:04 )

どんなエラーを出してますか?

Homma さんからのコメント
( Monday, December 09, 1996 18:25:14 )

ネットスケープには、
ACGIからの実行結果の受信に誤りが起きました(-1701)

WebSTARのウィンドウには、
要求されたディスクリプタが見つかりません。

と表示されます。

田中求之 さんからのコメント
( Monday, December 09, 1996 18:32:12 )

CGI のスクリプトエラーが起きていますね??

もう一度、スクリプトのコンパイルからやり直したんですよね?


Homma さんからのコメント
( Monday, December 09, 1996 18:44:42 )

そうなんです。コンパイルもちゃんとやり直したんですが・・・。

Homma さんからのコメント
( Tuesday, December 10, 1996 11:55:00 )

長くて申し訳ないんですが、基本にしているスクリプトです。おかしなところがあるでしょうか?


property crlf : (ASCII character 13) & (ASCII character 10)
property rt : (ASCII character 11)
property LF : (ASCII character 10)
property http_10_header : "HTTP/1.0 200 OK" & crlf & "Server: WebSTAR/1.0 ID/ACGI" & "MIME-Version: 1.0" & crlf & "Content-type: text/html" & crlf & crlf
property redirect_header : "HTTP/1.0 302 Found" & crlf & "Server: WebSTAR/1.0 ID/ACGI" & crlf & "MIME-Version: 1.0" & crlf & "Location: "
property workTime : ""
property mailAd : ""
property MailHost : "ここにホストのアドレスを入れます"
property mailTitle : ""
property mailerAd : ""
property mailerName : ""
property myThank : "http://dolphin.hakodate.or.jp/thank.html"
property myError : "http://dolphin.hakodate.or.jp/error.html"

on run
  set workTime to current date
end run

on idle
  if (current date) > (workTime + 300) then
    quit
  end if
  return 60
end idle


on ヌevent WWWスsdocネ path_args given ヌclass kforネ:http_search_args, ヌclass postネ:post_args, ヌclass scnmネ:script_name, ヌclass Kactネ:action
  
  set workTime to current date
  set userMsg to ACME parse args post_args without duplicates combined
  set myData to (((current date) as string) & ",")
  
  repeat with thisMsg in userMsg
    
    if item 1 of thisMsg is "mailto" then
      
      set mailAd to item 2 of thisMsg
      
    else if item 1 of thisMsg is "title" then
      set mySection to item 2 of thisMsg
      set mailTitle to (item 2 of thisMsg) & (ヌclass xsmpネ of (ヌevent XUVJgtdtネ))
    else
      set myData to myData & (item 2 of thisMsg) & ","
      
    end if
    
  end repeat
  set myData to mySection & "," & myData
  set myData to myReplacer(myData, crlf, " ")
  set myData to Convert Jcode (myData)
  
  set myResult to send_message(mailAd, mailTitle, myData)
  
  if myResult = "OK" then
    
    return redirect_header & myThank & crlf & crlf
    
  else
    return redirect_header & myError & crlf & crlf
  end if
  
  
end ヌevent WWWスsdocネ

on myReplacer(myText, searchStr, replaceStr)
  set oldDel to AppleScript's text item delimiters
  set AppleScript's text item delimiters to {searchStr}
  set myTempList to text items of myText
  set AppleScript's text item delimiters to {replaceStr}
  set myText to myTempList as string
  set AppleScript's text item delimiters to oldDel
  return myText
end myReplacer

on send_message(email_address, email_subject, email_data)
  
  set email_data to SjisToJis email_data
  set email_data to xReturner email_data
  set email_data to xReplace email_data search return replace crlf
  set mailerAd to "region@hakodate.or.jp"
  set mailerName to "RegionalMaster"
  
  
  try
    tcp start
    set sss to (tcp connect to host MailHost maximum seconds 40 port 25 transport OpenTransport)
    
    try
      
      readresponse(sss)
      tcp write data "HELO" & crlf stream sss
      readresponse(sss)
      tcp write data "mail from: <" & mailerAd & ">" & crlf stream sss
      readresponse(sss)
      tcp write data "rcpt to: <" & email_address & ">" & crlf stream sss
      readresponse(sss)
      tcp write data "data" & crlf stream sss
      readresponse(sss)
      
      tcp write data "X-Mailer: TCP/IP Scripting Addition" & crlf stream sss
      tcp write data "Mime-Version: 1.0" & crlf stream sss
      tcp write data "Content-Type: text/plain; charset=\"ISO-2022-JP\"" & crlf stream sss
      
      tcp write data "From: " & mailerName & " <" & mailerAd & ">" & crlf stream sss
      tcp write data "To: " & email_address & crlf stream sss
      tcp write data "Date: " & ((DateToHeaderStr (current date) with as1123) & " +0900") & crlf stream sss
      tcp write data "Subject: " & email_subject & crlf stream sss
      tcp write data crlf & email_data & crlf stream sss
      tcp write data "." & crlf stream sss
      readresponse(sss)
      
      tcp write data "QUIT" & crlf stream sss
      
      tcp close stream sss
      tcp finish
      return "OK"
      
    on error Msg number num
      tcp close stream sss
      tcp finish
      return "ERORR Unable to send mail" & return & return & Msg
    end try
    
  on error Msg number num
    tcp finish
    return "ERORR Unable to connect Mail Server" & return & return & Msg
  end try
  
end send_message


on readresponse(sstream)
  set AppleScript's text item delimiters to {""}
  
  repeat until (tcp ahead characters LF stream sstream)
  end repeat
  
  set myLine to (tcp read until characters LF stream sstream)
  set errorStr to characters 1 through 3 of myLine as string
  
  set errorCode to errorStr as integer
  if (errorCode ウ 400) then
    error myLine number errorCode
  end if
end readresponse

田中求之 さんからのコメント
( Tuesday, December 10, 1996 17:44:19 )

Tanaka's osax の古いコマンド(削除したコマンド)を使用しているのがエラーの
原因だと思います。

set mailTitle to (item 2 of thisMsg) & (ヌclass xsmpネ of (ヌevent XUVJgtdtネ))

となっている部分がありますが、ここを

set mailTitle to (item 2 of thisMsg) & (TimeStamp)

に変更してください。

getDateTime は 1.0 では削除し、そのかわり、タイムスタンプは TimeStamp で
一発で得られるようになっています。

Homma さんからのコメント
( Tuesday, December 10, 1996 18:01:51 )

削除されたコマンドだったんですね。気をつけてたんですが、うっかりしてました。

修正してやってみます。ありがとうございます。

Homma さんからのコメント
( Wednesday, December 11, 1996 07:41:48 )

成功しました!

お手数をおかけしました。