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

メールが送れません!

発言者:イチロー
( Date Wednesday, June 12, 1996 21:21:11 )


超ど素人です。
メールフォームのCGIの件です。
メッセージのリプレイまではいくのですが、メールアドレスに飛びません。
TCP/IP Scripting Add PPCというデモバージョン2.06をスクリプティング機能追加にいれました。
メールアドレスとメールサーバー名は記入しました。
guest.acgiも立ち上げています。
どなたかおしえてください。
ichiro@jap.co.jp

イチロー さんからのコメント
( Wednesday, June 12, 1996 21:32:51 )

119エラーがでます!の発言をみて
guestmsg.acgi を動かす場合、

・guestmsg.acgi
・guestmsg.html
・messages フォルダー

の3つは、かならず同じフォルダーに入っていないといけないのですが、
この点は大丈夫ですよね?
というお答えがみつかりました。

messages フォルダーがありません。
messages フォルダーというのはどのようにつくればよいのでしょうか?
すいませんおしえてください。


田中求之 さんからのコメント
( Wednesday, June 12, 1996 23:12:20 )

お試しになっているスクリプトは guestMail ですよね? これは Messages フォル
ダーは使用しませんのでご安心ください。

ところで、

>メッセージのリプレイまではいくのですが、メールアドレスに飛びません。

というのは、具体的にはどのようになっているのですか? メッセージに対するお礼の
ページは表示されるけれども、メールが送られない、ということですか? お礼の
ページが無事に表示されるということは、スクリプトの実行は問題がなかったこと
になります。

スクリプトのメールサーバ、自分の名前、そして自分のメールアドレスを正しく
設定してあれば、メールは届くはずなんですが??(名前は英語にしておかないと
メールがエラーになりますので、気を付けてください)。

ところで、メールサーバーの種類はなんですか? Apple Internet Mail Server
の場合は、スクリプトを手直ししないとメールが送れないことが分かっています。
この点を教えてください。

イチロー さんからのコメント
( Thursday, June 13, 1996 13:38:02 )

早速のお返事ありがとうございます。
WWWサーバーはMacHTTP2.2、メールサーバーはMailShare-10fc5,DNSサーバーはMIND0.73a0です。

>スクリプトのメールサーバ、自分の名前、そして自分のメールアドレスを正しく
設定してあれば、メールは届くはずなんですが??(名前は英語にしておかないと
メールがエラーになりますので、気を付けてください)。

というのは送る側のことでよろしいのでしょうか?

イチロー さんからのコメント
( Thursday, June 13, 1996 13:39:20 )

早速のお返事ありがとうございます。
WWWサーバーはMacHTTP2.2、メールサーバーはMailShare-10fc5,DNSサーバーはMIND0.73a0です。

>スクリプトのメールサーバ、自分の名前、そして自分のメールアドレスを正しく
設定してあれば、メールは届くはずなんですが??(名前は英語にしておかないと
メールがエラーになりますので、気を付けてください)。

というのは送る側のことでよろしいのでしょうか?

イチロー さんからのコメント
( Thursday, June 13, 1996 13:50:35 )

追伸です。
Mailサーバーは一応反応しています。
commectionOPENして一秒後にCLOSEしています。
メッセージを送っているのはNETSCAPE2.01Ib7です。
NETSCAPE側での設定は関係ないのでしょうか?

イチロー さんからのコメント
( Thursday, June 13, 1996 14:16:22 )

追伸2
使用しているguestMail.acgiのスクリプトはこれです。一部わけもわからずいじりました。

tcp write data "From: " & "GuestMail acgi <" & YourEMail & ">" & crlf stream sss
			tcp write data "To: " & email_address & 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/IP Scripting Addition OSAX がインストールされて
---- いなければなりません。

---- TCP/IP Scripting Addition osax は Mango Tree Software のシェアウェアです
----  <http://www.mangotree.com/tcpscripadd.html>


property YourEMail : "ichiro@jap.co.jp" ---  あなたの E-Mail アドレスを設定してください
property MailHost : "202.229.79.16" --- あなたのメールサーバー( SMTP サーバー)を設定してください

property crlf : (ASCII character 13) & (ASCII character 10)
property LF : (ASCII character 10)

property http_10_header : "HTTP/1.0 200 OK" & crlf & "Server: WebSTAR/1.0 ID/ACGI" & crlf & ツ
	"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: "

on idle
	return (60 * 60 * 24)
end idle

on run
	if YourEMail = "" or MailHost = "" then
		beep
		display dialog "メールの設定を行わなければ使えません"
		quit
	end if
end run

---- ここからが CGI 処理の本番

on ヌevent WWWスsdocネ path_args ツ
	given ヌclass kforネ:http_search_args, ヌclass postネ:post_args
	try
		--- post_args のデコード
		set myList to DecodeJArgs post_args
		
		set guestName to item 1 of myList
		set guestMail to item 2 of myList
		set guestHome to item 3 of myList
		set myBody to item 4 of myList
		
		if guestName = "" or myBody = "" then
			--- 記入ミス
			return & redirect_header & "guestmsg.html" & crlf & crlf
		end if
		
		if guestMail = "" then
			set guestMail to "(記入なし)"
		end if
		
		if guestHome = "" then
			set guestHome to "(記入なし)"
		end if
		
		--- メッセージの改行コードの統一
		set myBody to xReturner myBody
		
		--- 受け取ったメッセージを整理する
		set myData to "アクセスした人からメッセージが届きました" & return & return ツ
			& "日時: " & ((current date) as string) & return & return ツ
			& "名前: " & guestName & return ツ
			& "メールアドレス: " & guestMail & return ツ
			& "ホームページ: " & guestHome & return & return ツ
			& "メッセージ:" & return & myBody
		
		--- メール送信
		
		set theResult to send_message(YourEMail, "Message from Guest", myData)
		
		if "ERROR" is in theResult then
			error theResult
		end if
		
		--- リプライ
		return http_10_header & "<TITLE>Thank You</TITLE>" & crlf ツ
			& "<h2>メッセージをありがとうございます</h2>" & crlf ツ
			& "今後ともよろしくお願いします"
		
	on error errMsg number errNb
		
		return http_10_header & crlf ツ
			& "<TITLE>Error</TITLE>" & crlf ツ
			& "<h1>Error</h1>" & crlf ツ
			& "<h3>処理中にエラーが生じました</h3><HR><P>" & errMsg
	end try
	
end ヌevent WWWスsdocネ


on send_message(email_address, email_subject, email_data)
	
	--- 日本語の Subject は使えません!!
	
	
	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
	
	set email_data to SjisToJis email_data
	set email_data to xReplace email_data search return replace crlf
	
	
	try
		
		set sss to (tcp connect to host MailHost maximum seconds 40 port 25)
		
		try
			
			readresponse(sss)
			tcp write data "mail from: <" & YourEMail & ">" & 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 "From: " & "GuestMail acgi <" & YourEMail & ">" & crlf stream sss
			tcp write data "To: " & email_address & 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
			return "OK"
			
		on error msg number num
			tcp close stream sss
			return "ERORR Unable to send mail"
		end try
		
	on error msg number num
		return "ERORR Unable to connect Mail Server"
	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 "sendMailError" number errorCode
	end if
end readresponse

田中求之 さんからのコメント
( Thursday, June 13, 1996 15:20:19 )

MailShare (今は Apple Internet Mail Server になっており、1.1 が出てます
よ)なのでしたら、次のようにスクリプトを追加してみてください。

send_message ハンドラーの2つめの try のあとにスクリプトを追加します。

  try
    
    set sss to (tcp connect to host MailHost maximum seconds 40 port 25)
    
    try
      
      readresponse(sss)
      tcp write data "HELO" & crlf stream sss  ---- この2行を
      readresponse(sss)                        ---- 追加する
      tcp write data "mail from: <" & YourEMail & ">" & crlf stream sss
      readresponse(sss)
      tcp write data "rcpt to: <" & email_address & ">" & crlf stream sss

これで試してもらえますか。

なお、NetScape の設定は一切関係ありません。

イチロー さんからのコメント
( Thursday, June 13, 1996 19:08:09 )

できました!本当にありがとうございました。2日間の格闘が報われました。
CGIにすごく興味がわいてきました。
それからMacintoshインターネットサーバー構築術は田中様がお書きになっていたのですね、
私も購入していましたが必要な部分しか読んでいなくて改めて見直してみると興味のある部分がたくさんありました。
素晴らしい本です。これからMacのサーバーでCGIをたくさん利用していきたいと思います。
AIMSもダウンロードしてつかってみます。
ちなみに私共のサーバーはWebサーバーをWindowsNT3.51のhttpsで立ち上げています。これは外部のプログラマーのセレクトです。この人はUNIX嫌いです。
当初はDNSもWinNTで立ち上げる予定でしたがうまくいかなかったようです。私自信としてはすべてをMacでできて今のパフォーマンスと同等であればいいのですけど。
それとUNIXでは一台のマシンで複数のドメインをもてるらしいのですが、Macでもできるのでしょうか?。情報がありましたらお教えください。
アドレスはwww.jap.co.jpです。一度ごらんなってください。
これからもよろしくお願いします。

イチロー さんからのコメント
( Thursday, June 13, 1996 19:51:56 )

すいません私のMacintoshインターネットサーバー構築術が第1版なのでAIMS1.1の場所がわかりません。
AIMS1.1はどこで手にはいりますでしょうか?。

田中求之 さんからのコメント
( Thursday, June 13, 1996 23:29:14 )

AIMS は Apple の CyberTech ホームページで手に入ります。ここには MacDNS
や e.g. 、NetFinder など、サーバー関連の見逃せないツールがいっぱいです。

それから、『構築術』の正誤表や最新情報もホームページで公開していますので
チェックしてください。


→  Apple CyberTech

田中求之 さんからのコメント
( Thursday, June 13, 1996 23:31:02 )

『Macintosh インターネットサーバー構築術』のホームページです


→  Cyber Barbarians Home Page