向多个收件人发送电子邮件(PHP,My SQL)

时间:2013-04-16 16:23:01

标签: php email

您好我是新手,只对PHP有基本的了解,所以任何帮助都会受到欢迎。基本上我试图通过PHP发送一个可以有多个收件人的电子邮件。内容还需要按照特定条件显示用户列表。我有脚本来查看数据库并发送电子邮件,但它只发送给一个人,只列出内容中的一个人。请有人可以建议如何将其更改为电子邮件/显示给多个收件人。我知道应该至少有三个人被送到。

任何帮助/指针都是最受欢迎的。谢谢。

<?php

session_start();

require_once('../config.php');

$errmsg_arr = array();

$errflag = false;

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}

$db = mysql_select_db(database_name);
if(!$db) {
die("Unable to select database");
}

$result = mysql_query("SELECT username FROM users WHERE user_type='admin'");

while($result_email = mysql_fetch_array($result))

$to = $result_email['username'];

$result2 = mysql_query("SELECT * FROM users
WHERE ticked='1' AND NOT user_type='super'");

while($result2 = mysql_fetch_array($result2))

$body = $result2['fname'] . " " . $result2['lname'] . " , " . $result2['username'];

mail ($to, 'Subject', $body);

?>

4 个答案:

答案 0 :(得分:1)

你可以做到这一点。他们只需要用逗号分隔。

$to = "email@email.com, email2@email2.com";

参考:http://php.net/manual/en/function.mail.php

此外,您的代码粘贴方式有点令人困惑。但是,如果您在while循环中加载所有电子邮件。然后你想在一段时间后发送它。例如:

你希望它是:

//create an empty $to string
$to = '';

//add all the emails
while($emails as $email)
{
    $to .= $email . ',';
}

//remove the last comma
rtrim($to, ","); 

//send away
mail($to, $subject, $message);

答案 1 :(得分:1)

你的代码错了。你使用它会有错误。你需要使用implode在电子邮件之间添加逗号。检查你的PHP。我纠正了,但你必须使用while声明。你有一个作业的多个mysql查询。你也不应该使用mysql_query。使用PDO代替......

你应该像这样使用它

<?php
    while($row = mysql_fetch_array($result2))
    {
       $addresses[] = $row['username'];
    }

    $to = implode(", ", $addresses);
?>

使用您的代码

            <?php

                session_start();

                require_once('../config.php');

                $errmsg_arr = array();

                $errflag = false;

                $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
                if(!$link) {
                die('Failed to connect to server: ' . mysql_error());
                }

                $db = mysql_select_db(database_name);
                if(!$db) {
                die("Unable to select database");
                }

                $result = mysql_query("SELECT username FROM users WHERE user_type='admin'");

                while($row = mysql_fetch_array($result2))
                {
                    $addresses[] = $row['username'];
                }

                $to = implode(", ", $addresses);

                $result2 = mysql_query("SELECT * FROM users
                WHERE ticked='1' AND NOT user_type='super'");

                $body = mysql_fetch_array($result2);
                $body = $result2['fname'] . " " . $result2['lname'] . " , " . $result2['username'];

                mail ($to, 'Subject', $body);

            ?>

答案 2 :(得分:0)

您使用语句$to = $result_email['username'];重复覆盖$的值。您应该改为以逗号分隔的列表。但为了善良,

  1. 考虑将地址设置为BCC,并将TO设置为无关紧要的内容,例如: noreply @ [yourdomain]隐藏收件人的地址。
  2. 使用未弃用的数据库访问:PDO

答案 3 :(得分:0)

您对mail()的调用不在循环中,因此它只会发送一封电子邮件。

你设置$ to的while循环只是在每次循环迭代时覆盖前一个值。

所以最后$ to将被设置为第一个查询返回的最后一个用户名。并且你的$ body将成为你第二次查询返回的最后一行所需的主体。