Files
dev-chiefworks 47f4fad75c Added Other AP
2022-04-26 11:30:34 -04:00

93 lines
2.8 KiB
PHP

<?php
$profile = getenv("SAVVY_PROFILE");
if ($profile) {
require("../../core/backend.${profile}.php");
} else {
require('../../core/backend.php');
}
require './vendor/autoload.php';
require('./Email.php');
require('./Sendgrid.php');
require_once('../common/Db.php');
global $savvyext;
$db = new Db();
$apiKey = $savvyext->cfgReadChar('mailsend.api_key');
$sg = new \SendGrid($apiKey);
$worker= new GearmanWorker();
$worker->addServers($savvyext->cfgReadChar('gearman.servers'));
$worker->addFunction('sendemail', 'sendEmailJob');
while (1)
{
$worker->work();
if ($worker->returnCode() != GEARMAN_SUCCESS) break;
}
function sendEmailJob($job) {
global $db, $sg;
echo "[".date("Y-m-d H:i:s")."] Send Email job starting\n";
$workload = $job->workload();
$email = json_decode($workload, true);
$id = $email['id'];
echo "[".date("Y-m-d H:i:s")."] Processing email ID #${id}\n";
// $q = "UPDATE emails SET status=2, updated_at=NOW() WHERE id=${id}";
// pg_query($db->getConnect(), $q);
if (is_array($email) && array_key_exists('to_emails',$email)
&& is_array($email['to_emails']) && count($email['to_emails'])>0) {
$receivers = array_map(function($to) {
return ['email' => $to];
}, $email['to_emails']);
// Prepare sendgrid receivers
$sendgridReceivers = prepareReceivers($receivers, []);
$subject = $email['subject'] ?? '';
$template = $email['html_body'] ?? '';
// Prepare email will be sent through sendgrid
$parsedEmail = SendGridService::prepareEmail($sendgridReceivers, $subject, $template, []);
// Send email
try {
$response = $sg->send($parsedEmail);
//Email::updateEmail($db->getConnect(), $id, NULL, NULL, NULL, '1');
if ($response->statusCode()==202) {
$q = "UPDATE emails SET status=1,updated_at=NOW(),message=NULL WHERE id=".$id;
$r = pg_query($db->getConnect(), $q);
} else {
throw new Exception("Invalid return status code: ".$response->statusCode());
}
echo "[".date("Y-m-d H:i:s")."] Email sent successfully.\n";
} catch(Exception $e) {
// TODO: Handle send email error.
// Maybe we can log the error here
$msg = pg_escape_string(substr($e->getMessage(),0,200));
$q = "UPDATE emails SET status=0, retries=retries+1, updated_at=NOW(),message='${msg}' WHERE id= ${id}";
$r = pg_query($db->getConnect(), $q);
echo "[".date("Y-m-d H:i:s")."] Email not sent: ${msg}\n";
}
}
echo "[".date("Y-m-d H:i:s")."] Send Email job complete\n";
}
function prepareReceivers($receivers = [], $subs = []) {
$results = [];
foreach ( $receivers as $key => $receiver ) {
$substitutions = array_merge($subs, $receiver['substitutions'] ?? []);
$results[] = SendGridService::prepareSengridToObject($receiver, $substitutions ?? []) ?? NULL;
}
return $results;
}