2017-08-03 169 views
-2

我只是與phpmailer合作。我想生成多個消息並將它們發送給多個收件人。但是,generateMessage函數()只是發送給收件人列表中的第一個收件人。 這是我的代碼,任何幫助都很感激。PhP郵件 - 發送多個郵件給多個收件人

require_once("class.phpmailer.php"); 

set_time_limit(0); 

$wh = implode("', '", $abc); 
echo "aaa" . $wh; 
//echo $email; 
$db = DB::getInstance(); 
$query1 = $db->query("SELECT * FROM tablea WHERE Location IN ('$wh')"); 
$result1 = $query1->results(); 
$query2 = $db->query("SELECT * FROM tableb WHERE Location IN ('$wh')"); 
$result2 = $query2->results(); 
$query3 = $db->query("SELECT * FROM tablec"); 
$result3 = $query3->results(); 
foreach ($result3 as $b) { 
    $username = $b->email; 
    $password = $b->password; 
    $Times = $b->P2_Time; 
} 
$minutePerDay = (24 * 60)/$Times; 
echo $minutePerDay; 
foreach ($result1 as $r) { 
    $TimeP2SendE = $r->Timea; 
    break; 
} 
foreach ($result2 as $r) { 
    $TimeP2SendG = $r->Timea; 
    break; 
} 
$currentTime = date('Y-m-d H:i:s'); 
$TimeDifferentE = (strtotime($currentTime) - strtotime($TimeP2SendE))/60; 
$TimeDifferentG = (strtotime($currentTime) - strtotime($TimeP2SendG))/60; 
if ($TimeDifferentE >= $minutePerDay or $TimeDifferentG >= $minutePerDay) { 
    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->Host = "smtp.gmail.com"; 
    $mail->Port = 465; 
    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = 'ssl'; 
    $mail->Username = $username; 
    $mail->Password = $password; 
    $mail->AltBody = " "; 
    $mail->From = $username; 
    $mail->FromName = 'Noti'; 
    $mail->clearAddresses(); 
    $mail->AddAddress($email); 
    $mail->Subject = $title; 
    $mail->IsHTML(true); 
    $mail->Body = '<html><body>'; 
    $mail->Body .= "<h3>Information </h3>"; 
    $mail->Body .= '<table class="table table-border">'; 
    $mail->Body .= "</table>"; 
    $mail->Body .= "</body></html>"; 

    if (!$mail->Send()) { 
    echo "Error sending: " . $mail->ErrorInfo; 
    } else { 
    echo "Letter is sent"; 
    } 
} 

我已經運行此功能4次發送到4個不同的收件人,但它只是發送到第一個收件人。

+0

爲什麼不添加包含所有聯繫人的陣列,從1所接觸到任何數目的存在和循環爲每個聯繫人的AddAddress功能。 – wayzz

+0

從這裏$'email'到哪裏'$ mail-> AddAddress($ email);'? –

+0

[PHPmailer - 多次發送電子郵件]的可能重複(https://stackoverflow.com/questions/22316358/phpmailer-multiple-sending-of-e-mail) –

回答

0

你可以建立聯繫對象和循環數組的數組添加的每個聯繫人喜歡這樣:

foreach($contacts as $contact){ 
    $mail->AddAddress($contact->email); 
} 

這將增加每個聯繫人的電子郵件,並建立一個郵件列表。

對於每個收件人的自定義正文,我通常使用以下方法。

function sendEmail($email, $name, $body, $altBody = null) { 
     $mail = new PHPMailer; 
     $mail->IsSMTP(); 
     $mail->Host = "smtp.gmail.com"; 
     $mail->Port = 465; 
     $mail->SMTPAuth = true; 
     $mail->SMTPSecure = 'ssl'; 
     $mail->Username = $username; 
     $mail->Password = $password; 
     $mail->From = $username; 
     $mail->FromName = 'Noti'; 
     $mail->clearAddresses(); 
     $mail->Subject = $title; 
     $mail->IsHTML(true); 
     $mail->addAddress($email, $name);  // Add a recipient  
     $mail->Body = $message; 
     $mail->AltBody = $altBody; 

     if (!$mail->send()) { 
      error_log($mail->ErrorInfo); 
      return false; 
     } else { 
      return true; 
     } 
    } 

foreach($contacts as $contact){ 
    //create message here 
    sendEmail($contact->email, $contact->name, $message); 
} 
+0

如果我想爲列表收件人發送相同的電子郵件,我將使用與您的方法相同的方法,但是我擁有多個不同的電子郵件正文。例如,收件人A的電子郵件A,收件人B的電子郵件B,......約10次,那麼在這種情況下我該怎麼辦? – HaiDang

+0

重要的是多個不同的電子郵件到多個收件人,不同的電子郵件到多個收件人。 – HaiDang

+0

@HaiDang由於每個電子郵件收件人都有不同的內容,因此您必須爲每個收件人發送不同的電子郵件。在這種情況下,我所做的就是創建一個自定義函數,接受多個參數(名稱,電子郵件,主體)並循環收件人列表並每次調用該函數。 – wayzz

0
require_once("class.phpmailer.php"); 

    set_time_limit(0); 

    $wh = implode("', '", $abc); 
    echo "aaa" . $wh; 
    //echo $email; 
    $db = DB::getInstance(); 
    $query1 = $db->query("SELECT * FROM tablea WHERE Location IN ('$wh')"); 
    $result1 = $query1->results(); 
    $query2 = $db->query("SELECT * FROM tableb WHERE Location IN ('$wh')"); 
    $result2 = $query2->results(); 
    $query3 = $db->query("SELECT * FROM tablec"); 
    $result3 = $query3->results(); 
    $currentTime = date('Y-m-d H:i:s'); 
    foreach ($result3 as $b) { 
     $username = $b->email; 
     $password = $b->password; 
     $Times = $b->P2_Time; 
    } 
    $minutePerDay = (24 * 60)/$Times; 
    echo $minutePerDay; 
    foreach ($result1 as $r) { 
     $TimeP2SendE = $r->Timea; 
     $TimeDifferentE = (strtotime($currentTime) - strtotime($TimeP2SendE))/60; 
if($TimeDifferentE >= $minutePerDay){ 
    sendemail($username,$password,$email,$title); 
} 
    } 
    foreach ($result2 as $r) { 
     $TimeP2SendG = $r->Timea; 
    if($TimeDifferentG >= $minutePerDay){ 
    sendemail($username,$password,$email,$title); 
} 
    } 

public function sendEmail($username,$password,$email,$title){ 
$mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->Host = "smtp.gmail.com"; 
    $mail->Port = 465; 
    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = 'ssl'; 
    $mail->Username = $username; 
    $mail->Password = $password; 
    $mail->AltBody = " "; 
    $mail->From = $username; 
    $mail->FromName = 'Noti'; 
    $mail->clearAddresses(); 
    $mail->AddAddress($email); 
    $mail->Subject = $title; 
    $mail->IsHTML(true); 
    $mail->Body = '<html><body>'; 
    $mail->Body .= "<h3>Information </h3>"; 
    $mail->Body .= '<table class="table table-border">'; 
    $mail->Body .= "</table>"; 
    $mail->Body .= "</body></html>"; 

    if (!$mail->Send()) { 
    echo "Error sending: " . $mail->ErrorInfo; 
    } else { 
    echo "Letter is sent"; 
    } 
} 
相關問題