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

WebSTAR 3.0.1 + NetEvent + Tanaka's osaxでのメール送信

発言者:大門
( Date Wednesday, October 27, 1999 16:57:51 )


WebSTAR3.0.1(英語版)を使ってサーバーを立ち上げている大門と申します。
NetEvent + Tanaka's osaxを使ってメールの送信を試みたのですが、うまく
いきません。

環境:Mac OS 8.6を使用。NetEventは1.2.1、Tanaka's osaxは1.3です。

状況:クライアント機のブラウザ上でguestmsg.htmlにアクセスし、
フォームを記入した後送信をすると「ありがとうございました」の
メッセージが出ます。ところが、指定したはずのメールアドレスには
いつまでたってもメールは送信されてきません。メールのあて先、
SMTPホストの記入に誤りはないと思うのですが、どなたかアドバイス
していただけませんでしょうか?

単純な質問で恐縮なのですが、guestMail2.acgi.(NE).txtと
guestmsg.htmlの両方にメール送信先を記入しなければならないのは
なぜなのでしょうか?guestMail2.acgiがフォームからのメッセージ
を受け取った時点でacgiに記入されている宛先に送信してしまえば
いいように思うのですが....それともフォームの宛先とacgiの宛先
を照合しなければならないような仕組みになっているのでしょうか?
あるいは私が何かとんでもない勘違いをしているのでしょうか?

(類似の環境でメールが送れないというメッセージはありましたが
(たとえば98年9月のwamuさんのメッセージ)、私の場合と同一の
ものは見つけられませんでしたので、ポストさせていただきました。)

田中求之 さんからのコメント
( Saturday, October 30, 1999 13:35:40 )

出張しており返事が遅くなりました。

CGI ではなく、スクリプトでメールを出すというテストは行われましたか?

guestMail2.acgi.(NE).txt のコピーを作って、run ハンドラーを以下のように
書き換えたものを走らせてみて、メールが送られるかどうかを確かめてみて
ください。

on run
    send_message("your@mail.address", "test", "Test だよん")
end run

* your@mail.address はご自分のメールアドレス


>単純な質問で恐縮なのですが、guestMail2.acgi.(NE).txtと
>guestmsg.htmlの両方にメール送信先を記入しなければならないのは
>なぜなのでしょうか?

私のミスです (^_^;;  スクリプトの方のアドレスは不要ですね。

もともとも guestMail.acgi.(NE).txt のスクリプトを書き換えたものなの
ですが、書き換えの際に、余分なものを削るのを忘れていました。

大門 さんからのコメント
( Monday, November 01, 1999 12:08:57 )

田中先生、お返事ありがとうございます。書き換えてスクリプトを走らせて
みたところ、以下のようなエラーがでました。

"ERORR Unable to send mail

501 HELO requires domain address
"

該当箇所の履歴は以下の通りです。
  StatusStream 3
    --> "OPEN"
  WriteStream 3 data "HELO
"
  StatusStream 3
    --> "DATA"
  StatusStream 3
    --> "DATA"
  ReadStream 3 amount 4096
    --> "501 HELO requires domain address
"

Junnama さんからのコメント
( Monday, November 01, 1999 13:16:51 )

私のところでも同様のことが起こった経験があります。

telnetでのメール送信関連の資料を調べつつ、
以下のような方法ではどうかと思い試したところうまくいきました。

WriteStream sss data ("HELO" & crlf)

のところを

WriteStream mySession data ("HELO " & MailHost & crlf)

と書き換えてみて下さい。

501 HELO requires domain addressということなので
おそらく"HELO "のあとに自分のdomain addressを入れる必要が
あるのではないでしょうか。

Junnama さんからのコメント
( Monday, November 01, 1999 13:19:16 )

すいません。

WriteStream mySession data ("HELO " & MailHost & crlf)
       ↑
WriteStream sss data ("HELO " & MailHost & crlf)の誤りです。

田中求之 さんからのコメント
( Monday, November 01, 1999 14:39:41 )

Junnama さんからご指摘のように、HELO コマンドのパラメータが抜けて
いるのがエラーの原因ですね。このスクリプトを書いた当時は、HELO だけ
で受け付けてくれるサーバが多かったのですが、昨今の spam 騒ぎによって
HELO にはちゃんと発信マシンのホスト名(または IP  アドレス)を渡す
必要があります。

で、修正点ですが、Junnama さんの方法でもうまくいくことはあるのですが、
正確を期すならば、HELO コマンドには、メールの発信側のドメイン名を渡す
ことになっているはずですので、send_message ハンドラの

WriteStream sss data ("HELO" & crlf)

を

WriteStream sss data ("HELO [192.168.0.1]" & crlf)

* 192.168.0.1 の部分に、このスクリプトを走らせるマシンの IP アドレス
を入れる

という具合に書き換えてみてください。

今夜にでもSMTP の規格を確認してみますが、これでいけるはずです。

大門 さんからのコメント
( Monday, November 01, 1999 17:50:21 )

田中先生、Junnamaさん、お教えいただいた通りに記入し直したら、
スクリプトのみの送信、フォームからの送信のいずれも成功しまし
た。本当にありがとうございました。

田中求之 さんからのコメント
( Monday, November 01, 1999 23:46:00 )

うまく動いたようで何よりです。

>今夜にでもSMTP の規格を確認してみますが、これでいけるはずです。

確認しました。HELO コマンドは

HELO your.host

の形で、メールを送る(スクリプトを実行する)マシンのホスト名をパラメー
タ( argument )に渡す必要があります。ホスト名がついていないマシンの場
合には、

HELO [192.168.0.1]

のように、[IP address] を使います。