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

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

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

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

655閲覧

メールフォームで改行を使うとメッセージが届かない

_Lucia

総合スコア25

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/04/11 06:13

編集2019/04/11 06:41

下記に3つのファイルのソースを置いています。mail.phpに自分のメールアドレスをいれて、3つをサーバー上で使うと自分のアドレス宛にメールを受け取ることができると思います。

しかしenterキーで改行せずに文章を打てば普通に届くのですが、改行したり「(´∀`)(;゚Д゚)!」←こんな顔文字を使ったりするとメッセージを受け取れません。

この状況で特にエラーが出るわけでもないですし、送信完了画面までたどり着いているのですがメールが来ていませんでした。

そもそもこのメールフォームは確認画面付きで、送信内容は名前と内容のみ。しかも名前は入力しなくても送信可能ということを希望として作成しています。

ですが相手側が改行したり絵文字を使わないと言い切れないので、そうなった場合でも内容を受信できるようにしたいです。

ソースのどこに何を追加したら改善されるでしょうか?

ファイル名 index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </head> <title> mail </title> <body> <div class="tb-cell mail-form"> <form id="form" action="mail.php" method="post"> <div class="row"> <div class="cell"> <label>name (無記入可)</label> <!--cell--></div> <div class="cell"> <input type="text" name="name"> <!--cell--></div> <!--row--></div> <div class="row"> <div class="cell"> <label>comment</label> <!--cell--></div> <div class="cell"> <textarea name="comment" required></textarea> <!--cell--></div> <!--row--></div> &nbsp; <div id="BOX1"> <button type="submit" id="sbtn" name="action" value="post">確認</button> <button type="reset" id="rbtn">リセット</button> </div> </form> </body> </html>

ファイル名 mail.php

<!DOCTYPE html> <?php if(!$_POST){ header('Location: /'); } session_start(); if(isset($_POST['comment'])){ $_SESSION['name'] = $_POST['name']; $_SESSION['comment'] = $_POST['comment']; } ?> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="style.css"> </head> <title> mail </title> <body> <?php $action = $_POST['action']; $name = htmlspecialchars($_SESSION['name']); $comment = htmlspecialchars($_SESSION['comment']); $to = 'ここに受信者のメールアドレス'; $subject = '新着メッセージ'; $message = '[お名前]'."\n".$name."\n"; $message .= '[コメント]'."\n".$comment."\n\n\n"; $header = 'From: '.$comment."\r\n"; $header .= 'Reply-To: '.$comment."\r\n"; if($action == "post"){ echo '<div class="tb-cell mail-form">'; echo '<form id="form" action="mail.php" method="post">'; echo '<div class="row">'; echo '<div class="cell">'; echo '<label>name (無記入可)</label>'; echo '<!--cell--></div>'; echo '<div class="cell cell2">'; echo $_SESSION['name']; echo '<!--cell--></div>'; echo '<!--row--></div>'; echo '<div class="row">'; echo '<div class="cell">'; echo '<label>comment</label>'; echo '<!--cell--></div>'; echo '<div class="cell cell2">'; echo $_SESSION['comment']; echo '<!--cell--></div>'; echo '<!--row--></div>'; echo '&nbsp;'; echo '<p class="kakunin">この内容で送信しますか?</p><br>'; echo '<div id="BOX1"><button type="submit" id="sbtn" name="action" value="send">send</button>'; echo '<button type="button" onclick="history.go(-1)">back</button></div>'; echo '<!--cell--></div>'; echo '<!--row--></div>'; echo '</form>'; echo '<!--tb-cell--></div>'; }elseif($action == "send"){ $status = mb_send_mail($to, $subject, $message, $header); if ($status) { echo '<div id="BOX1"><p class="msg">送信完了</p>'; echo '<button type="button" onclick="history.go(-2)">入力フォームに戻る</button></div>'; } else { echo '<p class="msg">メッセージの送信に失敗しました</p>'; echo '<button type="button" onclick="history.go(-2)">入力フォームに戻る</button>'; } $_SESSION = array(); session_destroy(); } ?> </body> </html>

ファイル名 style.css

.tb-cell { display: table; width: 300px; margin: 10px auto 10px auto; text-align: left; } .tb-cell .row { display: table-row; } .tb-cell .row .cell { display: table-cell; border: 1px solid #7e7e7e; padding: 10px; vertical-align: middle; color: #7e7e7e; } .tb-cell .row .cell:nth-child(odd) { width: 100px; } .tb-cell .row .cell:nth-child(even) { width: 200px; } .mail-form .row .cell { padding: 5px; } .mail-form .row .cell:nth-child(1) { background: rgb(187, 64, 95); } .mail-form .row .cell:nth-child(2) { background: rgb(245, 245, 245); } input[type="text"], input[type="email"] { height: 20px; font-size: 0.8rem; color: #7e7e7e; } textarea { height: 100px; font-size: 0.8rem; color: #7e7e7e; resize: none; } button { color: rgb(187, 64, 95); border: none; padding: 10px; font-size: 0.9rem; cursor: pointer; } button[type="button"] { margin-left: 10px; } button[type="button"], button[type="submit"] { background: #ffffff; } button[type="reset"] { background: none; } button[type="button"]:hover, button[type="submit"]:hover { background: rgb(243, 241, 242); } button[type="reset"]:hover { text-decoration: underline; } @media (min-width: 768px) { .tb-cell { width: 530px; } .tb-cell .row { display: table-row; } .tb-cell .row .cell { display: table-cell; border: 1px solid rgb(255, 255, 255); padding: 10px; vertical-align: middle; color: #ffffff; } .tb-cell .row .cell:nth-child(odd) { width: 130px; } .tb-cell .row .cell:nth-child(even) { width: 350px; } input[type="text"], input[type="email"] { width: 270px; } textarea { width: 350px; } #BOX1 { text-align: center; } label { font-size: 0.8rem; } .kakunin{ text-align: center; color: #7e7e7e; font-size: 0.9rem; margin-bottom: -10px; } .msg { color: #7e7e7e; font-size: 0.9rem; } .cell2 { color: #7e7e7e !important; font-size: 0.9rem !important; } /* ** */}

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

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

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

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

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

m.ts10806

2019/04/11 06:35

style.cssが必要とは思いませんが提示されているので確認です。 冒頭きれてて途中から始まっている感じになっていますが、これは?
_Lucia

2019/04/11 06:42

修正済 すみませんセレクタが一個抜けてました。
guest

回答4

0

ベストアンサー

$headerの部分がなんかちょっと。。。
今だとここにpostされたコメントが入ってしまうのでヘッダがおかしいといったエラーになるのではないでしょうか?
本来はここにfromアドレスとReply-Toのアドレスが入ると思うので、以下のようにするとどうでしょうか?

PHP

1/* 2$header = 'From: '.$comment."\r\n"; 3$header .= 'Reply-To: '.$comment."\r\n"; 4*/ 5 6$from = 'from@xxxxx.xxx'; 7$Reply = 'reply@xxxxx.xxx'; 8$header = 'From: '.$from ."\r\n"; 9$header .= 'Reply-To: '.$Reply ."\r\n"; 10

投稿2019/04/11 06:33

編集2019/04/11 06:40
mayoi_maimai

総合スコア1583

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

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

_Lucia

2019/04/11 07:48

ありがとうございます! これで文書は受信できましたが、 確認画面だけ改行が効いていないのは何故でしょうか?
mayoi_maimai

2019/04/11 07:52

確認画面では改行を変換すればいいので出力部分を以下に書き換えれば大丈夫だと思いますよ。 echo $_SESSION['comment']; ↓ echo nl2br($_SESSION['comment']);
_Lucia

2019/04/11 08:28

凄いですね!出来ました。 少し書き加えるだけで可能だったのですね。 図々しい質問にお答えいただき感謝します。
guest

0

PHPでメールを送る場合、Gmailのアカウントを作りそこから送信したほうが効率的です。
またメールは歴史的経緯により複雑怪奇な処理が必要ですので安全かつ確実に送るためにPHPmailerの最新版を使いGmailのSMTPサーバから送信することをおすすめします。
https://qiita.com/takuya-andou/items/98be291a6a8b6b5515b1

すると小難しい処理を抜きにして以下だけで送れるようになります。

php

1$mail = new PHPMailer(); 2$mail->IsSMTP(); 3$mail->SMTPAuth = true; 4$mail->CharSet = 'utf-8'; 5$mail->SMTPSecure = 'tls'; 6$mail->Host = "smtp.gmail.com"; 7$mail->Port = 587; 8$mail->Username = 'Gメールアドレス'; 9$mail->Password = 'パスワード'; 10$mail->SetFrom('Gメールアカウント'); 11$mail->From = 'Gメールアドレス'; 12$mail->Subject = 'タイトル'; 13$mail->Body = '本文'; 14$mail->AddAddress('宛先'); 15$mail -> Send()//送信する。

投稿2019/04/11 07:17

namda

総合スコア705

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

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

0

投稿2019/04/11 06:50

m.ts10806

総合スコア80765

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

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

0

全体的に、まともに動くコードではないように思います。
また、今のコードはセキュリティ的にたくさんの問題を抱えています。

ちゃんと読んでないですが、現象が出ているのは

$name = htmlspecialchars($_SESSION['name']); $comment = htmlspecialchars($_SESSION['comment']); $header = 'From: '.$comment."\r\n"; $header .= 'Reply-To: '.$comment."\r\n";

あたりが原因だと思います。

mb_send_mail は使うのが難しい関数なので、ちゃんと勉強したほうが良いです。

投稿2019/04/11 06:42

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問