アプリ版:「スタンプのみでお礼する」機能のリリースについて

弊社でお客様のお問い合わせフォームをPHPで作成しているのですが、
お客様の環境でメールを送信することができません。


サーバー環境は以下の通りです。
Red Hat Linux 2.6.9
Apache/2.0.52
PHP 4.3.9


原因の調査で以下のようなチェックを行いました。

【お客様に御願いしたチェック】
1. サーバーでsendmailコマンドを利用してメールが送れるか?
送ることができる。
正しくキューイングされ、送信されることまで確認OK

2. php.iniのsendmail_pathの確認
sendmail_path は /usr/sbin/sendmail -i -tになっている。
/usr/sbin/sendmailはちゃんとある

3. mail()が使えないPHP
/usr/sbin/sendmail,/usr/lib/sendmailがなければmail()が使えないPHPがビルドされるケース。
標準のPHPを利用しているので、問題ない。

【弊社が担当したチェック】

1. メールを送信するPHPスクリプトの不具合
PHPスクリプト自体は正常に動作する。
php.iniのdispaly_errorsをONに変更してもエラーメッセージはでない。

2. 簡単なmail()関数を使用したチェック
以下のようなphpスクリプトで確認。
OKがブラウザに表示される。
<?php
if (mail("私のメールアドレス", "テスト", "テスト本文", "From:私のメールアドレス")) {
echo "OK";
} else {
echo "NG";
}
?>

何か原因があるのでしょうか?
どなたか教えてください。

A 回答 (1件)

がると申します。


一つには、きちんとsendmailが処理できているのかを、/var/logあたりのログで確認されるとよろしいかと思うのですが。
mail関数の戻り値は「送れたかどうか」ではないので。戻り値チェックはちょっと微妙かもしれません。

もう一つ…ぶっちゃけPHPのmail関数は事故が多いので(苦笑
popen とかを使って、普通にsendmailプロセス立ち上げて…という関数なりclassなり切ってしまったほうが、多分早いです。
原因も追及しやすいですし。

以上あまり参考にはならないかもしれませんが、逃げ道の方法を書いてみました。

この回答への補足

php.iniのsafe_modeが「Off」の状態で、popen()を使用して、直接コマンドを実行してみました。

結果ですが、sendmailが正しく処理できていないようです。
1. /var/log/maillogにログが残らない
2. メールも送信されない

以下が実行したスクリプトになります。

<?php
$pid = popen("/usr/sbin/sendmail -f 私のメールアドレス 私のメールアドレス", "w");
fputs($pid, "From: 私のメールアドレス\n");
fputs($pid, "To: 私のメールアドレス\n");
fputs($pid, "Subject: test mail\n");
fputs($pid, "Content-Type: text/plain; charset=EUC-JP\n");
fputs($pid, "Content-Transfer-Encoding: 7bit\n");
fputs($pid, "\n");
fputs($pid, "テストメール\n");
fputs($pid, "bye.\n");
pclose($pid);
$>

PHPに問題があるのでしょうか?

補足日時:2007/06/11 20:55
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
popen()ですね。
試してみます。

普段、PHPで開発することが多いのですが、今回のケースは初めてでしたので
いろいろ悩んでしまって困っていました。

お礼日時:2007/06/09 01:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!