【问题标题】:Sending emails to multiple recipients (PHP, My SQL)向多个收件人发送电子邮件(PHP、Mysql)
【发布时间】:2013-04-16 16:23:01
【问题描述】:

您好,我是新手,对 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);

?>

【问题讨论】:

    标签: php email


    【解决方案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);
    

    【讨论】:

    • 通常不建议在“收件人:”字段中建议多个地址,除非需要向所有收件人披露地址。而且这个建议既没有解决问题,也没有说明他的代码失败的原因。
    【解决方案2】:

    您的代码错误。如果你使用它,你会有错误。您需要使用 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);
    
                ?>
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2012-05-18
          • 2012-09-24
          • 2017-12-05
          • 2015-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多