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

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

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

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

メール

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

Q&A

1回答

598閲覧

一斉メール送信ができない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

メール

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

0グッド

0クリップ

投稿2020/06/07 05:19

前提・実現したいこと

メール一斉送信を行う

発生している問題・エラーメッセージ

コードは出来たのですが、肝心のメールが送られません

該当のソースコード

PHP

1<html> 2<head> 3<title>hoge</title> 4</head> 5<center> 6 7 8<?php 9//データベース接続 10$server = "localhost"; 11$userName = "hogehoge"; 12$password = "hogehoge"; 13$dbName = "hogehoge"; 14 15$mysqli = new mysqli($server, $userName, $password,$dbName); 16 17if ($mysqli->connect_error){ 18 echo $mysqli->connect_error; 19 exit(); 20}else{ 21 $mysqli->set_charset("utf-8"); 22} 23 24$sql = "SELECT * FROM users"; 25 26$result = $mysqli -> query($sql); 27 28//クエリー失敗 29if(!$result) { 30 echo $mysqli->error; 31 exit(); 32} 33 34//レコード件数 35$row_count = $result->num_rows; 36 37//連想配列で取得 38while($row = $result->fetch_array(MYSQLI_ASSOC)){ 39 $rows[] = $row; 40} 41 42//結果セットを解放 43$result->free(); 44 45// データベース切断 46$mysqli->close(); 47 48?> 49 50 51 52<!--mail check--> 53 54 55<?php 56 if(isset($_POST['to'])) { 57 58 mb_language("Japanese"); 59 mb_internal_encoding("UTF-8"); 60 61 $to = $_POST['to']; 62 $title = $_POST['title']; 63 $content = $_POST['content']; 64 $headers = 'From: info@hogehoge.shop' . "\r\n"; 65 66 67 if(mb_send_mail($to, $title, $content, $headers)){ 68 69 echo "メールを送信しました"; 70 71 } else { 72 echo "メールの送信に失敗しました"; 73 } 74} else { 75 76} 77 78?> 79 80 81<!--mail check end--> 82 83 84 85<meta charset="utf-8"> 86</head> 87<body> 88<h1>メール送信フォーム</h1> 89<h3>使い方</h3> 90<p>1 下のフォームに必要な情報を入力 </p> 91<p>2 「メールを送信」ボタンを押す</p> 92登録ユーザー数:<?php echo $row_count; ?> 93<table border='1'> 94<tr> 95<th>ユーザーID</th> 96<th>ユーザー名</th> 97<th>メールアドレス(メール送信用)</th> 98</tr> 99 100<?php 101foreach($rows as $row){ 102?> 103<tr> 104 <td><?php echo $row['user_id']; ?></td> 105 <td><?php echo $row['username']; ?></td> 106 <td><?php echo $row['email']; ?> </td> 107 108</tr> 109<?php 110} 111?> 112</table border='1'> 113<hr> 114<!--mail --> 115<form action="" method="POST"> 116<input type="hidden" name="to" value=" 117 118<?php 119 120foreach($rows as $row){ 121 122 echo $row['email']; ?><?php echo ", " ; 123 124} 125?>"> 126<p>メールタイトル : <input type="title" name="to" ></input></p> 127<p>メール本文 : </p><textarea name="content" cols="50" rows="5"></textarea></p> 128<input type="submit" value="メールを送信"></input> 129</form> 130</center> 131</body> 132</html>

試したこと

hoge@a.com, hoge@b.com
hoge@a.com,hoge@b.comのようアドレスの並びを変えてみた

補足情報(FW/ツールのバージョンなど)

php7

hogehogeになってるところは実際のプログラムでは正しい物を入れています。
上記のプログラムを使うとメールを送信しましたと表示されますが、メールが送信されていません。

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

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

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

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

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

CHERRY

2020/06/07 05:55

どのような環境で実行されているでしょうか? レンタルサーバーですか? サーバーのドメインとメールの差出人のドメインは同じですか? 別ですか?
退会済みユーザー

退会済みユーザー

2020/06/07 05:57

「xrea」というレンタルサーバーを使用しています サーバーのドメインは http://○○○○.shop メールのドメインは info@○○○○.shopです。 ○○の中はサイトの名前を入れています。
guest

回答1

0

PHP

1<p>メールタイトル : <input type="title" name="to" ></input></p>

ではなく

PHP

1<p>メールタイトル : <input type="title" name="title" ></input></p>

だと思われます。逆に、タイトルにメールアドレスを入れたら、送信できるかも知れません。

【警告】SPAMに利用される可能性があります。

宛先(to)をhiddenでフォームに入れないでください。この領域はユーザーによって簡単に書き換えることができます。このままフォームを公開した場合SPMA配信に悪用可能です。SPAM業者はこのような悪用可能な脆弱なアプリを公開しているところを常に探しており、見つかり次第、SPAM配信に利用されます。XREAを含む多くのレンタルサーバーは、本人にその意図がなくても、SPAMを配信したアカウントは即停止、場合によっては強制退出です。

宛先はフォームからではなく、常にDBから取得するようにしてください。

投稿2020/06/07 07:46

raccy

総合スコア21735

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

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

退会済みユーザー

退会済みユーザー

2020/06/07 07:54

つまり連続配信自体をやめた方がいいという事ですか? 自分の手でゆっくり配信するなら大丈夫でしょうか こちらのプログラムはbasic認証で特定者しか入れないようにしますので、書き換えの心配は大丈夫かなと.. hidden value="DBから宛先全てを○○, ○○,と記入するPHPコード"を書いてあります。 ご返信お願いします
raccy

2020/06/07 08:24

私にはどのような場所でどのように公開されるのかまではわかりません。ただ、そのまま公開するとSPAM配信に悪用可能だと言うことです。 https://www.ipa.go.jp/security/vuln/websecurity.html 新版「安全なウェブサイトの作り方」の 8-(ii) 「HTML で宛先を指定しない。」をお読みください。Webアプリを公開する場合は、全ての項目についても一度目を通しておくことをお勧めします。(自作アプリをインターネットへ公開することはそれほど危険な行為であることに自覚を持ってください。)
退会済みユーザー

退会済みユーザー

2020/06/07 08:35

読んでみて理解が出来ました。 もし私が上記のコードを使い、一度に100件のメールアドレスにメールを送るとSPAMとブロックされる場合があるという事ですか? 手で100件分ゆっくり送信する場合はSPAM扱いされる危険性はあるのでしょうか 教えていただきたいです。
raccy

2020/06/07 09:54 編集

件数が問題という話ではありません。第三者が勝手に決めた任意の「宛先」へ任意の「本文」を送ることができると言うことです。例えば、悪意ある誰かがこの仕組みを悪用することで、「あなたの知り合いでも何でも無い人」へ「あやしい健康食品や投資の話」が本文に書かれたSPAMメールを送ってしまいます。この時のメールの送信者は「あなた」になります。「あなた」がサーバーに設置したアプリだからです。SPAMメールが送れてきた「あなたの知り合いでも何でも無い人」にとっては迷惑極まりないため、サーバーの運用会社に「あなた」がSPAMを送ってきていると報告します。サーバーの運用会社は、報告の基づき、「『あなた』はSPAM業者である、または、SPAM業者に利用されている」と判断し、「あなた」のアカウントを停止します。 Webアプリのアクセスを認証等で制限をければ良いと思うかも知れませんが、認証自体が安全では無い場合もありますし、CSRF攻撃によって認証をすり抜けてしまうことができる場合もあります。「安全なウェブサイトの作り方」に記載されているセキュリティ対策はどれも基本的なことです。その中の一つでも「実施しない」場合は、何かしら別の仕組みを持って安全であると言うことを高度に判断する必要があります。その判断には高度なセキュリティ知識が必要になりますので、専門家に依頼するか、体系的にセキュリティを学ぶ方が良いでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問