phpMailer 不添加多个地址


phpMailer not adding multiple addresses

我在使用phpMailer时遇到了问题,并且在使用if语句时它不会发送到多个地址。如果我对电子邮件进行硬编码,它们工作正常...

附言我还检查了变量和 if 语句,并且都正常工作。

$mail = new PHPMailer;
$mail->setFrom('x@x.com', 'xxx');
$mail->addAddress($row['recipient']); 
if ( $row['recipient2'] != '' ) { $mail->addAddress($row['recipient2']); }
if ( $row['recipient3'] != '' ) { $mail->addAddress($row['recipient3']); }
$mail->addAddress('x@x.com'); 
$mail->addReplyTo('x@x.com', 'xxx');

编辑 - 新示例 - 赏金集:

我尝试了以下脚本,它应该给我 7 个地址,但我只得到一个。(硬编码的)

$mail = new PHPMailer;
$mail->setFrom($from_email);
$mail->addAddress('test@test.com'); 
if ( $rows != 0 ) {
    for ( $i = 0; $i < $rows; $i ++ ) {
        $row = clean_fetch_assoc($result);
        $mail->addAddress("test2@test.com"); 
    }
}
var_dump($rows);
var_dump($mail->getAllRecipientAddresses());
var_dump($mail->isError());
die();

哪个返回...

int 6
array (size=1)
  'test@test.com' => boolean true
boolean false

如您所见$rows返回 6,因此循环没有任何问题。

有什么想法吗?

没有足够的代码显示来准确和积极地确定您的问题。

但是你的$row强烈表明你正处于while($row=$stmt->fetch())之中,对吧?我们在您显示的代码中看不到类似的东西。

我想我有99%的机会在这一点上是正确的。
您的解决方法是在 PHPMailer 部分之前"提取"数据库数据

获取所有变量(发件人,发件人,发件人名称和一系列地址...还有密件抄送的阵列?).

在进入 PHPMailer 部分之前完成你的 while fetch 循环,该部分不应包含在循环中。

然后,您可以继续构建电子邮件。
设置您的身体、替代主体和主题。
现在是循环到地址数组的时候了。
(不要称它为$row!!!

顺便说一下,你的 for 循环声明并不像你想象的那么正确:
( $i=0;$i<$rows;$i++ )应该是( $i=0;$i<sizeOf($rows);$i++ ).
注意到 sizeOf()?

这段代码非常适合我:
我建议你尝试一下,以便承认PHPMailer不是问题。

// This array would be defined by you fetch loop.
$moreToAdressArray=["test1@example.com","test2@example.com","test3@example.com","test4@example.com"];
$endpointMsg->AddAddress( $clientLine['email'] );
for($i=0;$i<sizeOf($moreToAdressArray);$i++){
    $endpointMsg->AddAddress( $row[$i] );
}
$endpointMsg->AddBCC ($SENDER);

我有 5 次相同的电子邮件(地址与..@example.com - 哎呀!
PHPMailer就像一个魅力。

愿此代码对您有所帮助,请根据需要进行更改。

$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false');
foreach ($result as $row) { 
    $mail->addAddress($row['email'], $row['full_name']);
    if (!$mail->send()) {
        echo "Mailer Error (" . str_replace("@", "&#64;", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
        break; //Abandon sending
    } else {
        echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "&#64;", $row['email']) . ')<br />';
        //Mark it as sent in the DB
        );
    }
    // Clear all addresses for next loop
    $mail->clearAddresses();
}

首先像这样存储您的多封电子邮件

$this->db->select('ID, email, firstName, lastName');
$this->db->from('contact');
$this->db->where_in("ID",$Id);
$query=$this->db->get();
$res=$query->result_array();
for($i=0; $i<count($res); $i++){
  $toArr[$i]['email']=$res[$i]['email'];
  $toArr[$i]['name']=$res[$i]['firstName'].' '.$res[$i]['lastName'];    
}
$row["email"]=$toArr;

然后添加地址

foreach($row as $v){
 $mail->AddAddress($v["email"], $v["name"]);
}

您尝试多次向相同的收件人发送电子邮件,为了避免这种情况,AddAddress内部有条件删除相同的收件人请评论检查添加地址函数中的唯一($address)函数。

你可以在 Class.phpmailer.php 文件中找到这个函数

function AddAddress($address, $name = "") {
    /*if(!$this->checkUnique($address)){
        return;
    }*/
    $cur = count($this->to);
    $this->to[$cur][0] = trim($address);
    $this->to[$cur][1] = $name;
}
/** 
 * Added function for unique address Aug 29 Nitin
 *  @param string $address
 * */

function checkUnique($address){
    $flag= true;
    for($i=0;$i<count($this->to);$i++){
        if(empty($this->to[$i][0]) ||  $this->to[$i][0]==$address){
            return false;
        }
    }
    for($i=0;$i<count($this->cc);$i++){
        if(empty($this->cc[$i][0]) || $this->cc[$i][0]==$address){
            return false;
        }
    }
    for($i=0;$i<count($this->bcc);$i++){
        if(empty($this->bcc[$i][0]) || $this->bcc[$i][0]==$address){
            return false;
        }
    }
    return $flag;
}