phpMailer没有添加多个地址

时间:2016-04-26 09:21:32

标签: php email phpmailer

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

P.S。我还检查了变量和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,因此循环没有任何问题。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

没有显示的代码可以准确地确定您的问题。

但是你的$row强烈暗示你正处于while($row=$stmt->fetch())的中间,对吧? 我们在您显示的代码中看不到任何类似内容。

我认为我有99%的机会对此表示正确 您的修复是“提取”您的数据库数据之前 PHPMailer部分
获取所有变量(发件人,发件人,发件人名称和一系列地址......还有一系列BCC?)。

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

然后,您可以继续进行电子邮件构建 设置你的身体,AltBody和主题 现在是循环到地址数组的时间  (不要称之为$ 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 - Doh!)。
PHPMailer就像一个魅力。

答案 1 :(得分:0)

这段代码可以帮助你,可以根据需要改变它。

$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();
}

答案 2 :(得分:-1)

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

$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"]);
}

答案 3 :(得分:-1)

您尝试向同一个收件人发送电子邮件多次,为避免这种情况,AddAddress中有条件删除相同的收件人 请在AddAddress函数中注释checkUnique($ 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;
}