2016-05-13 4 views
1

У меня есть динамическая таблица, в которой введены имена пользователей. При отправке имена запрашиваются у LDAP, чтобы получить идентификаторы электронной почты, и им будет отправлено письмо. Мой код, как показано ниже:Ошибка при отправке писем при предоставлении адреса в виде массива

<?PHP 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $email_body = $email_body ."Test"; 
    require_once("class.phpmailer.php"); 
    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->SMTPAuth = true;     
    $mail->Host  = "***"; 
    $mail->SetFrom('***'); 
    $mail->Subject = "Test"; 
    $mail->MsgHTML($email_body); 
    foreach($_POST['Trainee_Name'] as $traineename) //Field Name in the dynamic table 
    { 
     $username="***"; 
     $password="***"; 
     $lc = ldap_connect("***") or 
     die("Couldn't connect to AD!"); 
     ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, 3); 
     ldap_bind($lc,$username,$password); 
     $base = "OU=**,DC=**,DC=**"; 
     $filt = "(&(&(&(objectCategory=person)(objectClass=user)(name=$traineename*))))"; 
     $sr = @ldap_search($lc, $base, $filt); 
     $info = ldap_get_entries($lc, $sr); 
     for ($j = 0; $j < $info["count"]; $j++) 
     { 
      echo $address=$info[$j]["mail"][0]."<br/>" ; //echo's the email ID 
      $mail->AddAddress($address); 
     } 
     if ($j == 0) 
     { 
      echo "No matches found!"; 
     } 
     ldap_close($lc); 
    }  

    if (!$mail->send()) { 
      echo "Mailer Error (" . str_replace("@", "&#64;", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />'; 
      break; //Abandon sending 
     } else { 
      echo "Message sent"; 
     } 
} 
?> 

В выходных данных, код запроса LDAP вторит E-Mail ID, но не отправляет почту. Где я мог поступить неправильно? Я использовал ссылки ниже в качестве ссылки:

  1. PHP mailer multiple address
  2. PHPMailer AddAddress()
  3. how to send emails to multiple addresses using phpmailer

оценивает любое предложение/помощь.

+0

Не полагайтесь на источники, не являющиеся авторитетными. Взгляните на [пример списка рассылки, предоставленный с PHPMailer] (https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps). Это показывает получение списка из MySQL, но отправляющая часть будет такой же, как вы используете, но она очень эффективна для mroe. Как правило, читайте документы, проверяйте свои входные и возвращаемые значения, код чистым - этот комбинированный массив-добавление и эхо являются ужасными! – Synchro

+0

по соображениям эффективности вы также должны рассмотреть возможность открытия, привязки и закрытия соединения ldap вне цикла foreach. – heiglandreas

ответ

1

Я подозреваю, что ваша злая комбинированная операция echo-array-add-concat добавляет <br/> в конец каждого адреса, который не будет отображаться в вашем браузере, но сделает каждый адрес электронной почты недействительным. Попробуйте следующее:

for ($j = 0; $j < $info['count']; $j++) 
{ 
    $add = $info[$j]['mail'][0]; 
    $address[] = $add; 
    echo "$add<br/>"; 
} 
+0

Thankyou! Это сделал трюк. :) – SR1092

+0

Хорошо! Я бы порекомендовал основывать ваш код на примере списка рассылки, он намного эффективнее, чем вы делаете. – Synchro