0

嗨,我是新手,只对 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

4 回答 4

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);
于 2013-04-16T16:25:53.490 回答
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);

            ?>
于 2013-04-16T16:32:17.037 回答
0

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

而您设置 $to 的 while 循环只是在每次循环迭代时覆盖先前的值。

所以最后 $to 将被设置为第一个查询返回的最后一个用户名。您的 $body 将是您想要的第二个查询返回的最后一行的正文。

于 2013-04-16T16:45:01.643 回答
0

您正在使用语句重复覆盖 $to 的值$to = $result_email['username'];。您应该改为创建一个逗号分隔的列表。但看在上帝的份上,

  1. 考虑将地址设置为密件抄送,并将 TO 设置为无关紧要的内容,例如 noreply@[yourdomain] 以隐藏收件人的地址。
  2. 使用未弃用的 DB 访问:PDO
于 2013-04-16T16:38:17.570 回答