こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

メール送信について(初心者です)

form1.phpで入力画面、form2.phpで確認画面、
send.php で
<?
function send_mail($mailto,$send_subject,$message){
$charcode = 'ISO-2022-JP';

$heady = "From: $mail\n";
$heady .= "To: $mailto\n";
$heady .= "X-Mailer: 'PHP/' . PHP_VERSION\n";
$heady .= "MIME-version: 1.0\n";
$heady .= "Content-Type: text/plain; charset=$charcode\n";
$heady .= "Content-Transfer-Encoding: 7bit\n";

$message = "";
$message .= "----------------------------------------\n";
$message .= "名前    :".$name."\n";
$message .= "メールアドレス:".$mail."\n";
$message .= "内容  :".$inq".\n";
$message .= "送信日時:" . $registDate . "\n";
$message .= "----------------------------------------\n";
$message .= "\n";
$message =mb_convert_encoding($message,"EUC");
}

//メールアドレス
$mailto = "***********";

$registDate = date("Y/m/d H:i:s");

//メールの題名部分
$mailsubject = "商問い合わせ";
$send_subject=mb_convert_encoding($mailsubject,"JIS","EUC");
$send_subject= "=?ISO-2022-JP?B?".base64_encode($send_subject)."?=";

send_mail($mailto,$send_subject,$message);

?>
とした上で、
送信完了を示すform3.phpにて、

<?
include('send.php');
?>

と書きましたが、
この include('send.php'); があると、
画面に何も表示されません。
もちろん、メールも送信されません。
(サーバー上で確認)

この流れでの間違い、指摘点など教えてください。

宜しくお願い致します。

投稿日時 - 2008-05-13 20:03:09

QNo.4019897

すぐに回答ほしいです

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

send.phpですが・・画面に表示するものもなければ、メール送信もありませんよね?form3.phpにinclude('send.php');以外の記述がなければ「何も起こらない」のが「書いたとおりの動作」です。

send.phpのfuction send_mail()はデータのセットしかしていませんし、それ以外の部分にもmail()もmb_send_mail()も見当たりません。またブラウザに何か返すような記述もありません。

(蛇足)
せっかくphpなのに、何故mb_send_mailを使わないのかと思います。「日本語のメール」として必要な処理は全部おまかせに出来ます。私はRFCを読むタイプの人間ですが、それでも自分で組み立てるよりはphpにまかせます。せっかくいろんな方がデバッグしてくれているのですから。ましてメール関連のRFCを読まないのであれば、mb_send_mail()を使うべきだと思います。

投稿日時 - 2008-05-13 22:38:26

補足

回答ありがとうございます。

説明不足でした。申し訳ありません。
form3.phpには、
<?
include('send.php');
?>

の下にhtmlの記述があります。
送信完了した場合の記述です。

一番望ましい記述はどのようなものか、
教えていただけると幸いです。


本当に初歩的な質問で申し訳ありません。

投稿日時 - 2008-05-13 23:30:46

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>一番望ましい記述はどのようなものか、
>教えていただけると幸いです。

そもそも(おそらくPOSTされてくる)$mail、$name、$inqはどこで変数にセットしているんでしょう?いまどきRegisterGlobalsがON(例:$_POST['mail']が自動的に$mailにセットされる)サーバはほとんどないと思いますが・・。

とりあえず、スクリプトをEUC-JPで書いている(POSTされてくるデータ=元のHTMLもEUC-JP)として、今時点のform3.phpのhtml部分をthanks.htmlとして保存してから

【form3.php】
  <?php
  mb_language('ja');
  mb_internal_encoding('EUC-JP');
  $mailto = 'recceipt@example.com';
  $registDate = date("Y/m/d H:i:s");
  if (magic_quotes_gpc()) {
    $mail = stripslashes($_POST['mail']);
    $name = stripslashes($_POST['name']);
    $inq = stripslashes($_POST['inq']);
    }
  else {
    $mail = $_POST['mail'];
    $name = $_POST['name'];
    $inq = $_POST['inq'];
    }
  $header = "From: $mail\n";
  $header .= "To: $mailto\b"
  $body = "";
  $body .= "----------------------------------------\n";
  $body .= "名前    :".$name."\n";
  $body .= "メールアドレス:".$mail."\n";
  $body .= "内容  :".$inq".\n";
  $body .= "送信日時:" . $registDate . "\n";
  $body .= "----------------------------------------\n";
  $body .= "\n";
  mb_send_mail($mailto, $subject, $body ,$header, '-f' . $mailto);
  readfile('thanks.html');
  ?>

といった感じにしてみてください。なお関数にするほどでもないのでfunctionは使ってません(汗

ちなみに確認画面(form2.php)でPOST項目はhiddenで埋め込まれてますよね?(でないとform3.phpで受け取れないので・・)。

投稿日時 - 2008-05-14 01:20:07

お礼

書いていただいたものは記述済みでした。

が、form2.phpでのPOST項目をhiddenで埋め込んだ名前と、
form3.phpで呼んだ変数の名前が違っているという、
初歩的なミスでした。


丁寧に回答頂き誠にありがとうございました。

投稿日時 - 2008-05-14 01:28:12

あなたにオススメの質問