PHPMailer Foreach循环

时间:2011-12-09 21:03:55

标签: php foreach phpmailer

我目前正在使用PHPMailer,它从上传的.txt文件中获取电子邮件地址列表。当前系统工作正常,但我正在尝试添加跟踪系统以查看是否查看了电子邮件。

我们这样做的方法是在每封电子邮件中添加一张图片,当您通过php查看更新时,我们就会知道该邮件已被查看过。

目前我们的PHPMail看起来像这样,

foreach ($email_addresses as $line_num => $line) {
            $ismatch = preg_match('/^[\s,]+$/',$line);
            $isvalid = preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', trim($line));

            // found a blank line, ignore
            if($ismatch)
                echo "";

            // found an invaid email address, add to string
            else if($isvalid==0)
                $strInvalidEmailAddresses .= $line. '<br />';

            // no issues, add to BCC
            else{
                $mail->addBCC($line,$line); 
            }
}

当前系统将每封电子邮件添加到BCC。我希望将每封电子邮件发送到每个单独的地址,而不是BCC。

当我在HTML电子邮件的末尾尝试使用此图片时,我遇到了问题。

$track_image = '<img src="http://domain.com/email_test/email_beacon.php?campaign='.$intCampaignID.'&email='.$line.'" alt="" />';

$mail->MsgHTML($html_page.$track_image);

每当我尝试包含跟踪图片时,$ line(或电子邮件)总是相同的,但我需要根据.txt文件中的电子邮件进行更改。

3 个答案:

答案 0 :(得分:4)

不是使用BCC,而是执行以下操作:

... initialize PHP mailer ...
... set options common to ALL emails ...
foreach( ... loop over all recipients ...) {
    $mail->ClearAddresses(); // remove previous email addresses
    $mail->AddAddress($new_recipient_here);
    $mail->Body = <<<EOL
... customized html here
<img src="http://domain.com/email_test/email_beacon.php?campaign={$intCampaignID}&email={$address}" alt="" />
... more html here
EOL;

    $mail->send();
}

答案 1 :(得分:1)

使用ClearAllRecipients()清除在TO,CC和BCC阵列中分配的所有收件人。它返回void。

答案 2 :(得分:0)

第二个问题只是一个被遗忘的$ - 看起来你当前的例子会抛出一个解析错误。它应该是:

$mail->MsgHTML($html_page.$track_image);

为了发送个人电子邮件,而不是发送一封包含大量BCC的电子邮件,您需要每次在循环内创建一个新的$ mail对象,而不是将它们全部附加到单个$ mail对象中。已经在循环之外定义了。