前提・実現したいこと
簡単なメッセージ機能を作っています。メッセージ送信者のIPアドレスとホスト名もメールで送りたいのですが、メールが受信できず困っています。IPアドレスに関する記述をオフにしてメッセージを送ると、無事受信できました。
発生している問題・エラーメッセージ
エラーは特ににないです。
該当のソースコード
PHP
1<?php 2 3// 変数の初期化 4$clean = array(); 5 6// サニタイズ 7if (!empty($_POST)) { 8 foreach ($_POST as $key => $value) { 9 $clean[$key] = htmlspecialchars($value, ENT_QUOTES); 10 } 11} 12 13/*=1.[ 設定 ] 14==============================================================*/ 15$to = "xxx@.com"; //メール送信先アドレス 16$from = "https://xxx.com/"; // メール送信元アドレス 17$fromname = "メッセージ"; //メール送信元の名前 18$subject = "コメントがありました"; // メールの件名 19$thanks = "note/clap/webclap.html"; // サンクスページ 20$charset = "UTF-8"; // 文字コード 21/*=設定ここまで===============================================*/ 22 23/*=2.[ プログラム処理 ] 24==============================================================*/ 25//formデータを収集 26foreach ($_POST as $key => $value) { 27 $contents .= "$key:\n$value\n\n"; 28} 29$contents .= "----------------------------------------------\n\n"; 30$ip_address = $_SERVER['REMOTE_ADDR']; 31$host_name = gethostbyaddr($ip_address); 32$post_ip = "IP:$ip_address\n"."Host Name:$host_name\n\n"; 33$post_ip .= "-----------------------------------------------\n\n"; 34 35// 送信者のアクセス元情報 36$referer = getenv("HTTP_REFERER"); 37$contents .= <<<EOM 38 リファラ:$referer 39EOM; 40 41//おまじない 42$main = htmlspecialchars($contents) ; 43 44//送信処理 45if (!empty($clean['btn_confirm'])) { 46 $error = validation($clean); 47 if ($_POST["category"] != "") { 48 mb_language("Ja"); 49 mb_internal_encoding($charset); 50 $mailfrom = "From:" . mb_encode_mimeheader($fromname) . "<$from>"; 51 mb_send_mail($to, $subject, $main, $post_ip, $mailfrom); 52 header("Location: $thanks"); 53 } 54} 55function validation($data) 56{ 57 $error = array(); 58 // お問い合わせ内容のバリデーション 59 if (empty($data['category'])) { 60 $error[] = "必須コメントは必ず入力してください. "; 61 } 62 return $error; 63}; 64 65?>
HTML
1<form method="post" action="#clap"> 2 <!-- エラーリスト--> 3 <?php if (!empty($error)) : ?> 4 <ul class="error_list"> 5 <?php foreach ($error as $value) : ?> 6 <li><?php echo $value; ?></li> 7 <?php endforeach; ?> 8 </ul> 9 <?php endif; ?> 10 <div class="fields"> 11 <div class="field"> 12 <label for="category">Impression</label> 13 <select name="category" id="category"> 14 <option value="">Choose(必須)</option> 15 <option value="遊びに来たよ" <?php if (!empty($_POST['category']) && $_POST['category'] === "遊びに来たよ") { 16 echo 'selected'; 17} ?>>遊びに来たよ</option> 18 <option value="イイね" <?php if (!empty($_POST['category']) && $_POST['category'] === "イイね") { 19 echo 'selected'; 20} ?>>イイね</option> 21 <option value="読みました" <?php if (!empty($_POST['category']) && $_POST['category'] === "読みました") { 22 echo 'selected'; 23} ?>>読みました</option> 24 </select> 25 </div> 26 <div class="field"> 27 <label for="message">Message</label> 28 <textarea name="message" id="message" placeholder="Enter your message" rows="4"><?php if (!empty($clean['message'])) { 29 echo $clean['message']; 30} ?></textarea> 31 </div> 32 </div> 33 <ul class="actions"> 34 <li><input type="submit" value="Clap" name="btn_confirm"></li> 35 </ul> 36</form>
試したこと
PHP
1mb_send_mail($to, $subject, $main, $mailfrom);
としたところ、メールは送信されたので、IPアドレスに関する記述が間違っているのかと思います。しかしどこが間違っているのかが分かりません。
補足情報(FW/ツールのバージョンなど)
Firefox 最新版
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/23 23:00