【发布时间】:2018-08-29 13:39:10
【问题描述】:
此代码从邮件表中向所有员工发送电子邮件,其中列是 Id、Name、Email。现在例如, 如果有 3 名员工,则第一个员工获得所有 3 个工资单作为附件,第 2 个员工获得第 2 和第 3 个工资单,第 3 个员工仅获得第 3 个工资单。我认为存储的电子邮件值造成了问题,因此我想清除存储在 $sendto、$pdf 和 $filename 变量中的数据。我已经尝试过 apc_delete()、unset() 和 $var = "" 但都没有工作。
这是代码:
<?php
//require 'mailerClass/PHPMailerAutoload.php';
require_once '../connect.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer;
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
$cin =1;
$sql = "SELECT * FROM mail";
$query = mysqli_query($con, $sql);
$count = mysqli_num_rows($query);
try {
while($row = mysqli_fetch_array($query, MYSQL_ASSOC)){
//
$sendto = $row['Email'];
//attachment pdf files path array
$path = "C:/Reports/";
$file = $row['Name'];
$extension = ".pdf";
$filename = $file.$extension;
$pdf = $path. $file. $extension ;
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
//$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.mail.yahoo.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'username@yahoo.com'; // SMTP username
$mail->Password = '@password'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; //587; // TCP port to connect to
//Recipients
$mail->setFrom('mediakraft64@yahoo.com');
$mail->addAddress($sendto); // Add a recipient
$mail->addReplyTo('mediakraft64@yahoo.com');
$mail->addCC('mediakraft64@yahoo.com');
//$mail->addBCC('bcc@example.com');
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Payslip';
$mail->Body = 'Payslip from Mediakraft Check file attachment';
$mail->AltBody = 'Payslip from Mediakraft Check file attachment';
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->addAttachment($pdf, $filename); //= $_POST['mypdf'];
$mail->send();
echo 'Message has been sent';
//unset($sendto);
$sendto = " ";
$pdf = " ";
$mail->clearAttachments();
sleep(5);
} //end while
echo"<script>alert('Email Sent... Successfully'); document.close();</script>";
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>
有什么帮助吗??
谢谢
【问题讨论】:
-
这与取消设置变量无关,这是因为循环的每次迭代只是将另一个收件人添加到同一个
$mail实例中。您需要在发送每封电子邮件后清除收件人,就像清除附件一样。 -
是 $mail->clearaddAddress();
-
感谢@iainn,已解决。