expmail/sender.php
Kumi 41a337d875 Version bump to 0.3
Added option to assign cid to attachments
Made HTML and plain text retrieval use File class
Removed now unused helpers.php
Updated OpenAPI documentation
2020-09-04 16:13:21 +02:00

97 lines
3.4 KiB
PHP

<?php
require_once 'vendor/autoload.php';
require_once 'config.php';
require_once 'File.class.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mailer = new PHPMailer(true);
try {
if (!$json = json_decode(file_get_contents('php://input'), true)) throw new Exception("There is nothing here.");
if (!$json["key"]) throw new Exception("What's the code word?");
if (!in_array($json["key"], $API_KEYS)) throw new Exception("Who are you?");
if ($json["html"]) {
$html = $json["html"];
} else if ($json["htmlurl"]) {
try {
$htmlfile = new File($json["htmlurl"]);
$html = $htmlfile->fetch_file();
} catch (\Exception $e) {
throw new Exception("Could not fetch URL for HTML message: " . $e->getMessage());
}
}
if ($json["text"]) {
$text = $json["text"];
} else if ($json["texturl"]) {
try {
$textfile = new File($json["texturl"]);
$text = $textfile->fetch_file();
} catch (\Exception $e) {
throw new Exception("Could not fetch URL for plain text message: " . $e->getMessage());
}
}
foreach ($json["placeholders"] as $placeholder) {
$html = str_replace("{".strtoupper($placeholder["name"])."}", $placeholder["value"], $html);
$text = str_replace("{".strtoupper($placeholder["name"])."}", $placeholder["value"], $text);
}
$mailer->isSMTP();
$mailer->Host = $MAIL_HOST;
$mailer->SMTPAuth = (bool) $MAIL_USER;
$mailer->Username = $MAIL_USER;
$mailer->Password = $MAIL_PASS;
$mailer->SMTPSecure = ($MAIL_STARTTLS ? PHPMailer::ENCRYPTION_STARTTLS : ($MAIL_SMTPS ? PHPMailer::ENCRYPTION_SMTPS : false));
$mailer->Port = ($MAIL_PORT ? $MAIL_PORT : ($MAIL_SMTPS ? 465 : 587));
$mailer->XMailer = "Kumi Systems Mailer 0.1 (https://kumi.systems/)";
if ($json["sender"]["email"]) {
$mailer->setFrom($json["sender"]["email"], $json["sender"]["name"]);
} else {
$mailer->setFrom(($MAIL_FROM_MAIL ? $MAIL_FROM_MAIL : $MAIL_USER), $MAIL_FROM_NAME);
};
foreach ($json["recipients"] as $recipient) $mailer->addAddress($recipient["email"], $recipient["name"]);
foreach ($json["ccs"] as $cc) $mailer->addCC($cc["email"], $cc["name"]);
foreach ($json["bccs"] as $bcc) $mailer->addBCC($bcc["email"], $bcc["name"]);
foreach ($ALWAYS_TO as $recipient) $mailer->addAddress($recipient);
foreach ($ALWAYS_CC as $cc) $mailer->addCC($cc);
foreach ($ALWAYS_BCC as $bcc) $mailer->addBCC($bcc);
$mailer->isHTML((bool) $html);
$mailer->Subject = $json["subject"];
$mailer->Body = ($html ? $html : $text);
$mailer->AltBody = ($html ? $text : null);
foreach ($json["attachments"] as $attachment) {
$file = new File($attachment["url"]);
if ($file->get_status() >= 400) throw new Exception("Error downloading " . $attachment["url"] . " - Status: " . $file->get_status());
$content = $file->fetch_file();
$filename = ($attachment["filename"] ? $attachment["filename"] : $file->get_filename());
$cid = ($attachment["cid"] ? $attachment["cid"] : 0);
$mailer->addStringEmbeddedImage($content, $cid, $filename);
}
$mailer->send();
$response = array(
"status" => "success"
);
} catch (\Exception $e) {
$response = array(
"status" => "error",
"error" => "{$e->getMessage()}"
);
};
echo json_encode($response);