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

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

ただいまの
回答率

89.09%

DBに登録されているメールアドレスに一件づつ送信

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 182

oooomaru

score 65

前提・実現したいこと

メールを一斉送信する機能は付いたのですが、問題点があります。
DBに登録されているメールアドレスすべてに送信するため、ユーザーがメールの「To」を見ると登録されているメールアドレスをすべて見れてしまうのです。
なので、1件づつ全く同じ内容のメールを送信できないかと思ったのですが、コードが思いつきません。
どなたかコードが分かる方はいませんか?
分かる方は教えていただきたいです。

補足
一件づつ送信ではなくても、メールを受信した方が登録ユーザーのメールアドレスを見る事が出来なければ大丈夫です。

メール一斉送信機能

<html>
<head>
<title>hoge</title>
</head>
<center>


<?php
//データベース接続
$server = "localhost";
$userName = "hogehoge";
$password = "hogehoge";
$dbName = "hogehoge";

$mysqli = new mysqli($server, $userName, $password,$dbName);

if ($mysqli->connect_error){
    echo $mysqli->connect_error;
    exit();
}else{
    $mysqli->set_charset("utf-8");
}

$sql = "SELECT * FROM users";

$result = $mysqli -> query($sql);

//クエリー失敗
if(!$result) {
    echo $mysqli->error;
    exit();
}

//レコード件数
$row_count = $result->num_rows;

//連想配列で取得
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $rows[] = $row;
}

//結果セットを解放
$result->free();

// データベース切断
$mysqli->close();

?>



<!--mail check-->


<?php
  if(isset($_POST['to'])) {

                        mb_language("Japanese");
            mb_internal_encoding("UTF-8");

            $to = $_POST['to'];
            $title = $_POST['title'];
            $content = $_POST['content'];  
                        $headers = 'From: info@hogehoge.shop' . "\r\n";


            if(mb_send_mail($to, $title, $content, $headers)){

                                echo "メールを送信しました";

            } else {
                echo "メールの送信に失敗しました";
            }
} else {

}

?>


<!--mail check end-->



<meta charset="utf-8">
</head>
<body>
<h1>メール送信フォーム</h1>
<h3>使い方</h3>
<p>1  下のフォームに必要な情報を入力  </p>
<p>2  「メールを送信」ボタンを押す</p>
登録ユーザー数:<?php echo $row_count; ?>
<table border='1'>
<tr>
<th>ユーザーID</th>
<th>ユーザー名</th>
<th>メールアドレス(メール送信用)</th>
</tr>

<?php
foreach($rows as $row){
?>
<tr>
    <td><?php echo $row['user_id']; ?></td>
    <td><?php echo $row['username']; ?></td>
    <td><?php echo $row['email']; ?> </td>

</tr>
<?php
}
?>
</table border='1'>
<hr>
<!--mail -->
<form action="" method="POST">
<input type="hidden" name="to" value="

<?php

foreach($rows as $row){

 echo $row['email']; ?><?php echo ", " ; 

}
?>">
<p>メールタイトル : <input type="title" name="to" ></input></p>
<p>メール本文 : </p><textarea name="content" cols="50" rows="5"></textarea></p>
<input type="submit" value="メールを送信"></input>
</form>
</center>
</body>
</html>

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

hogehogeの場所は実際のメールアドレス等に変えれば動いております。
php 7
xrea server
ご回答宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/07 20:11

    BBCに書く方法も考えてみます。

    キャンセル

+1

while($row = $result->fetch_array(MYSQLI_ASSOC)){

のループの中で送信すれば良いのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/07 20:06

    <?php
    if(isset($_POST['to'])) {

    while($row = $result->fetch_array(MYSQLI_ASSOC)){
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");

    $to = $_POST['to'];
    $title = $_POST['title'];
    $content = $_POST['content'];
    $headers = 'From: info@hogehoge.shop' . "\r\n";


    if(mb_send_mail($to, $title, $content, $headers)){

    echo "メールを送信しました";

    } else {
    echo "メールの送信に失敗しました";
    }

    }

    } else {

    }


    ?>

    で実行ですか?

    キャンセル

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

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る