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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

メール

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

HTML

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

Q&A

解決済

1回答

1077閲覧

複数名にメールを送信することもできるように関数を組むには

Nishin

総合スコア30

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

メール

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

HTML

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

0グッド

0クリップ

投稿2020/01/24 16:48

編集2020/01/24 16:51

これまでにご教示頂いた内容をもとに、現在、HTMLでメールの送信フォームを、PHPでメールを実際に送信して完了をお知らせするページを作成しております。

ここまでで、フォームに入力した内容を1名のみに送信できるようになっているのですが、これから、一度に複数名(1回の送信につき3名迄を想定)にメッセージを送信できる機能を追加しようと計画しています。
ここで、送信したいメッセージを、1名以上3名以下に送信(1名は必須だが全3名分のアドレスをフォームに埋める必要はない)できるようにする為には、PHPのコードをどのように追記すればよいでしょうか。

尚、ここまでに記述したコードは、以下の通りです。

remindmailform.html <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <style> input, textarea { margin-bottom: 5px; padding: 3px; } @media screen and (min-width:480px){ /*画面幅が781px以上の時*/ h2 { color: red; margin-left: 175px; } label { margin-right: 5px; font-weight: bold; } label+input {margin-bottom: 5px;} .long { width: 300px; } .form-group { position: relative; } #submit { position: relative; top:10px; left:225px; } .footer {margin-left: 195px;} } @media screen and (max-width:480px){ /*画面幅が480pxまでの時*/ h2 { color: red; text-align: center; } label { margin-right: 2px; font-weight: bold; } label+input {margin-bottom: 5px;} textarea {width:300px;} .long { width: 250px; } .form-group { position: relative; } #submit { position: relative; top:10px; left:110px; } .footer {text-align: center;} } </style> <title>リマインドメールフォーム</title> </head> <body> <h2>連絡メールフォーム</h2> <form action="mailsended.php" method="post"> <div class="form-group"> <label for="name">連絡者名</label> <input type="text" id="name" class="long" name="name" required placeholder="入力必須です。"><br> <label for="yourEmail">連絡者のメールアドレス</label> <input type="text" id="yourEmail" class="long" name="yourEmail"><br> <br> <label for="what">件名</label> <input type="text" id="what" class="long" name="what" required placeholder="入力必須です。"><br> <label for="moment">連絡事項</label><br> <textarea id="moment" name="moment" rows="10" cols="80" required placeholder="入力必須です。"></textarea><br> <label for="date">日時</label> <input type="text" id="date" name="date"><br> <label for="place">場所</label> <input type="text" id="place" class="long" name="place"><br> <label for="bring">持参物</label> <input type="text" id="bring" class="long" name="bring"><br> <label for="remark">備考</label><br> <textarea id="remark" name="remark" rows="3" cols="80"></textarea><br> <br> <label for="email">送信先メールアドレス</label> <input type="text" id="email_1" class="long" name="email_1" required placeholder="入力必須です。"><br> <input type="text" id="email_2" class="long" name="email_2"><br> <input type="text" id="email_3" class="long" name="email_3"><br> <br> </div> <input id="submit" type="submit" name="submit" value="この内容で送信する"> <script> $('#submit').click(function(){ if(!confirm('この内容で送信しますか?')){ /* キャンセルの時の処理 */ return false; }else{ /* OKの時の処理 */ location.href = 'mailsended.php'; } }); </script> </form> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </body> </html>
mailsended.php <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <style> a {text-decoration: none} @media screen and (min-width:480px){ /*画面幅が781px以上の時*/ h3 { color: red; margin-left: 175px; } a button {margin-left: 170px;} .footer {margin-left: 170px;} } @media screen and (max-width:480px){ /*画面幅が480pxまでの時*/ h3 { color: red; text-align: center; } a button {text-align: center;} .footer {text-align: center;} } </style> <title>リマインドメール送信完了画面</title> </head> <body> <h3>メールを送信しました!</h3> <?php $mail_body = ''; // バリデーション $mail_body .= '連絡者名:'.$name.PHP_EOL; if(trim($moment) !== ''){ $mail_body .= 'moment:'. $moment.PHP_EOL; } if(trim($subject) !== ''){ $mail_body .= 'what:'. $subject.PHP_EOL; } if(trim($to) !== ''){ $mail_body .= 'email:'. $to.PHP_EOL; } // 送信者名 $name = filter_input(INPUT_POST ,'name'); // 伝達事項 $moment = filter_input(INPUT_POST ,'moment'); // 日時 $date = filter_input(INPUT_POST ,'date'); // 場所 $place = filter_input(INPUT_POST ,'place'); // 持ち物 $bring = filter_input(INPUT_POST ,'bring'); // 備考 $remark = filter_input(INPUT_POST ,'remark'); // 送信先アドレス $to_1 = filter_input(INPUT_POST ,'email_1'); $to_2 = filter_input(INPUT_POST ,'email_2'); $to_3 = filter_input(INPUT_POST ,'email_3'); // 送信者のアドレス $yourEmail = filter_input(INPUT_POST ,'yourEmail'); // 件名 $subject = filter_input(INPUT_POST ,'what'); // $set系の条件分岐 $setdate = $date=="" ? null : "【日時】:$date\n"; // 「もし$dateの中身が""なら、$setdateはnullで、そうでなければ "【日時】:$date\n" となる」という意味。 $setplace = $place=="" ? null : "【場所】:$place\n"; $setbring = $bring=="" ? null : "【持参物】:$bring\n"; // 送信内容 $msg="$moment\n"."\n". "$setdate". "$setplace". "$setbring". "$remark\n"."\n". "【送信者】:$name\n". "【Eメール】:$yourEmail\n"; // メール送信関数 mb_internal_encoding("UTF-8"); mb_send_mail($to_1.$to_2.$to_3,$subject,$msg); ?> <a href="remindmailform.html"><button type="button" name="return"> リマインドメールフォームに戻る </button></a> <br> <br> <div class="footer"> <small> &copy; 2020 <b>Sunny Boots Project</b> </small> </div> </body> </html>

PS コード記述の際に、「これは特にやってほしい」という事(記述方法等)がありましたら、そちらを明記して頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

大前提

  • PHPマニュアルの読み込みが足りていません。

PHPマニュアルで機能を確認すれば解消できることも多々あります。

  • ロジックとビューは分離しよう

上記の指摘も含めて、何も言わず「初心者を戒めるPHP」のような記事は熟読してください

入力値検証(バリデーション)

required

HTML,JavaScriptはブラウザデベロッパツールより改ざんできるので、
サーバーサイドでのバリデーションは必須です。
type="text"なので、メールアドレスとして相応しくない形式の文字列もきます。

他の項目にも必要でしょう。
PHPマニュアルを確認したら分かる通り、filter_input()の第3引数には様々なフィルタが掛けられます。
送信された情報を取得するよりも機能名の通り、フィルタを掛けることが主たる目的の機能です。
使ってください。
※もちろんそれではカバーできないものは個々にバリデーションを掛ける必要がある

メール送信

$to_1.$to_2.$to_3

これだと
a@example.com
b@example.com
c@example.com
ってくると
a@example.comb@example.comc@example.com という文字列を渡すことになりますが、大丈夫ですか?

WindowsメールでもGmailでも使ったことがあれば分かるかと思いますが、
複数人に送る場合は区切り文字が必要です。
mb_send_mail()では,でメールアドレスを区切ります。

to

送信先のメールアドレス。 **各アドレスをカンマで区切ると、複数の宛先を to に指定できま**す。 このパラメータは、自動的にはエンコードされません。

※ただし、今回のように3名でなく大量に送りたい場合は別の方法を検討すべき。

その他セキュリティ対策

特にメール送信の場合はメールヘッダインジェクションの脆弱性対策は必須です。
その対策はきちんと盛り込まれていますか?どのような脆弱性か調べて確認してください。

投稿2020/01/24 22:28

m.ts10806

総合スコア80731

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

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

Nishin

2020/01/27 08:06

詳細なご回答、ありがとうございます。 ・・・仰る通りです。私自身、PHPマニュアルをまともに参照せず、そもそも参照の仕方も分からないまま、PHPのプログラムを作成しておりました。現時点での自分の甘さを、この度は痛感する事となりました。 お陰様で、送り先のフォームを追加($to_1,$to_2・・・のように)せずとも、送信先をカンマ(,)で区切る事によって、自分のgmailアドレスとスマホのアドレスに、テストメールを飛ばせたことが確認できました。ありがとうございました。 ご指摘頂いているように、セキュリティ面等の安全性の問題は、まだまだ勉強しなければならない事が山積しているのが現状です。今回のメールも、他者へ紹介提供するにはまだ安全でない状態ですので、もっとそれらの点(+データベース接続)を勉強してから、より改良を加えて提供できるようにすることを目指します。
m.ts10806

2020/01/27 08:51

>PHPマニュアル 辞書とおもってください。 「この漢字なんだろう?」→読み方、用法がある 「こういうときどういう慣用句使えばいいだろう?」→逆引きで探す 両方できます。 特に後者は侍なんとかとかテックなんとかがよく出てきますが、鵜呑みにせず必ず出てきた機能をPHPマニュアルで確認してください。 (そもそもさまざまな理由で例の二者は積極参照は控えましょう)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問