97 lines
2.2 KiB
PHP
Executable File
97 lines
2.2 KiB
PHP
Executable File
<?php
|
|
|
|
require_once ('libphp-phpmailer/PHPMailerAutoload.php');
|
|
|
|
class Mail extends Vn\Lib\Method
|
|
{
|
|
function run ($db)
|
|
{
|
|
$db->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'], $conf['sender_name']);
|
|
|
|
if (strpos ($row['to'], ','))
|
|
$mailList = explode (',', $row['to']);
|
|
else
|
|
$mailList = explode (';', $row['to']);
|
|
|
|
foreach ($mailList as $mailTo)
|
|
$mail->AddAddress ($mailTo);
|
|
|
|
$mail->IsHTML (TRUE);
|
|
$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";
|
|
}
|
|
}
|
|
|
|
|