I am trying to send multiple emails within while loop, With the following code its not sending email notification and giving error 'Fatal error: Uncaught Error: Class "PHPMailer" not found in C:\xampp\htdocs\clinic\paients\run_medications.php:98 Stack trace: #0 {main} thrown in'. While the location is correct and its sending single email from another child directory.
require_once('../includes/PHPMailer.php');
require_once('../includes/SMTP.php');
require_once('../includes/Exception.php');
$full_dt = date('Y-m-d H:i:s');
$dt = date('Y-m-d');
$dt_hr = date('H');
$check_timing = $con->prepare("SELECT medication, start_time, end_time FROM timings WHERE HOUR(end_time) = :end ");
$check_timing->bindparam(':end', $dt_hr);
$check_timing->execute();
$count1 = $check_timing->rowCount();
if($count1 > 0) {
while($rows = $check_timing->fetch(PDO:: FETCH_OBJ)) {
$medication = $rows->medication;
$start_time = $dt.' '. $rows->start_time;
$end_time = $dt.' '.$rows->end_time;
$timestamp = strtotime($end_time) + 60*60;
$end_hour = date('Y-m-d H:i:s', $timestamp);
$query = "SELECT a.location_code, b.* FROM patients a INNER JOIN medication b ON a.id = b.pat_id WHERE b.status != 2 AND b.directions = :med AND b.last_time NOT BETWEEN :start AND :end AND :crntime BETWEEN b.start_date AND b.end_date AND :crntime BETWEEN :end AND :end_hour";
$statement = $con->prepare($query);
$statement->bindparam(':med', $medication);
$statement->bindparam(':start', $start_time);
$statement->bindparam(':end', $end_time);
$statement->bindparam(':crntime', $full_dt);
$statement->bindparam(':end_hour', $end_hour);
$statement->execute();
$count = $statement->rowCount();
if($count > 0) {
while($row = $statement->fetch(PDO:: FETCH_OBJ)) {
$drug_id = $row->drgid;
$code = $row->location_code;
$pat_id = $row->pat_id;
$drug = $row->med_type.' - '.$row->drug.' ('.$row->strength.')';
$dose = $row->dosage;
$route = $row->route;
$directions = $row->directions;
$getUserName = "SELECT name FROM users WHERE FIND_IN_SET(location_code, :codes)>0 ";
$runUser = $con->prepare($getUserName);
$runUser->bindParam(':codes',$code);
$runUser->execute();
$check = $runUser->rowCount();
if($check > 0) {
$userRow = $runUser->fetch(PDO::FETCH_OBJ);
$by = $userRow->name;
}
$insert_report = $con->prepare("
INSERT INTO `report` (`med_id`,`pat_id`,`dtime`,`responsible`,`status`) values(:m_id,:p_id,:time,:by,'3')");
$insert_report->bindparam(':m_id',$drug_id);
$insert_report->bindparam(':p_id',$pat_id);
$insert_report->bindparam(':time',$end_time);
$insert_report->bindparam(':by',$by);
$insert_report->execute();
$mail = new PHPMailer();
$mail->isSMTP();
$mail-> SMTPOptions = array (
'ssl' => array (
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Port = "587";
$mail->Username = "[email protected]";
$mail->Password = "12345678";
$mail->Subject = "Medication Report";
$mail->setFrom("[email protected]",$by);
$mail->isHTML(true);
//Attachment
//$mail->addAttachment('img/attachment.png');
//Email body
$mail->Body = "<h3>Medication Report by ($by) </h3></br>
You are being alerted that <b>$name</b> has missed their $directions Medication $row->med_type. And you may need to take appropriate action..";
$mail->addAddress($to_email['Email_add']);
$mail->send();
} // /while
}// if num_rows
}//while close
}// if num_rows
$countand$count1, test your database queries directly in the database. If code inside an if statement is not running, it means the condition is false, so you need to figure out why. Separately, you should absolutely not need to disable certificate verification when connecting to gmail; figure out what is wrong with your PHP installation instead, as the PHPMailer troubleshooting guide says.