- ベストアンサー
PHPからのメールがこない
- PHPからのメールが送信されない問題について解決方法を教えてください。
- 問題のあるPHPスクリプトからのメール送信に関する質問です。
- PHPとFlashの連動でメールが送信されない問題について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
たびたび。 > 帰宅する部活様のKメールフォーム(PHP)を設置して試行したところちゃんとメールがきました。 とりあえず、帰宅する部活のスクリプトはmb_send_mailではなく、mail関数で送信しているようですね(657行目)。パスの設定は不要です(デフォルト設定でOK)。 今まで分かっている事は、 1. mail関数はちゃんと動いてくれる(sendmailのパス等は問題ない)。 2. mb_send_mailでは返り値がtrueだけどメールが届かない。 サーバのメールログは見れないのですよね? ひょっとしてmb_send_mailは文字コード関係でひっかかっているかも知れません(メールアドレスが抽出出来ていない)。 mb_convert_variablesのところの動作が怪しいですね。 ところで、今気がつきましたが、提示スクリプトではmb_convert_variables内の変数が全て大文字で書かれていますが、mb_send_mailでは全て小文字です。これでは適用されませんね。確認してみて下さい。
その他の回答 (4)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
#2#3です。 > /usr/sbin/sendmailのコマンドパスは記入しなくてもいいのでしょうか? パスが通ってなければ当然駄目ですね。 phpinfo()で確認し、サーバ指定のものと違った場合、php.ini、あるいは.htaccess等のPHPの環境変数の設定をする必要があるかもしれません。 ちなみにFedora coreではありませんが、私の環境(sendmail_path)では /usr/sbin/sendmail -t -i となっています。 それも違っていない場合、、、、サーバの設定を疑う必要があるかもしれません。 可能ならばperlのメールフォームを仮設して試験してみれば、何か分かるかもしれません。(メールサーバがちゃんと動いているか)
お礼
サーバーをphpinfoで確認したところ sendmail_path /usr/sbin/sendmail -t -i と書いていました。 質問ばかりで大変申し訳ないのですが、 >パスが通ってなければ当然駄目ですね。 パスは通っていますか? /usr/sbin/sendmail -t -i はどこに記入すればいいのですか? >perlのメールフォームを仮設 いまから他のサンプルを探して実験してみます。
補足
たびたび申し訳ございません。 >perlのメールフォームを仮設 帰宅する部活様のKメールフォーム(PHP)を設置して試行したところちゃんとメールがきました。 使用PHPのURL http://www.k-php.com/script/kmail/
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
#2です。 FlashのアクションスクリプトにAnswer=Completeと返しているようですね。 マニュアルによると、 メール送信が受け入れられた場合に TRUE 、それ以外の場合に FALSE を返します。 メールの配送が受け入れられたかどうかが基準であることに注意しましょう。 メールが実際にあて先に届いたかどうかでは「ありません」。 と言う事でTRUEを返しているようですから、メールサーバまでは受け付けられていると言う可能性は高いです。 いくつかのメールアドレス(特に携帯以外)で試してみましたか? いくつかの送信メールアドレスをスクリプトに直書きして、送信が可能かどうか試してみてはどうでしょうか? また、試しにmb_send_mail()ではなく、mail()で試してみてはどうでしょうか(送信出来ても文字化けします)? いくつか試しながら問題を切り分ける事が解決の早道です。
お礼
お返事ありがとうございます。 mail($dest, $subject, $message, $header); で試したり $from="info@demo.net"; //送信元 $dest="info@demo.net"; //宛先 の部分をocnやUSENの自分のメールアドレスにしましたがメールがきません。 PHPに、 /usr/sbin/sendmailのコマンドパスは記入しなくてもいいのでしょうか?
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
> mb_send_mail($dest, $subject, $message, $header); この返り値を無視しているので、どんなエラーが出てもメール送信完了と出ます。 少なくとも、 $rs = mb_send_mail($dest, $subject, $message, $header); if($rs){ //送信成功 }else{ //送信失敗 } としておかないと失敗しようが成功しようが完了と出てしまいます。 もっと大きな問題として、お使いのサーバがメール送信が可能かどうかの確認をしてみる必要があります。 特に最近はOutbound Port25 Blockingと言って25番ポートでのメール送信が出来なくなってきていますので、メールサーバの設定がきちっと出来ているか確認する必要があります。お使いのサーバが自分のサーバなら、メールサーバの設定が必要ですし、レンタルサーバなら管理者に確認下さい。 PHP側からメール送信が出来るようになっている、と言う事ならあまり問題が無いと思いますが、最悪の場合、受信側のメールサーバで送信側のメールサーバがブラックリストに入っていると受信出来無いと言う場合もあります(もうPHPは関係無いですね)。携帯電話へメールする時は特に注意が必要です。 参考まで。
お礼
問い合してみたところ、サーバー自体はメール送信が可能でOutbound Port25 Blockingは問題ないそうです。 >$rs = mb_send_mail($dest, $subject, $message, $header); >if($rs){ >//送信成功 >}else{ >//送信失敗 >} 上記の部分ですが、flashのアクションスクリプトで Ans = Sender.Answer; if (Ans.indexOf("Complete") >= 0){ gotoAndStop("contact_complete"); } else { gotoAndStop("contact_error2"); では判定できていませんか? また、 $rs = mb_send_mail($dest, $subject, $message, $header); if($rs){ //送信成功 // FlashのAns = Sender.Answer; に'Complete' を返す print "Content-type: text/plain\n\n"; print "Answer=Complete"; }else{ //送信失敗 } } で試行してみましたが、送信完了と表示されましたが、 メールは来ませんでした。
- lowrider_2005
- ベストアンサー率40% (1520/3748)
メールのログは確認していますか? おそらく /var/log/maillog
お礼
>メールのログは確認していますか? >おそらく /var/log/maillog ログは保存していないと思います。 swfとphpをサーバー上に公開しています。
お礼
taketan_mydns_jp様有難うございます。 本当に何回も申し訳ございません。 >mb_convert_variables内の変数が全て大文字で書かれていますが、mb_send_mailでは全て小文字です。 Falshからの変数がすべて大文字だから見たいです。 Flashの方には、 function SendData(){ Sender.COMMENT = naiyou_result; Sender.URL = url_result; Sender.EMAIL = email_result; Sender.PERSON = tantousya_result; Sender.COMPANY = name_result; Sender.SUBJECT = kenmei_result; Sender.result = "flash"; Sender.sendAndLoad(Cgi,Sender,"POST") ; } と記入されていました。 また、一応自分なりに /usr/local/php4/bin/php /usr/sbin/sendmail -t -i <? //各種初期設定 $from="info@dress.vc"; //送信元 $dest="info@dress.vc"; //宛先 $header="From: $from\nReply-To: $from"; //ヘッダ $sub="お問い合わせ"; //件名 //エラーがない場合のみメール送信 if($result=="flash"){ // 文字コードの変換 mb_convert_variables("EUC-JP", "Shift_Jis", &$SUBJECT, &$COMPANY, &$PERSON, &$EMAIL, &$URL, &$COMMENT); //言語を日本語に設定 mb_language("Japanese"); $msg=" ------------------------------- 件 名:$SUBJECT 御社名:$COMPANY 御中 ご担当者名:$PERSON 様 メール:$EMAIL URL:$URL 内 容:$COMMENT ------------------------------- "; //メールを送信する mb_send_mail($dest, $sub, $msg, $header); // FlashのAns = Sender.Answer; に'Complete' を返す print "Content-type: text/plain\n\n"; print "Answer=Complete"; } ?> と記入して試行しましたがやはりメールがきませんでした。
補足
taketan_mydns_jp様 mb_convert_variablesを削除してmail関数に変更しましたら 無事にメールを受けることができました。 この度は本当にありがとうございました! <?php //管理者メールアドレス $DEST="info@demo.com"; //ヘッダー設定 $header = "From: $DEST\n"; $header .= "Content-type: text/plain; charset=Shift_Jis\n"; //Flashから送られてきた変数を得る $result=$_POST["result"]; $SUBJECT=$_POST["SUBJECT"]; $COMPANY=$_POST["COMPANY"]; $PERSON=$_POST["PERSON"]; $EMAIL=$_POST["EMAIL"]; $URL=$_POST["URL"]; $COMMENT=$_POST["COMMENT"]; //管理者用メッセージ $msg =<<<EOD ------------------------------- 件 名:$SUBJECT 御社名:$COMPANY 御中 ご担当者名:$PERSON 様 メール:$EMAIL URL:$URL 内 容:$COMMENT ------------------------------- EOD; //メール送信設定 if($result=="flash"){ //管理者にメールを送信 mail($DEST, "FLASh -> PHP", $msg, $header); // FlashのAns = Sender.Answer; に'Complete' を返す print "Content-type: text/plain\n\n"; print "Answer=Complete"; } ?>