2016-07-18 16:39:37 +00:00
|
|
|
<?php
|
|
|
|
|
2022-10-09 23:35:48 +00:00
|
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
2016-07-18 16:39:37 +00:00
|
|
|
|
|
|
|
class UOJMail {
|
|
|
|
public static function noreply() {
|
2023-02-13 12:29:32 +00:00
|
|
|
$mailer = new PHPMailer();
|
2016-07-18 16:39:37 +00:00
|
|
|
$mailer->isSMTP();
|
|
|
|
$mailer->Host = UOJConfig::$data['mail']['noreply']['host'];
|
|
|
|
$mailer->Port = UOJConfig::$data['mail']['noreply']['port'];
|
|
|
|
$mailer->SMTPAuth = true;
|
|
|
|
$mailer->SMTPSecure = UOJConfig::$data['mail']['noreply']['secure'];
|
|
|
|
$mailer->Username = UOJConfig::$data['mail']['noreply']['username'];
|
|
|
|
$mailer->Password = UOJConfig::$data['mail']['noreply']['password'];
|
2023-02-13 12:29:32 +00:00
|
|
|
$mailer->setFrom(UOJConfig::$data['mail']['noreply']['username'], UOJConfig::$data['profile']['oj-name-short']);
|
2023-03-11 01:43:08 +00:00
|
|
|
$mailer->addCC(UOJConfig::$data['mail']['noreply']['username'], UOJConfig::$data['profile']['oj-name-short']);
|
2016-07-18 16:39:37 +00:00
|
|
|
$mailer->CharSet = "utf-8";
|
|
|
|
$mailer->Encoding = "base64";
|
|
|
|
return $mailer;
|
|
|
|
}
|
2023-02-13 12:29:32 +00:00
|
|
|
|
|
|
|
public static function cronSendEmail() {
|
|
|
|
$emails = DB::selectAll([
|
|
|
|
"select * from emails",
|
|
|
|
"where", DB::land([
|
|
|
|
["created_at", ">=", DB::raw("addtime(now(), '-24:00:00')")],
|
|
|
|
"send_time" => null,
|
|
|
|
]),
|
|
|
|
"order by priority desc",
|
|
|
|
]);
|
|
|
|
|
|
|
|
$oj_name = UOJConfig::$data['profile']['oj-name'];
|
|
|
|
$oj_name_short = UOJConfig::$data['profile']['oj-name-short'];
|
|
|
|
$oj_url = HTML::url('/');
|
2023-02-13 23:05:47 +00:00
|
|
|
$oj_email_address = UOJConfig::$data['mail']['noreply']['username'];
|
2023-02-13 12:29:32 +00:00
|
|
|
|
|
|
|
foreach ($emails as $email) {
|
|
|
|
$user = UOJUser::query($email['receiver']);
|
|
|
|
$name = $user['username'];
|
|
|
|
|
|
|
|
if ($user['realname']) {
|
|
|
|
$name .= ' (' . $user['realname'] . ')';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($user['email']) {
|
|
|
|
$mailer = UOJMail::noreply();
|
|
|
|
$mailer->addAddress($user['email'], $user['username']);
|
|
|
|
$mailer->Subject = $email['subject'];
|
|
|
|
$mailer->msgHTML(<<<EOD
|
|
|
|
<base target="_blank" />
|
|
|
|
|
|
|
|
<div style="padding: 48px; margin: 60px auto 60px auto; box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15), inset 0px 0px 1px rgba(0, 0, 0, 0.5); max-width: 700px">
|
|
|
|
<div style="display: block">
|
2023-03-11 01:43:08 +00:00
|
|
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGUmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDgtMTlUMjE6NTk6MjkrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMDgtMTlUMjE6NTk6MjkrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA4LTE5VDIxOjU5OjI5KzA4OjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA1OTRiZThkLWY1NTktNGRjMi05MThhLWViZDVlMWQ3YWE5MyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjExNjYwOThkLTg5ZDEtMjQ0Yy05OTczLTNhNTIwOGIwYzQ5MCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjZiZWI1YjRjLTcyNDYtNGFlMi05NWEyLTFjMDYxM2QzYjc4NiIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjZiZWI1YjRjLTcyNDYtNGFlMi05NWEyLTFjMDYxM2QzYjc4NiIgc3RFdnQ6d2hlbj0iMjAyMC0wOC0xOVQyMTo1OToyOSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjA1OTRiZThkLWY1NTktNGRjMi05MThhLWViZDVlMWQ3YWE5MyIgc3RFdnQ6d2hlbj0iMjAyMC0wOC0xOVQyMTo1OToyOSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDxyZGY6QmFnPiA8cmRmOmxpPjdDQURFMDhDMEYzODA0RDUyRTM5MTM1QjJENDQ3MDVDPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+dbFv4wAAGexJREFUeJzVnXl0XMWV/z+v9037bsmSbdnG+84WGzJA2BwmQMgwYZLfOEBIGDJZJuHgCUySYX5AfkAmIYQJBwiEhMkkISFhGUIMBAcbTGzAuyRLli3J2nep1Xu/1+/3x+1GrZYsdau7ZfI95x11vaVevXurbt2tSoqu60yFT9w/5emMQNXAbIRzl0C+S37rOigKWE0w6MH65zrW5trxnr+UOpcNwhrYLeD2U9LYycNBFV9IpdFh4VyrmeY1NWx32WDYCxEdNA3eaWJ53ygFF6zg8MISPL4QdA+DxQQOCzR2y32LK6QN+Q4wGsBqBm8Ann8XPAEpp4sXt0993pB+1elDQT7cZobmHu5o6+cPRS6usJi48Vgnb/aOcnWODbxBbEdO8brVTJnDSps3gLE4l31BlY/XtfNMWAWnFUa8XFTXzm6DwhfynVzUM8xzjV18x2QQJkem7nNnBKYz9mYFTEYhvhYRwtV38KMhD9cvLOOBYQ9Gswm1vIC3m7p4xmzk0n43W6wm2m0W9uw5xr1qBHwh1POW8LWuIT7dPsgGuwVvYxe/WVTK4+2D9PtDmKsK+f2pAb7uCVC9uIKbfUH4sPDgjDBAUZgfCHH2kIeO4lz2WUzQPsj5oz7OXVTGXe82c/+Qh0IUAN5ZVskt75/kBUWha0UVD759jKcUBXLtMOrDdLSdm6uL+dPJXv7ZasZVXcQjXcOsOd7NNwHeOY73/KXc2jnILW4fl5bk8lokAkYFdIOIo4h+Zpgy1yLIqsNTYY3HSnJZFQjzzfdPcnTMT17fCBflOXmrtZ8t3SMUuuwyKho6OH/MT1FpHr9UNSxaBM0fwmY1C9EcVvAFqTIovH2sixvDGsMhlf4DLVxrM8v1ATfO+g5usFnZ19bPxUYDNHVz74iPV/whXm7s4mFVo9phESYogCEqrrKNOR0BOrwWUjleXczW1dVgt2AaHOPLTV38YtSPwWBg96iXs53W6KQMWMxwaoB/WLeALS4bOK2sspplcnTZwO2HinyUsnz+uHER1gInoYZOfmozCxF1HXLsMOxhsc3MW/4QHznWyWNAcXEOv/UG0RSFC4+2sy+ic0NNCTtVTcRiJMaNLGLORoCicFdYpctu5mbgtXea0F96n6A3gK04lzf6Rrky38nB0jz2uf2iKQVVCIahspBdDivUdbA6qNJ00Sq+ZDWDNwilubBlOdeFVKqBrRUFUFnI4ZAG/pAQcsQL5fm8V1XE0d5RrtJ1zCYjh5p7+OaJHv49ouOpLOSJhg6+3++GQBg6BqV+szG7dJkzBqgaS/KdfNtl4772QT424oFQGMPOOu7rG2XpZWsxLCnnleVVfK+2nJaIDgYF1tbwanUx3993nIO9wxzef5LuigJ+culqKs+qYPs156A4LAy8WU/jWw38/s166tdU88Oza3nSaBD1taaEjvOWcseSCl66fC2K0cC+XfXc7Q9RazZR824zX9YiDOa72NvUxde8QRlhBiXrAyCrIigfWAgcA/xhjbE8B65QmEt1XXRrBenlY34qinPQ3zvBA/lODl21kUW9w9SqOs6qQg6f7OX/NHWzNtcB3cMUvtXAyxet5NLiXB4wGbG+eoj/dfug0AVt/Sxv6edzZ9fy+XkFPBTR0SsLqWvp47NuH5XrFnB/cw+rDAaxOUDa0jHIlrJ8uvvGWLGwFIIqVmAJ0AkMZ4tI2WBACXALEAE04HqgTYtQU+Dk3MExxrxBMap0XUSNwwq7G3jzYCsXOq0QDLNiUy13eYMQUuHUADcritgKLhs0dPCx0lzu+cgy/u2VA/y8rZ+FeY5xH
|
2023-02-13 23:05:47 +00:00
|
|
|
<div style="font-size: 24px; font-weight: bold; display: inline-block; vertical-align: baseline; margin-left: 6px; line-height: 1">{$oj_name_short}</div>
|
2023-02-13 12:29:32 +00:00
|
|
|
</div>
|
|
|
|
<hr />
|
|
|
|
|
2023-03-11 01:43:08 +00:00
|
|
|
<h1 style="margin: 20px auto;"><center>{$email['subject']}</center></h1>
|
2023-02-13 12:29:32 +00:00
|
|
|
<div style="font-size: 18px">{$name} 您好,</div>
|
|
|
|
<br />
|
|
|
|
|
|
|
|
<div>
|
|
|
|
{$email['content']}
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<br />
|
|
|
|
<br />
|
|
|
|
|
2023-03-11 01:43:08 +00:00
|
|
|
<div style="text-align: right; margin-bottom: 16px;">
|
2023-02-13 12:29:32 +00:00
|
|
|
<a href="{$oj_url}">{$oj_name}</a>
|
2023-02-13 23:05:47 +00:00
|
|
|
<br />
|
|
|
|
{$email['created_at']}
|
2023-02-13 12:29:32 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<hr />
|
|
|
|
<div style="font-size: 12px; color: grey; text-align: center;">
|
|
|
|
本邮件由系统自动发送,请勿回复。
|
2023-02-13 23:05:47 +00:00
|
|
|
<br />
|
2023-03-11 01:43:08 +00:00
|
|
|
您之所以收到本邮件,是因为您是 {$oj_name} 的用户。
|
|
|
|
<br />
|
|
|
|
若本邮件没有出现在正常收件箱内,请将我们的发信邮箱地址 {$oj_email_address} 添加到您的邮箱白名单内,以免错过重要通知。
|
2023-02-13 12:29:32 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
EOD);
|
|
|
|
|
|
|
|
$res = retry_loop(function () use (&$mailer) {
|
|
|
|
$res = $mailer->send();
|
|
|
|
|
|
|
|
if ($res) return true;
|
|
|
|
|
|
|
|
UOJLog::error($mailer->ErrorInfo);
|
|
|
|
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
if ($res) {
|
|
|
|
DB::update("update emails set send_time = now() where id = {$email['id']}");
|
|
|
|
echo '[UOJMail::cronSendEmail] ID: ' . $email['id'] . ' sent.' . "\n";
|
|
|
|
}
|
2023-02-13 13:03:28 +00:00
|
|
|
} else {
|
|
|
|
DB::update("update emails set send_time = now() where id = {$email['id']}");
|
|
|
|
echo '[UOJMail::cronSendEmail] ID: ' . $email['id'] . ' - empty email address.' . "\n";
|
2023-02-13 12:29:32 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
echo '[UOJMail::cronSendEmail] Done.' . "\n";
|
|
|
|
}
|
2016-07-18 16:39:37 +00:00
|
|
|
}
|