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

MacOS X Server 10.2.6 でsendmail

発言者:サトシ
( Date Wednesday, July 16, 2003 13:29:09 )


急に会社のMacOS X Server 10.2.6 を担当することになってしまったのです
が、どうしても解決できない点があるので質問させて下さい。

MacOS X Server 10.2.6 でCGIを利用したホームページは問題なく動作するの
ですが、フォームとCGIを使って入力した内容をメールで送信したいのです。

CGIに記入する、sendmailのパスはあっています。
現状、送信ボタンを押してもメールが送られない状態です。

sendmailの設定が特に必要なんでしょうか?

mieux さんからのコメント
( Wednesday, July 16, 2003 22:03:31 )

えっと、MacOS Xのデフォルトでは、
sendmailは起動していないと思いますけど。

OS X Serverでは起動しているんでしたっけ?

sendmail maxosxで検索するといくらでもでてきますけど…。

→  sendmail maxosx

サトシ さんからのコメント
( Thursday, July 17, 2003 16:09:05 )

素人質問で申し訳ありません。

プロセスビューアで、見てみたところ、sendmailは、ユーザーsmmspで
実行中になっていますが、これはどうなのでしょう?正しいのでしょうか?

現状、やはりフォームからCGIを使ってメールが送れない状態です。


SEI さんからのコメント
( Monday, July 21, 2003 13:44:42 )

私も同じような感じで躓いております。
どちらか参考になるページ等、教えていただきたいです。

MacOS X と MacOS X Server は違っている点が多く、私も自己解決ができません・・・。
(OS 10.2 server とファイルメーカー6が動作しています。)

たまちゃん さんからのコメント
( Monday, July 21, 2003 16:25:52 )

下の TIL の文書を見つけましたが,これが 10.2 でどうなったか
は残念ながら分かりませんでした。

同じ対処法でいけるなら,直っていないということになりますでし
ょうか。

→  Mac OS X Server 10.0: POST メソッドを使用した際、フォームデータが CGI に送信されない

森下 さんからのコメント
( Monday, July 21, 2003 21:36:56 )

CGIからメールを送るのに、sendmailを使った事が一度もないので外してるかもしれませんが、
#PerlとかJavaで直接SMTPしゃべっちゃうんで・・・。
Mac OS Xの現在のsendmailは8.12系列でしかも8.12系列の作法にのっとってるので、
SMTPサーバとしてのsendmailと、クライアント機能としてのsendmailは別プロセスです。
通常smmspがもっているsendmailはクライアント機能側なので、
SMTPサーバとしてのsendmailは多分起動していないのだと思います。
#ちよっと説明としては意訳しているかも・・・

そうなると、Appleのメールサーバとか、別のSMTPサーバが動いていない限り、
そのサーバからメールを送るには、CGIが自分でSMTPをしゃべって、
送ってくれるサーバに投げるしかないでしょう。

#sendmailコマンドで外部のSMTPサーバって指定できましたっけ?

SEI さんからのコメント
( Tuesday, July 22, 2003 19:22:31 )

私も、プロセスビューアを見てみました。

sendmail、ユーザーsmmsp と sendmail、ユーザーroot の2つ表示されていて、
どちらも実行中です。

ですが、やはりCGIを使ってフォームから、送信してもメールが届きません。
ちなみに、WebFORM v4.0 is Free(http://www.rescue.ne.jp/)で試しています。

パスは、それぞれ
/usr/bin/perl
/usr/sbin/sendmail
にしてあります。


森下 さんからのコメント
( Tuesday, July 22, 2003 22:43:42 )

SEIさんのところはサーバとして動いてるようですね。
サトシさんとこはどうでしょう。

で、動いてるのなら、mail.logとかsystem.logとかに
エラーの状況が出ていませんか?

SEI さんからのコメント
( Wednesday, July 23, 2003 09:29:17 )

WEBサーバーとして動かしていますが、メールの方は別のマックでEIMSで
動いています。
10.2 Server の方は、CGIでフォームを利用して入力内容をメールで受信
したいだけなのです。
エラーログはあとで見てみます。

ちなみに、今回の場合はDNSとかは関係あるのでしょうか?

森下 さんからのコメント
( Wednesday, July 23, 2003 11:12:07 )

メールが届けられるまでの仕組みを簡単に説明しますと、

[1]まず、クライアントが自分の面倒を見てくれるSMTPサーバ(A)にメールを預ける。
[2]Aは、預かったメールの相手先を担当するSMTPサーバ(B)を調べる。
[3]AがBと直接話してそのメールを受け渡す。
[4]Bは受け渡されたメールについて、さらに自ら保管しておくのか更に転送するのかなど判断し、その所作を実行する。
[5]最終的には宛先のクライアントが、自分のメールボックスを管理しているホストの
POPサーバ、あるいはIMAPサーバを利用して読み出す。

という段階を経るわけです。メールが届かないと言う場合
まずはこれらのうちのどの段階で引っかかっているのか突き止めない限り、
対応できません。で、今回の場合、
[1]のクライアントがWebサーバ(が動かしているCGI)
SMTPサーバ(A)がWebサーバと同じマシンのSMTPサーバ
になります。
通常この段階で受け渡しがうまく行ってないのであれば、CGI自体が
正常に終了しないで何らかのエラーを出すであろうと思いますので、
今回はここまでは正常であろうと思われます。
ただし絶対ではなく、たいていは程度の事なのでログは確認してみましょう。
Webサーバの実行ユーザから正常に受け取ったと言う記述が残っているならOKです。

次に[2]の段階ですが、この段階でお尋ねのDNSが必要になる可能性もあります。
預かったSMTPサーバAの設定において、ローカルに保管すべき以外の全てのメールを
上流側の特定のIPアドレスのSMTPサーバに丸投げする設定の場合、
DNSの機能は使わずに渡してしまえます。
(丸なげでもFQDNなどホスト名で指定してある場合、名前解決の手立てが必要です。)

しかし外部のサーバと直接話して受け渡す設定の場合、(sendmailのデフォルトはこちら)
そのsendmailの動いてるマシンで、相手ドメイン名のMXレコードに対応する
IPアドレスが判定できないとしたら、メールを送り出す事は不可能です。
なぜなら、[3]の段階で相手サーバと話すためには、相手のIPアドレスが必須だからです。
ログには、IPアドレスが引けないと記述されているでしょう。
ちなみに相手のMXレコードが設定されていなくてもこの段階でエラーになります。
その場合ログにはMXがないよと記述されているでしょう。
この段階でエラーになるのなら、
sudo sendmail -bpとかすると、CGIから出したメールが
キューにたまっているのがわかるでしょう。

と言う程度に、DNSは関係してきます(^^)。

SEI さんからのコメント
( Friday, July 25, 2003 12:54:23 )

未だ解決できません。
別のスレ「AppleMailServerとsendmailの共存について」を見る限り可能などだとは思いますが、
なにか決定的なことが抜けていそうです。

どなたか、なにかアドバイスがありましたらお願いいたします。

森下 さんからのコメント
( Friday, July 25, 2003 20:41:32 )

で、たぶん「決定的なこと」はログに書いてあるはずですから、
まずはそれをひも解きましょう。

例えば、Webからメールを送るアクションをしてみて、
その直後に、ターミナルから
tail -20 /var/log/mail.log
としてみたり、
tail -50 /var/log/system.log | grep sendmail
とかしてみて、何か手がかりになりそうな記述はないですか?
もしも記述すらないなら、Apacheのエラーログに手がかりがあるかもしれません。

 

せいいち さんからのコメント
( Saturday, July 26, 2003 18:36:41 )

/var/spool/clientmqueueにキューはたまっていますか?

森下さんのいわれるようにログになんて書いてあるか解らないとなんとも。。。






SEI さんからのコメント
( Monday, July 28, 2003 13:01:47 )

お世話になります。
ターミナルから
tail -20 /var/log/mail.log
を打つと
Jul 28 12:35:31 Macintosh sendmail[24909]: h6N7ZUO0012915: to=postmaster, delay=4+20:00:00, xdelay=00:00:00, mailer=relay, pri=10474291, relay=localhost, dsn=4.0.0, stat=Deferred: Connection refused by localhost
というメッセージが出ます。

どうなのでしょう?
お世話になってばかりで、申し訳ありません。

森下 さんからのコメント
( Monday, July 28, 2003 14:52:20 )

ログのにある最後の
stat=Deferred: Connection refused by localhost
ですが、
stat=と言うのは、この動作がどう言う結果に終わったのかを示す部分です。
正常に送信できれば、stat=sentなどと表示されるはずです。
で、今回はこれがDeferred、つまり直訳すると「延期された」という表示です。
延期された理由は次の:以降に書いてあります。
Connection refused by localhost、
つまりローカルホストによって受け取りが拒否されたと言うわけです。
延期されたと言うことは、キューにたまっているのではないでしょうか。
それも、SMTPサーバとしてのsendmailのキューではなく、
smmsp側のclientmqueueに入っていると思われます。

このログからわかることは、sendmail自体はsmtpサーバとして稼働しているものの、
ローカルからのメールを取次ぎ拒否する設定になっていると言うことです。
つまり、sendmail.cfに問題がありそうですね。

ローカルからが拒否される理由としては、そもそもlocalhostからのrelayが許されていないか、
あるいは、ログの日時の後、sendmailの前のホスト名が「Macintosh」となっていることから推察すると、
DNSがちゃんと働いていないのではないかと想像します。


SEI さんからのコメント
( Tuesday, July 29, 2003 14:51:56 )

いつもアドバイスばかり、いただいてすいません。

DNSサーバーは別の機械で正しく設定されているようです。
MacOS X server 10.2 で、sendmail.cfの設定は何か特別なんでしょうか?
何か、参考になるページなどありませんか?

森下 さんからのコメント
( Tuesday, July 29, 2003 18:27:44 )

うちの場合、ServerでないMac OS Xなのですが
sendmailまわりはsendmail.cfが全てなので、
全く同じsendmail.cfを使えば、ふるまいは変わらないはずです。
また、他の*BSD系のsendmailとも違いはないと思います。
もしデフォルトで挙動が違っているとしたら、それはsendmail自体が違っているのではなく、
デフォルトで用意されているsendmail.cfが違うと言うことでしょう。

なお、デフォルトでどのリソースを見に行くかと言う振る舞い自体が、
sendmailの8.11系列と8.12系列では変わっていますので、
設定の参考にするのは8.12系列のことについて書いてある情報を見ないと、
はまってしまってだめだめです。

それで今回の場合、普通にrelayを許可するアドレスにサーバのIPアドレスを加えたらいいと思います。
この許可の出し方もたくさん種類がありますが、以下のホームページで
紹介されているRELAYの許可方法であるaccess.dbを使う方法がお勧めです。


→  くまりんがみていた!Sendmailの基本設定

たまちゃん さんからのコメント
( Tuesday, July 29, 2003 21:50:27 )

下記のものも同じアプローチですね。

Mac OS X Server での動作は分かりませんが,同ページにある
Reference は参考になると思います。

AppleScript Studio でつくったみたいです。Panther になって
sendmail が抜け落ちると Postfix Enabler もつくるかもしれ
ないとのことです。

→  Sendmail Enabler 

SEI さんからのコメント
( Thursday, July 31, 2003 12:44:52 )

いろいろアドバイス等ありがとうございます。

http://okuyama.mt.tama.hosei.ac.jp/unix/macosx/webserver.html#F4
こちらを参考にやってみましたが、
m4 ../m4/cf.m4 mydomain.mc > /tmp/sendmail.cf
で、m4: Command not found.と出てしまいます。

どうしたら、良いのでしょうか?
いつも素人質問ですいません。


森下 さんからのコメント
( Thursday, July 31, 2003 20:50:12 )

DeveloperToolsはインストールされていますか?

SEI さんからのコメント
( Monday, August 04, 2003 14:56:24 )

みなさん、アドバイス等どうもありがとうございました!
DeveloperToolsをインストールして、無事に先に進むことができました。

これで、やっとCGI使ってフォームからメールを送ることができるようになりました。
どうもありがとうございました!!