2013-04-16 222 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將成爲您第二次查詢返回的最後一行所需的正文。

相關問題