phpmailer addBCC 不存储地址

Posted

技术标签:

【中文标题】phpmailer addBCC 不存储地址【英文标题】:phpmailer addBCC not storing addresses 【发布时间】:2016-07-07 02:07:27 【问题描述】:

我正在使用 phpMailer 并使用 AddBCC 发送到我的大部分地址(仅使用 AddAddress 中所需的 1 个)。它似乎工作正常(没有错误),但我发现它没有保存(或发送到)我使用 $mail->AddBCC 处理的所有地址。它会跳过其中一些,但保留其他一些。因此,当我执行 print_r($mail->getBccAddresses()) 时,我可以看到它只有一些电子邮件地址。我正在以小组的形式处理我的地址列表,所以我可以更好地控制事情,所以我认为不会有这样的问题。我在我的程序中包含了适用的代码:

<?php session_start();

require '../PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;

$emailist_cnt = 3;

    for ($i=1; $i<= $emailist_cnt; $i++) 
      //loop to gather email addresses into array $emailistAry[][]
    

    // First, set up email message and required parameters.
    $toname = "Grp-members";// Unused mailbox name
    $fromname = "Webmaster";  
    $replyname ="Grpwebmaster";  
        $fromaddr = $fromname."@mydomain.org";
    $toaddr = $toname."@mydomain.org";
    $rplyaddr = $replyname."@gmail".".com";

    $subject = "-- Website Update--";
    $note1 = "New content has been added to the website";
    $note2 = "Go check it out, if you want to stay up-to-date:";
    $message = "Greetings HLCA Member! ".$note1." ".$note2;

    // Set mail environment variables
    $mail->isSMTP();                                    
    $mail->Host = 'smtp.hiddenlakeonline.org';          
    $mail->SMTPAuth = true;                             
    $mail->Username = $fromname."@".$domain.".org";    
    $mail->Password = $webpass;                         
    $mail->SMTPSecure = 'tls';                          
    $mail->Port = 587;                                  

    // Set mail details that remain constant for every recipient
       $mail->SetFrom($fromaddr);      
       $mail->AddAddress($toaddr);    
       $mail->AddReplyTo($rplyaddr);  
           $mail->Subject = $subject;
       $mail->Body    = $message;

       $max_emails = 25; // max num emails per list  

    for ($i=1; $i <= $emailist_cnt; $i+=1)  

           for ($j=1; $j <= $max_emails; $j+=1)                   
              // Addresses in current list will be added to BCC param.  
      if ($emailistAry[$i][$j] != '') 
             $mail->AddBCC($emailistAry[$i][$j]); // add email to BCC                 
        // for j loop

           echo "would send to email list here. ";
       print_r($mail->getBccAddresses()); 

       // Clear cumulative recipient list for next loop
       $mail->clearBCCs();

     // for i loop
 ?>  

如您所见,我只是在循环添加密件抄送条目。但是,当我打印出 getBCCaddresses 数组时,每个列表中总是至少缺少一封电子邮件。 PHP Mailer 中是否存在错误?还是我做错了什么?

我在另一个网站(sourceforge.net?)上看到过类似的帖子(没有任何代码),但这个问题从未得到解答。否则,没有任何类似的东西可以提供帮助。希望这里有人对此有所了解。

以下是我使用回显输出得到的一些结果: i,j,添加此电子邮件:1,1,ImxEarth@gmail.com i,j,添加此电子邮件:1,2,heffxdog@me.com i,j,添加此电子邮件:1,3,imxearth@gmail.com i,j,添加此电子邮件:1,4,Aaronx72@yahoo.com

print: Array ( [0] => Array ( [0] => ImForEarth@gmail.com [1] => ) [1] => Array ( [0] => heffdog@me.com [1] => ) [2] => Array ( [0] => AaronTW72@yahoo.com [1]  => ) )                                                                                                           

phpMailer 是否可以防止密件抄送数组中的重复地址?

【问题讨论】:

这是我使用回显输出得到的一些输出:i,j,添加此电子邮件:2,1,hlcawebmaster@gmail.com i,j,添加此电子邮件:2,2,psy。 jennifer@gmail.com i,j,添加此电子邮件:2,3,heffdog@me.com i,j,添加此电子邮件:2,4,hlcawebmaster@gmail.com 将在此处发送电子邮件列表。 BCC list = psy.jennifer@gmail.com,heffdog@me.com,, bcc print: Array ([0] => Array ([0] => hlcawebmaster@gmail.com [1] => ) [1] = > 数组 ( [0] => psy.jennifer@gmail.com [1] => ) [2] => 数组 ( [0] => heffdog@me.com [1] => ) ) 您没有检查来自addBCCAddress 的返回值,因此您看不到它何时拒绝无效地址。 是的,PHPMailer 确实会跳过重复的地址。 【参考方案1】:

我想我找到了答案! AddBCC 似乎只会将唯一的电子邮件地址添加到其数组中。因此,如果 BCCaddresses 数组中已经存在一个电子邮件地址,则 Mail->AddBCC('email') 语句将不会再次添加它。这在测试时变得很明显,因为我们经常需要使用重复来创建大量的电子邮件。好吧,您可以处理重复的,但它们不会被添加到密件抄送参数中,也不会被多次邮寄。感谢所有回复!

【讨论】:

以上是关于phpmailer addBCC 不存储地址的主要内容,如果未能解决你的问题,请参考以下文章

PHPMailer 或 php 邮件功能 - 显示密件抄送地址

PHP下利用PHPMailer

夯实PHP基础PHP发送邮件(PHPMailer)

PHP 通过PHPMailer发送邮件

PHP 通过PHPMailer发送邮件

PHP中利用PHPMailer配合QQ邮箱实现发邮件