Как получить текущий идентификатор электронной почты в теле с помощью PHP Mailer

В настоящее время я работаю над скриптом электронной почты PHP, используя библиотеку PHPMailer`. Я отправляю массовую рассылку, используя BCC для всех адресов электронной почты.

Я хочу, чтобы каждое электронное письмо содержало адрес электронной почты текущего получателя в теле сообщения.

Ниже приведен мой пример кода:

<?php
 require 'PHPMailerAutoload.php';
 $mail = new PHPMailer;
 $mail->isSMTP();                                      
 $mail->Host = 'smtp1.example.com;smtp2.example.com';  
 $mail->SMTPAuth = true;                                
 $mail->Username = '[email protected]';                 
 $mail->Password = 'secret';                           
 $mail->SMTPSecure = 'tls';                         
 $mail->Port = 587;                               
 $mail->setFrom('[email protected]', 'Mailer');
 $mail->addAddress('[email protected]');

 $arrMail [] = array('[email protected]','[email protected]'); 

 for($i=0;$i<count( $arrMail);$i++)
 {
     $mail->addBCC($arrMail[$i]);
     $htmlversion = 'Hello '.$arrMail[$i].' !'.
 }


//  $htmlversion = 'Hello <email_id needed here> !'.

  $mail->Body    = $htmlversion;
  $mail->AltBody = $textVersion;   

      if(!$mail->send()) 
      {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
      }
      else
      {
        echo 'Mail sent';
      } 

Проблема. Если [email protected] получает электронное письмо, его текст сообщения должен содержать его адрес электронной почты. В настоящее время я получаю первый адрес электронной почты в теле сообщения для каждого получателя.

Примечание. Я не хочу отправлять письма по одному, используя To, как упоминалось на других страницах.

Также возможно ли это с помощью некоторой логики сеанса или базы данных?

Я использую php 5.5.9.


person Hiranya Sarma    schedule 03.10.2016    source источник
comment
вам придется отправить его с помощью цикла без скрытой копии   -  person Shahrukh    schedule 03.10.2016
comment
Причина, по которой я сделал bcc, заключается в том, чтобы скрыть другие письма.   -  person Hiranya Sarma    schedule 03.10.2016
comment
возьмите все электронные письма в массиве и запустите цикл foreach для этого массива.   -  person Rahul    schedule 03.10.2016
comment
@RahulDambare Можете ли вы уточнить, как я должен получить идентификатор электронной почты в теле для конкретного получателя после их сбора в массив?   -  person Hiranya Sarma    schedule 03.10.2016


Ответы (1)


Ваш код повторно использует один и тот же адрес электронной почты, потому что вы не зациклили создание тела письма. Если вы используете цикл, вам также не нужен BCC.

$arrMail [] = array('[email protected]', '[email protected]'); 
$total = count($arrMail);

for($i = 0; $i < $total; $i++) {

    $email = $arrMail[$i];
    $htmlversion = "Hello $email !";

    $mail->Body = $htmlversion;
    $mail->AltBody = $textVersion;
    $mail->AddAddress($email);

    if (!$mail->send()) {
       echo 'Message could not be sent.';
       echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
       echo 'Mail sent';
    }
}

Я не хочу отправлять письма по одному, используя Кому, как упоминалось на других страницах.

К сожалению, BCC по своей природе отправляет одно и то же электронное письмо нескольким получателям. Если вы хотите настроить каждое электронное письмо для каждого человека, вы должны отправлять им отдельные электронные письма.

person BadHorsie    schedule 03.10.2016
comment
Причина, по которой я использую bcc, заключается в том, что один получатель не может видеть почтовый идентификатор другого получателя. А как насчет Cc? - person Hiranya Sarma; 03.10.2016
comment
@Hiranya Хотите вы этого или нет, невозможно использовать BCC или CC, если вы хотите изменить тело электронной почты для каждого получателя. Весь смысл BCC или CC означает копировать одно и то же электронное письмо каждому человеку. - person BadHorsie; 03.10.2016