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

sendmailでのメール送信

発言者:Tori
( Date Wednesday, December 24, 2003 20:41:09 )


phpを使ったフォームメール送信について教えていただけませんでしょうか。
環境は以下の通りです。

メールサーバー:
 xxx.xxx.xxx.200
 EIMS
Webサーバー:
 xxx.xxx.xxx.201
 Apache+php
DNS:
 mail.xxxxx.jp -> xxx.xxx.xxx.200
 www.xxxxx.jp -> xxx.xxx.xxx.201


Webサーバー上のsendmailを使って、メールサーバー上のユーザーに
メールを送信したり、フォームに入力されたアドレス宛にメールを
送信しようと考えています。sendmailはフォームメール送信の用途
のみに利用します。

phpからsendmailへのパスは正しく設定して、mb_send_mail()で
送信したところ、送信先のユーザには届きません。
sendmailのログは書かれていました。
ログは今、手元にありませんが、relay=localhostとなっていました。
また、キューにも残っていませんでした。

/etc/mail/access は次のようにしています。

/etc/mail/access
localhost RELAY
127.0.0.1 RELLAY
mail.xxxxx.jp RELAY

何から確認していけばよいのか、見当が付きません。
素人が手探りで挑戦していますので、勘違いが多々あると思いますが
よろしくお願いいたします。

森下@JavaかPerl派q@to さんからのコメント
( Thursday, December 25, 2003 00:01:31 )

以下は想像です。
WebServerがUNIX系かLINUX系でかつ、WebServerのsendmailコマンドが
Sendmail8.12系列由来のものと仮定して想像してみました。


WebServerでSMTPサーバが起動していないので、
PHPがMUAとしてのsendmailコマンドにメールを引き継いだ後で、
sendmailコマンドがローカルホストのSMTPサーバに渡そうとして失敗、
、とりあえずclientmqueueにためていると言う状態では?

対処方法は、WebServerのホストでSMTPサーバを稼働させる。
あるいはsendmailコマンドを使わないで自前でSMTPをしゃべる。

Tori さんからのコメント
( Thursday, December 25, 2003 00:31:21 )

情報が不足していたようで申し訳ありません。

MacOS 10.2.8
sendmail 8.12.9

ps ax | grep sendmail で確認すると、

  394  ??  Ss     0:01.51 /usr/sbin/sendmail -bd -q1h
  415  ??  Ss     0:00.02 /usr/sbin/sendmail -C /etc/mail/submit.cf -q1h

となっており、デーモンモードで実行されています。
これはSMTPサーバが稼働している状態でしょうか?

phpがsendmail(またはsendmailラッパー?)を必要としていることから、
sendmailを使うのが一番楽なのではないかと考えました。

森下 さんからのコメント
( Thursday, December 25, 2003 20:27:27 )

Terminalからの手打ちで、sendmailコマンドを使って
メールしてみると、どうなりますか?

Tori さんからのコメント
( Friday, December 26, 2003 16:22:59 )

手打ちをしてみました。

rcpt to: user1@xxxxx.jp
550 5.1.1 user1@xxxxx.jp... User unknown

Webサーバ、メールサーバと同じドメイン(xxxxx.jp)の場合、
User unknown となりました。

rcpt to: user2@yyyyy.jp
250 2.1.5 user2@yyyyy.jp... Recipient ok

別のドメイン(yyyyy.jp)だとOKでした。

/etc/hostconfig の HOSTNAMEなどをあれこれ触っているうちに、
OKになりました。

rcpt to: user1@xxxxx.jp
250 2.1.5 user1@xxxxx.jp... Recipient ok

実は、perlのcgiもうまく送信できなかったのですが、
こちらはOKになりました。

ただし、phpからの送信は相変わらずできません。

sendmailのログは次の通り(この1件だけ)です。

Dec 26 15:33:03 Macintosh sendmail[716]: hBQ6X3st000716: from=www, 
size=483, class=0, nrcpts=0, 
msgid=<200312260633.hBQ6X3st000716@macintosh.local>, relay=localhost

ヘッダの編集などを見直してみます。

Tori さんからのコメント
( Friday, December 26, 2003 23:00:01 )

自己レスです。

phpのmb_send_mail()関数についてじっくりとマニュアルを読み直しました。

boolean mb_send_mail ( string to, string subject, string message [, string additional_headers [, string additional_parameter]])

phpのsendmail_path は /usr/sbin/sendmail で、

additional_parameterは「MTA のコマンドラ インパラメータ」とあるので、
パラメータに"-t"を渡してみました。

$mlfr = "From: xxx@xxxxx.jp";
$mlto = "xxx@yyyyy.jp";
$mlsb = "タイトル";
$mlms = "メッセージの内容";
mb_language("Japanese");
mb_send_mail($mlto, $mlsb, $mlms, $mlfr, "-t");

これでOKでした。


→  http://jp2.php.net/manual/ja/function.mb-send-mail.php