PHPMailer Foreach Loop - PullRequest
       18

PHPMailer Foreach Loop

2 голосов
/ 10 декабря 2011

В настоящее время я использую 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. Я хотел бы, чтобы каждое электронное письмо отправлялось на каждый отдельный адрес без их указания.

Я столкнулся с проблемами, когда попробовал это изображение до конца письма в формате HTML.

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

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

Всякий раз, когда я пытаюсь включить изображение отслеживания, строка $ (или электронная почта) всегда одинакова, но мне нужно, чтобы она менялась в зависимости от того, какие электронные письма находятся в файле .txt.

Ответы [ 3 ]

4 голосов
/ 10 декабря 2011

Вместо использования 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 голос
/ 05 ноября 2012

Используйте ClearAllRecipients() для очистки всех получателей, назначенных в массиве TO, CC и BCC.Возвращает пустоту.

0 голосов
/ 10 декабря 2011

Вторая проблема - просто забытый $ - похоже, ваш текущий пример выдаст ошибку разбора. Должно быть:

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

Чтобы отправлять отдельные электронные письма, вместо того, чтобы отправлять одно электронное письмо с кучей BCC, вам нужно будет каждый раз создавать внутри себя новый объект $ mail вместо того, чтобы добавлять их все к одному объекту $ mail, который был уже определен вне цикла.

...