2013-04-16 174 views
0

嗨,我是新来的,只有PHP的基本理解,所以任何帮助将是最受欢迎的。基本上我试图通过PHP发送一封电子邮件,可以有多个收件人。内容还需要显示符合特定标准的用户列表。我有脚本来查看数据库并发送电子邮件,但它只发送给一个人,并且只列出内容中的一个人。请有人建议如何将其更改为电子邮件/显示给多个收件人。我知道应该至少有三个人被送到。发送电子邮件给多个收件人(PHP,我的SQL)

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

<?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); 

?> 

回答

1

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

$to = "[email protected], [email protected]";

参考: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

通常在“TO:”字段中建议多个地址是不鼓励的,除非需要向所有收件人披露地址。这个建议既不能解决问题,也不能说明他的代码为什么失败。 –

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); 

      ?> 
0

您的$值改写反复的发言$to = $result_email['username'];使用它。您应该改为使用逗号分隔的列表。但为了良好,

  1. 考虑将地址设置为BCC,并将TO设置为无关紧要的事物,例如, noreply @ [yourdomain]隐藏收件人的地址。
  2. 没有被弃用使用DB-访问:PDO
0

您的来电来邮()不是在一个循环,所以它只会发送一个电子邮件。

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

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

相关问题