• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPメール送信エラー)

PHPメール送信エラーの原因と対処方法

このQ&Aのポイント
  • PHPのメール送信に関するエラーメッセージが表示される場合、原因はSMTPの設定にあります。
  • エラーメッセージには、SMTPサーバへの接続に失敗したことが示されています。
  • SMTPサーバの設定が正しく行われていないため、メールの送信ができない状態になっている可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

あ、そうなんですか。なるほど、ネットワークの構成が見えてみました。が、原因が見えなくなってきました・・・。 まず、アンチウィルスソフトを切ってもダメということなので、アンチウィルスソフトは関係ない。 ブラウジングできるので、パケット自体がWindows2003機からでないということでもない。 という状況ですね。 う~~~~ん。まず、Windows2003に標準でついてくるファイアーウォール(おっしゃる通りの場所にあります)は、そこまで厳しい設定ではないとは思いますが・・・。一応、切りにしてみてください。具体的には、 「インターネット接続ファイアーウォール」の「インターネットからこのコンピュータへのアクセスを制限したり防いだりして、・・・・」のチェックをはずしてみてください。(念のため再起動を) で、ローカル接続⇒プロパティ⇒全般⇒この接続は次の項目を使用しますの「インターネットプロトコル(TCP/IP)」をクリック⇒プロパティ と、開いていき、ここいら辺の設定も確認してみてください。 あとはルータですね。んと、Windows2003機のローカルIPアドレスを変えて実行できるか試してみてください。 ※ルータの設定はいじりましたか?

yamadachan
質問者

お礼

ローカル接続⇒プロパティ⇒全般⇒この接続は次の項目を使用しますの「インターネットプロトコル(TCP/IP)」の部分を見直し、ウィルスソフトの無効をしたら無事動くようになりました。 ウィルスソフトの設定の仕方はわからない状態ですが、 かなり光が見えてきました。 campanella_77さんに言葉では表現できないくらい感謝しています。 本当にありがとうございます。

その他の回答 (6)

回答No.7

おぉ。よかったですね。 私の予想ではウィルスソフトが関係していると思うんですけど、ウィルスソフトは何を使っていますか? 設定する場合は、パケットフィルターより、プログラム制御の方が簡単かもしれません。 許可するプログラムに「xmail」を入れてみてください。

yamadachan
質問者

お礼

無事ウィルススキャンの方の設定出来、ちゃんとした形で動くようになりました^^ 本当に感謝しています。 最後まで問題解決の手助けありがとうございました^^

yamadachan
質問者

補足

ウィルスソフトはMcAfeeを使用しています。 説明書を見て現在設定してみようと試みています^^

回答No.5

そのWindows2003機では、サイトとかはみられるんでしょうか。 また、それほど厳しいファイアーウォール設定ならばそういう設定にした知識がある方が設定されたと思いますので、その方とは連絡が取れないのでしょうか。 もしサイトが見られる(以下ブラウジング)のであれば、ブラウジングの場合はSMTPの25番ポートへのアクセスを80番ポートに変えただけになります。 ファイアーウォールの設定で、リモートの80番ポートへの設定があるはずなので、それを探してみてください。 Windows2003はいじったことがないのではっきりは言えませんが、Windows2003の機能ではなくファイアーウォールソフトを入れてませんか? 『他のLAN内のPCからは出来たので』とありますが、これは同じネットワーク内ととらえてよいのでしょうか。 同じネットワークとは・・・、たとえば、ルータのIPが192.168.0.1/24 であれば 192.168.1.○ というIPであれば同じネットワークになります。/24 の部分は 255.255.255.0 というサブネットマスクです。 この部分がはっきりすると、ルータの設定なのかWindows2003機のファイアーウォールソフトの設定なのかがわかると思います。

yamadachan
質問者

補足

windows2003機ではサイトは見れます。 お恥ずかしいことながらこのサーバは最初からすべて私が設定しました。 ファイアーウォールの設定なんですがXPなどとほとんど同じでネットワーク接続→ローカルエリア接続→ プロパティ→詳細設定→設定での場所でいいんでしょうか? Windows2003の機能ではなくファイアーウォールソフトと言うのかはわかりませんがウィルスソフトは入っています。無効にして実行してみましたがだめでした。 『他のLAN内のPCからは出来たので』とは同じネットワーク内では出来たということです。 わかりにくい書き方で申し訳ございません。

回答No.4

了解です。わかりました。 それが原因です。※内部→外部のメール送信が出来ない状態 まず1つわかって欲しいのは、SMTPサーバは25番ポートで待ち受けています。これは入口ですね。 Webサーバと違うのはWebサーバは待ち受けしかしないのにたいして、SMTPサーバは待ち受けと送信の両方を行います。つまり、入口と出口が必要なわけです。 『プロバイダのSMTPでも送れないので混乱している状況です。』と、ありますが、PHP出だそうがWindows2003のSMTPサーバで出そうが同じ事です。今は出口がない状態です。 『ポートは開いているのですが』は、入り口が開いてるだけでしょう。25番ポート開けているだけじゃ待ち受けしかできません。 出口がない状態(おそらくファイアーウォールの設定でしょう)になっているのでWindows2003のSMTPサーバを使おうが、プロバイダのSMTPサーバを使おうが、ウン十万円のSMTPサーバソフトをインストールしようが、PHPを使おうが、そのWindows2003からはメールは出せません。 まずは、出口を開いてください。 ファイアーウォールの設定はどうなっていますか?会社ということなのでかなり厳しい設定になっているかと思います。 ファイアーウォールの設定を変えるとしたら、以下のような感じです。 静的フィルタとか呼ばれている部分を設定します。 プロトコル:TCP リモートIPアドレス:すべて リモートポート:25番 ローカルIPアドレス:Windows2003サーバのIP リモートポート:すべて 向き:ローカル⇒リモート を許可 Windows2003サーバを管理している方に言えば一発で解決すると思いますよ。

yamadachan
質問者

お礼

サーバ機を使ってTelnetでアクセスして接続してみたところ(プロバイダ&自前サーバのSMTPサーバ名指定) ポート25に接続できませんでした。 他のLAN内のPCからは出来たのでサーバ機の設定がだめみたいです。 やはりcampanella_77さんの言う通りファイヤーウォールの設定が間違ってるみたいですね。 ちなみにまだ設定方法がわからず直っていません・・・

yamadachan
質問者

補足

campanella_77さんの言われる通り静的フィルタとか呼ばれている部分を設定しようと思ったのですが、 どこから設定するのかよくわからず困っています。 ファイヤーウォールの設定のサービスの追加とは別なんですよね? 検索方法が悪いのかもしれないですが、調べてみたらその設定とかしかそれらしいものが無かったので・・・参考になるサイトなどあれば教えていただけるとありがたいです。

回答No.3

えっと、私の推測なんですけど、Windows2003のマシンは会社のサーバですかね。 つまり、会社のサーバでご質問のPHPプログラムを動作させてみたがエラーが出る。 で、ご自宅、もしくは会社の自分のPCを使い、あと、もう一台ほどテスト用のサーバ機がある。 こんな環境でしょうか。 そのWindows2003機ですでにメールアドレスを発行して運営なさっていますか?

yamadachan
質問者

補足

Windows2003のマシンは会社のサーバです。 Windows2003のサーバ機と自宅PC2台を使ってテストをしております。 >Windows2003機ですでにメールアドレスを発行して運営なさっていますか? 現在はメールアドレスは2つ発行している状態でメールサーバにはxmailを使用しているのですが、 内部→外部のメール送信が出来ない状態です。 そのせいかでPHPで送信出来ないのかと思ったのですが、 プロバイダのSMTPでも送れないので混乱している状況です。

回答No.2

えっと、どこで試した結果でしょうか? 「これは自前サーバ上で試さないと意味ないものなのでしょうか?」 自前サーバとは、WindowsServer2003でしょうか。 で、それは自宅のLAN内のマシンでしょうか。 まず、PHPプログラムを動作させたいのは、Windows2003でよろしいんですよね。 確認して欲しいのは、そのWindows2003のマシンから外部SMTPサーバの25番ポートにアクセスできるか。 と、いうことです。 おそらく、今のところはWindows2003のマシンの25番ポートには外部からアクセスできるが、Windows2003のマシンから、他の25番ポートにアクセスできない。 と、いう可能性がありますのでそれをご確認ください。 出来れば、サーバ構成とクライアント(お使いのPC)の構成を教えて頂ければ、助かります。

yamadachan
質問者

補足

>自前サーバとは、WindowsServer2003でしょうか。 はい。windows server 2003をサーバ機として使用し そのサーバ機でPHPを実行しています。 >おそらく、今のところはWindows2003のマシンの25番 >ポートには外部からアクセスできるが、Windows2003 >のマシンから、他の25番ポートにアクセスできない。 >と、いう可能性がありますのでそれをご確認ください。 現在サーバ機をいじれなので確認出来ないのですが campanella_77さんに教えてもらった(外部から試した)方法で試して見たいと思います。 サーバ機からサーバ機のIPをたたいて25番ポートにアクセス出来ないことは可能性としてあるのでしょうか? >サーバ構成とクライアント(お使いのPC)の構成を教えて頂ければ、助かります。 サーバ機はADSL接続しておりルータ経由でつないでいます。実際テストもサーバ機から直接試しています。 前の補足で書きました外部から試したところというのは全く違う場所から違うPC(windowsXPhome)で試した時のことです。

回答No.1

こんにちは。 まず、 php.iniの [mail function] ディレクティブの設定を変更しているかと思います。 「SMTPにはローカルPC・・・」と書かれているので、ここが localhost か xxxxx(プロバイダのSMTPサーバのIP) にしてもダメだということですよね。(一応ここももう一度ご確認ください) WindowsServer2003からコマンドプロンプトを立ち上げ、Telnetでアクセスしても接続できないでしょうか? コマンドプロンプト上で、 >telnet xxxxx 25 接続中: xxxxx...ホストへ接続できませんでした。 ポート番号 25: 接続に失敗 しました と出れば、ファイアーウォールが原因でしょう。他のLAN内のPCからも同じようにして失敗すれば、ルータの設定が。 他のLAN内から接続できれば、WindowsServer2003のファイアーウォールが考えられます。 (当然ですが、SMTPサーバのIPアドレス間違いもご確認ください) 成功すると 220 という数字と文字列が返ってきます。 Telnetがわからなければ、以下のPHPプログラムを動作させてください。 $SMTP や ポート番号の値がおかしい場合、 Warning: fsockopen(): という警告が出ます。 --------------- ここから --------------------------------- <? //プロバイダのSMTPアドレス $SMTP = "xxxxx"; $sock = fsockopen($SMTP , 25 , $errNo , $errStr , 1); header("Content-Type: text/plain;"); print "Error No\n"; print "$errNo" . "\n"; print "Error Msg\n"; print_r($errStr); ?> ---------------------------------------------------------- SMTPサーバのアドレス・ポートミスを抜かせば、 ・WindowsServer2003のファイアーウォール ・ルータのファイアーウォール ・php.ini になります。 プロバイダーによっては、25番ポートで自分のSMTPサーバを立てるのを禁止している所もあります。(ワームが広がるのを防ぐため) この場合は、SMTPサーバを25番以外のポートで立てる必要があります。

yamadachan
質問者

補足

外部から試してみたのですが Telnetでアクセスして接続してみたところ (プロバイダ&自前サーバのSMTPサーバ名指定) campanella_77さんの言う通り220という数字と文字列が返ってきました。 campanella_77さんの書いてくださったPHPプログラムも同じように$SMTP="xxxxx"のxxxxxのところににプロバイダ&自前サーバのSMTPサーバ名指定したところ Error No 0 Error Msg という文字が表示されました。 これは自前サーバ上で試さないと意味ないものなのでしょうか? もし大丈夫のようでしたら ・WindowsServer2003のファイアーウォール ・ルータのファイアーウォール ・php.ini ということになりますよね?

関連するQ&A