Как отправить письмо в массиве PHPMailer - PullRequest
0 голосов
/ 25 апреля 2019

Я настраиваю уведомление по электронной почте на своем веб-сайте, чтобы уведомить пользователя об утверждении претензии.Письмо будет отправлено нескольким пользователям, которым разрешено утверждать претензию.Проблема в том, что я хочу указать адрес электронной почты в кнопке «Подтвердить», чтобы узнать, кто утверждает претензию.

Я уже пытаюсь поместить в массив, но письмо можно отправить только на первое письмо.

Ниже приведен мой пример кода для отправки нескольких адресов электронной почты

do{ 
$to = $Rows_RecQuery1['email'];
$mail->AddAddress($email);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));

Ниже находится кнопка, которую я хочу поставить письмо

<a style="border-style:solid; border-color:#F00; background-color:#F00; color:#FFF; text-decoration:none"
                             href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&process=0&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified']));?>">Cancel</a>

<a style="border-style:solid; border-color:#0CC; background-color:#0CC; color:#FFF;text-decoration:none"     
                          href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=3&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Reject</a>

<a style="border-style:solid; border-color:#00F; background-color:#00F; color:#FFF;text-decoration:none"  
                                 href="http://www.crm.icherrycloud.com/report/approval_claim_process_email.php?<?php echo $uid ?>&$emailprocess=2&claim_id=<?php echo $_GET['claim_id']?>&modified=<?php echo date('Y-m-dH:i:s', strtotime($row_RecEdit['modified'])); ?>">Approve</a>

Ответы [ 4 ]

1 голос
/ 25 апреля 2019

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

<?php
$hostname = '';
$port     = 465; // or anyhting else that works with your server
$username = '';
$password = '';
$sender = ['test@mail.com' => 'John Doe'];
$receivers = ['test2@mail.com'];

echo date(DATE_RFC2822)."<br/>";
include ('vendor/autoload.php');

// Create the Transport
$transport = (new \Swift_SmtpTransport($hostname, $port))
    ->setUsername($username)
    ->setPassword($password);

//$transport->setAuthMode('login'); 
//$transport->start();

// Create the Mailer using your created Transport
$mailer = new \Swift_Mailer($transport);

// To use the ArrayLogger
//$logger = new Swift_Plugins_Loggers_ArrayLogger();
//$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));

// Or to use the Echo Logger
$logger = new \Swift_Plugins_Loggers_EchoLogger();
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));

// Create a message
$message = (new \Swift_Message('Wonderful Subject'))
    ->setFrom($sender)
    ->setTo($receivers)
    ->setBody('Here is the message itself');

// Send the message
$result = $mailer->send($message);

Так что для твоего случая я бы сделал что-то подобное

$Rows_RecQuery1 = mysqli_fetch_array($RecQuery1);
foreach ($Rows_RecQuery1 as $k=>$v) {
    $receivers[] = $v['email'];
}
....rest of the script.....

PS: Если сценарий не работает как есть, то утро, кофе нет, лень возвращаться через час или два :).

0 голосов
/ 25 апреля 2019

У вас проблема со смешанными переменными. В AddAdress вы поместили переменную $email, а в свой цикл вы получаете $Rows_RecQuery1['email']. Просто поставьте $to вместо $email, и оно должно работать. Я предполагаю, что вы объявляете переменную $email где-то, и она содержит один адрес электронной почты, поэтому отправляет только одно письмо.

do{ 
  $to = $Rows_RecQuery1['email'];
  $mail->AddAddress($to);
}while($Rows_RecQuery1 = mysqli_fetch_array($RecQuery1));
0 голосов
/ 25 апреля 2019

Есть несколько проблем с вашим кодом

  1. Сначала вы делаете do..while() цикл, когда вы должны делать while(), потому что у вас нет данных, доступных, по крайней мере, до второго цикла
  2. Затем вы выбираете массив вместо ассоциативного массива, и это нормально, если вы обращаетесь к данным по нужному индексу, а не по имени.

Попробуйте это:

while ($contact = mysqli_fetch_assoc($RecQuery1));
{
   $mail->AddAddress($contact['email']);
}

Кроме того, если вы покажете нам свой запрос, мы сможем помочь вам

0 голосов
/ 25 апреля 2019

Я думаю, что проблема в mysqli_fetch_array() ... он будет получать результат всего запроса в виде массива, а не получать по одной строке за раз, когда он повторяется. поэтому я предполагаю, что он повторяется только один раз, так как условие не выполнится во второй раз.

попробуйте использовать mysqli_fetch_row() вместо ...

https://www.w3schools.com/php/func_mysqli_fetch_array.asp

https://www.w3schools.com/php/func_mysqli_fetch_row.asp

...