selectDb ('vn2008'); $db->query ('START TRANSACTION'); $conf = $db->getRow ( 'SELECT host, port, secure, sender, sender_name, user, password FROM hedera.mail_config' ); $res = $db->query ( 'SELECT * FROM mail WHERE sent = 0 ORDER BY DATE_ODBC DESC LIMIT 20 FOR UPDATE'); $count = 0; while ($row = $res->fetch_assoc ()) { $sent = 1; $status = 'OK'; try { //if (!preg_match ('/^[\w\._%-]+@[\w\.-]+\.[A-Za-z]{2,4}$/', $row['to'])) // throw new Exception ('Destination mail has invalid sintax'); $mail = new PHPMailer (); $mail->isSMTP (); $mail->Host = $conf['host']; if (!empty ($conf['user'])) { $mail->SMTPAuth = TRUE; $mail->Username = $conf['user']; $mail->Password = base64_decode ($conf['password']); } else $mail->SMTPAuth = FALSE; if ($conf['secure']) { $mail->SMTPSecure = 'ssl'; $mail->Port = 465; } $mail->setFrom ($conf['sender'], $conf['sender_name']); $mail->AddReplyTo ($row['reply_to'], 'Att. Cliente'); if (strpos ($row['to'], ',')) $mailList = explode (',', $row['to']); else $mailList = explode (';', $row['to']); foreach ($mailList as $mailTo) $mail->AddAddress ($mailTo); $mail->Subject = $row['subject']; $mail->Body = ' '. $row['text']; $mail->CharSet = 'UTF-8'; if (!empty ($row['path'])) { $attachment = '/mnt/cluster/pdfs/'. $row['path']; if (file_exists ($attachment)) $mail->AddAttachment ($attachment, ''); else throw new Exception ("Attachment file could not be found: $attachment"); } if (!$mail->Send ()) throw new Exception ('Send error: '.$mail->ErrorInfo); $count++; } catch (Exception $e) { $sent = 2; $status = $e->getMessage (); } $db->query ('UPDATE mail SET sent = #, error = # WHERE id = #', [$sent, $status, $row['id']]); } $db->query ('COMMIT'); echo "Total $count mails sent\n"; } }