как отправить два разных письма на два разных адреса электронной почты с помощью PHPMailer в php - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь отправить два разных письма двум разным получателям, используя PHPmailer, но приходит только второе письмо.

Мой код:

 /**
 * This code shows settings to use when sending via Google's Gmail servers.
 */

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require 'PHPMailer/PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer;

//Tell PHPMailer to use SMTP
$mail->isSMTP();

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;

//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';

//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "olaozias@gmail.com";

//Password to use for SMTP authentication
$mail->Password = "password";

//Set who the message is to be sent from
$mail->setFrom('olaozias@gmail.com', 'Department of Information Science');

//Set an alternative reply-to address
$mail->addReplyTo('olaozias@gmail.com', 'Department of Information Science');

//Set who the message is to be sent to
$mail->addAddress($email , 'Parent');

//Set the subject line
$mail->Subject = 'Student Attendance System';

//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
//$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));

//Replace the plain text body with one created manually
$mail->Body = 'Dear Parent \r\n This email is sent from the university of gondar , Department of information science to inform you that your child '. $firstname.' has been registered for semester '.$semister. ' in order to see your child attendance status and to communicate easily with our department use our attendance system. First download and install the mobile application  which is attached in this email to your phone and use these login credentials to login to the system \r\n Your child Id: '.$student_no. '\r\n Password: '.$parent_pass.'\r\n Thank you for using our attendance system \r\n University of Gondar \r\n Department of Information Science ';

//Attach an image file
//$mail->addAttachment('AllCallRecorder.apk');
$mail->send();



$mail->ClearAddresses();

$mail->AddAddress($stud_email,'Student');
$mail->Subject = 'Student Attendance System';
$mail->Body = "email 2";


//send the message, check for errors
if (!$mail->Send()) {
    //echo "Mailer Error: " . $mail->ErrorInfo;
    echo '
                <script type = "text/javascript">
                    alert("Mailer Error: " . $mail->ErrorInfo);
                    window.location = "student.php";
                </script>
            ';
} else {
echo '
                <script type = "text/javascript">
                    alert("student Added successfully and an Email the  sent to email address provided");
                    window.location = "student.php";
                </script>
            ';
    //echo "Message sent!";
}

второе письмо успешно доставлено, нопервый нет.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Есть несколько разных возможностей.Тот факт, что второй отправляет должным образом, является хорошим показателем того, что ваш код работает в целом.Сосредоточив внимание на первом, я бы предложил три вещи:

  1. Добавить проверку ошибок к первому send() вызову.У вас есть if (!$mail->Send()) {... на втором, но вы не проверяете первый.Вы можете использовать $mail->ErrorInfo, как в комментарии во второй части.(Между прочим, $mail->ErrorInfo, который у вас есть в теге script, не будет работать. Переменные в одинарных строках в кавычках не будут анализироваться, поэтому вы просто получите там буквальную строку "$ mail-> ErrorInfo", если там естьявляется ошибкой.)

  2. Добавить проверку ошибок к первому вызову addAddress().PHPMailer выдаст вам ошибку, по которой вы сможете проверить, является ли адрес электронной почты недействительным по какой-либо причине.Что касается кода, который вы здесь показали, $email кажется неопределенным, как и $stud_email, и вы сказали, что он работает правильно, поэтому я предполагаю, что оба они определены где-то перед кодом, который вы 'показано здесь, но возможной причиной этого является то, что $email не определено или не имеет значения, которого вы ожидаете.

  3. Письмо отправляется, но не принимается,Довольно легко ошибочно идентифицировать сообщение как спам в нескольких точках между отправителем и получателем.Это сложнее диагностировать, но если вы добавите проверку ошибок в первый вызов send() и не получите никаких ошибок, вы, по крайней мере, сможете исключить это как точку отказа.

0 голосов
/ 14 мая 2018

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

$recipients = array(
   'person1@domain.com' => 'Person One',
   'person2@domain.com' => 'Person Two',
   // ..
);
...