- ベストアンサー
mailコマンドで上手くいかない
こんにちは。よろしくお願いします。 http://www.freewebmasterhelp.com/tutorials/php/5 こちらのインストラクションに従ってやっていたのですが行き詰まっています。 <?php $to = "mmmm@mmm.mmm"; $subject = "PHP Is Great"; $body = "PHP is one of the best scripting languages around"; $headers = "From: webmaster@66.124.58.0\n"; if(mail($to,$subject,$body,$headers)) { echo "An e-mail was sent to $to with the subject: $subject"; } else { echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid"; } ?> というスクリプトをemail.phpで保存し、ブラウザから開きました。以下が表示されます。 >Warning: Failed to Connect in D:\FoxServ\www\test\email.php on line 6 >There was a problem sending the mail. Check your code and make sure that the e-mail address mmmm@mmm.mmm is valid 二行目は思惑通りですが、一行目のエラーがheaderの入力がまずいのかなーと思っているのですが、なぜなのか解りません。 ちなみにメールアドレスをきちんと打ち込んでも一行目のエラーは変わらないです。 Apache 2.0 / PHP Version 4.2.2 / Windows XP SP1 どうぞよろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
php.iniは以下の通りです。 Windowsにはsendmailコマンドはありませんので、当然注釈のままです。 [mail function] ; For Win32 only. SMTP = smtp.########.jp ; For Win32 only. sendmail_from = xjd@########.jp ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = >ちなみにxidさんのプロバイダのSMTPサーバにはパスワードは要らないのでしょうか? メール送信はsmtpサーバ、メール受信はpopサーバです。 普通、smtpには認証機能はありませんので、passwordはありません。 受信時のpopには認証機能があるのでID/passwordが必要です。 但し、 sasl等の認証機能を組み込んで、送信時にpasswordを要求するsmtpサーバもあります。 Pop Before Smtpで、必ず受信した後でないと送信できないメールサーバもあります。
その他の回答 (7)
- xjd
- ベストアンサー率63% (1021/1612)
mail()関数で、プロバイダのメール(smtp)サーバを指定して、ちゃんと外部にメールが送信 できましたので、お知らせします。 特に苦労もせず、メール送信できました。 「c:\winnt\php.ini」 [mail function] ; For Win32 only. SMTP = smtp.########.jp (私のプロバイダのメールサーバです) ; For Win32 only. sendmail_from = xjd@########.jp (私のメールアドレスです) 「e:\apache group\apache\htdocs\mail.php」 <? $subject = "This is subject."; $message = "Hello !"; mail("hogehoge@****.net", $subject, $message); ?>
補足
結果報告までして頂いて本当に感謝します。 とりあえずメールサーバをインストールして自分のマシンから送信するところまでは出来たのですが プロバイダのSMTPサーバを使う方法が上手くいきません。 僕もxidさんと同じようにやったのですがだめでした。 [mail function]の三つ目の項目 ;sendmail_path = の部分はどのように記載されたのでしょうか? 僕はそこが空欄でそれが悪いのだと勝手に思っています。 ちなみにxidさんのプロバイダのSMTPサーバにはパスワードは要らないのでしょうか?
- Marionette
- ベストアンサー率56% (42/74)
> プロバイダのSMTPサーバを使って送信する場合は、fsockopen()関数を使います。 訂正: fsockopen()関数でSMTP接続してください。 > ; For Win32 only. > sendmail_from = ***@mail.goo.ne.jp Windows版はよく知らないけど、勝手にこんな指定をしてはまずいいんじゃないの? # このての質問はごろごろしてると思いますよ。検索してみては?
補足
>Windows版はよく知らないけど、勝手にこんな指定をしてはまずいいんじゃないの? え?まずいんですか?? phpインストール時に連絡の取れるメールアドレスを聞かれて最初はHOTMAILに してたんですが、それもまずかったんでしょうか。 >検索してみては? 検索は自分なりにがんばってやっているのですがなかなかいいページにたどり着けないという状況です。。 多分情報処理能力が他の人より遅いのだと思います。 これでも以前に比べるとかなり早くなったのですが。
- Marionette
- ベストアンサー率56% (42/74)
Apache 2.0 / PHP Version 4.2.2 / Windows XP SP1 ということは、自前(自宅?)のサーバですよね? 以下はその前提で書いてあります。前提がくずれるとオバカな回答なので、その場合は無視してください。 mail()関数はlocalホスト(この場合はApacheとPHPをインストールしたサーバ)のメール送信プログラム(sendmail)にデータを渡すだけで実際の送信処理はsendmailが行ないます。 従って、sendmail_pathが指定されていない状態(#1のお礼参照)でメールが送れるはずがありません。 同様にプロバイダのSMTPサーバを指定して送れないのもあたりまえのことです。 プロバイダのSMTPサーバを使って送信する場合は、fsockopen()関数を使います。 もちろん idとパスワードを指定する必要があります。 sendmail_path以外は全部スクリプト内で指定できるので php.iniを修正する必要はありません。
補足
どうもありがとうございます。 とりあえずメールサーバをインストールしました。 [mail function] ; For Win32 only. SMTP = localhost ; For Win32 only. sendmail_from = ***@mail.goo.ne.jp ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = この設定で、sendmail_path =は空欄でしたが無事送信できました。皆様ありがとうございます。 しかし、このままでは悔しいのでこれからプロバイダのメールサーバで送信するのに挑戦します。 fsockopen()関数ですね。ちょっと挑戦してみます。
- osamuy
- ベストアンサー率42% (1231/2878)
> 以前IISをインストールした際Appachが動かなくなって > 両方アンインストール、アパッチを再インストールしなければなりませんでした。 多分TCPポート80がバッティングしたのでしょう。 > IISはWWW ServiceとSMTP Serviceは別にはインストールできないんでしょうか? できたと思います。できなくても、WWW Serivceを開始しなければOKかと。 ここらへんピンとこなければ、xjdさんが回答されてるように、プロバイダのSMTPサーバを利用されたほうが良いでしょう。
補足
ありがとうございます。とりあえず、プロバイダのSMTPサーバで試してみたのですがまた行き詰まっています。 これでだめな場合がんばってSMTPサーバインストールします。 >できたと思います。 プログラムの追加と削除から Windowsのコンポーネントの追加と削除で IISを選択、詳細ボタンでSMTPをチェックすると他も自動的にチェックされてしまいます。他を外そうとするとsmtp serviceのチェックも外れてしまいます。 >WWW Serivceを開始しなければOK これが以前だめだったんですよねー なんでだろ。プロバイダのSMTPサーバの設定が上手くいかなかったらもう一度やってみます。
- xjd
- ベストアンサー率63% (1021/1612)
>[mail function] >; For Win32 only. >SMTP = localhost >; For Win32 only. >sendmail_from = ***@mail.goo.ne.jp localhostとは自分自身の事です。 phpを動かしているマシンでメール(smtp)サーバを動かしていないのであれば、 他のメールサーバを指定してください。 アウトルックでメール送信するのに、プロバイダのメールサーバを指定するのと 同じ事です。 あなたのphpスクリプトがメールクライアントになるわけです。
補足
おかげさまで仕組みが少し見えてきました。 しかし残念ながらphp.iniを編集したのですが結果が同じでした。パスワードが問題なのかなと思っています。Outlookではプロバイダから指定されたサーバのアドレスとと共にパスワードを指定しますが、同様にphp.iniでメールサーバへのパスワードの設定はどのようにすればよいのでしょうか?色々試してみたのですがそうも上手くいってくれません。よろしくお願いいたします。
- osamuy
- ベストアンサー率42% (1231/2878)
「Fail to Connection」と言われているから、SMTPサーバへの接続に失敗しているのでは。 SMTPサービスを開始しているか確認してみては。
お礼
SMTPサーバというのをサービスのウィンドウの一覧表示で見つけられませんでした。 ということはインストールしなくてはいけないのでしょうか?多分そうだと思うのですが、 以前IISをインストールした際Appachが動かなくなって両方アンインストール、アパッチを再インストールしなければなりませんでした。 IISはWWW ServiceとSMTP Serviceは別にはインストールできないんでしょうか? だとしたらどうすればいいのでしょうか? Outlook Expressなどのメールでは送信できるのですがちょっと仕組みがわからないです。
補足
至急チェックしてみます。
- xjd
- ベストアンサー率63% (1021/1612)
php.iniファイルで、メールサーバ(SMTPサーバ)の指定はできていますか?
お礼
php.iniのメールの項目なんですが、これでいいのでしょうか? [mail function] ; For Win32 only. SMTP = localhost ; For Win32 only. sendmail_from = ***@mail.goo.ne.jp ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = よろしくお願いします。
補足
SMTPサーバの指定が必要だとは知りませんでした。今からちょっと調べてみます。
お礼
う~ん。結局プロバイダのSmtpサーバは上手くいきませんでした。 もう時間がかなり経ってしまいましたし、最後までお付き合いいただけなかったのが少し残念ですが、締め切らせていただきますね。 感謝しています。
補足
たびたびありがとうございます。 なんか不思議な事が起こりました。 メールサーバを立ち上げている時は [mail function] ; For Win32 only. SMTP = smtp.####.####.com (プロバイダのSMTPサーバ) ; For Win32 only. sendmail_from = ####@#####.net (プロバイダから供給されるメールアドレス) ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = で送信できました。サーバをexitしてもう一度同じ事(php.iniは上記のまま)をしたらエラーが出ました。 何なんでしょうか??xidさんはメールサーバ入れてますか? (これから寝ます)