質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1511閲覧

メッセージ送信者のIPアドレスをメールで送信できない

erp

総合スコア46

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/09/23 02:06

前提・実現したいこと

簡単なメッセージ機能を作っています。メッセージ送信者の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 最新版

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

mb_send_mailのリファレンスをちゃんと参照しましょう。

PHP

1mb_send_mail( 2 string $to, 3 string $subject, 4 string $message, 5 array|string $additional_headers = [], 6 ?string $additional_params = null 7): bool

これに対して

PHP

1mb_send_mail($to, $subject, $main, $post_ip, $mailfrom);

を行っていますが、引数$additional_headersに対して$post_ip$additional_paramsに対して$mailfromを渡しているのがまったく意味不明です。

PHP: mb_send_mail - Manual

投稿2021/09/23 02:52

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

erp

2021/09/23 23:00

ありがとうございます。なんで上手くいかなかったのか分かりました。
guest

0

自己解決

PHP

1$contents .= "----------------------------------------------\n\n"; 2$ip_address = $_SERVER['REMOTE_ADDR']; 3$host_name = gethostbyaddr($ip_address); 4$post_ip = "IP:$ip_address\n"."Host Name:$host_name\n"; 5$user = $_SERVER['HTTP_USER_AGENT']; 6$user_agent .= "User Agent:$user\n\n"; 7$user_agent .= "-----------------------------------------------\n"; 8 9 10// 送信者のアクセス元情報 11$referer = getenv("HTTP_REFERER"); 12$contents .= <<<EOM 13$post_ip 14$user_agent 15リファラ:$referer 16EOM;

PHP

1mb_send_mail($to, $subject, $main, $mailfrom); 2

としたら、無事、メールが受信できました。

投稿2021/09/23 23:00

erp

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問