email setup more functions
This commit is contained in:
@@ -2871,21 +2871,22 @@ class ApiKernel
|
||||
return $map ? strtr($html, $map) : $html;
|
||||
}
|
||||
|
||||
private function dispatchTestMail(string $to, string $subject, string $html, ?array $sender = null, ?int $customerId = null): bool
|
||||
private function dispatchTestMail(string $to, string $subject, string $html, ?array $sender = null, ?int $customerId = null, ?array $smtpOverride = null): bool
|
||||
{
|
||||
$this->lastMailError = null;
|
||||
$smtpConf = $this->conf['smtp'] ?? [];
|
||||
$settings = ($customerId && $customerId > 0) ? $this->getCustomerSettings($customerId) : [];
|
||||
$override = is_array($smtpOverride) ? $smtpOverride : [];
|
||||
$smtp = array_merge($smtpConf, array_filter([
|
||||
'host' => $settings['smtp_host'] ?? null,
|
||||
'port' => $settings['smtp_port'] ?? null,
|
||||
'user' => $settings['smtp_user'] ?? null,
|
||||
'pass' => $settings['smtp_pass'] ?? null,
|
||||
'secure' => $settings['smtp_secure'] ?? null,
|
||||
'from_email' => $settings['smtp_from_email'] ?? null,
|
||||
'from_name' => $settings['smtp_from_name'] ?? null,
|
||||
'reply_to' => $settings['smtp_reply_to'] ?? null,
|
||||
'enabled' => $settings['smtp_enabled'] ?? null,
|
||||
'host' => $override['host'] ?? ($settings['smtp_host'] ?? null),
|
||||
'port' => $override['port'] ?? ($settings['smtp_port'] ?? null),
|
||||
'user' => $override['user'] ?? ($settings['smtp_user'] ?? null),
|
||||
'pass' => array_key_exists('pass', $override) ? $override['pass'] : ($settings['smtp_pass'] ?? null),
|
||||
'secure' => $override['secure'] ?? ($settings['smtp_secure'] ?? null),
|
||||
'from_email' => $override['from_email'] ?? ($settings['smtp_from_email'] ?? null),
|
||||
'from_name' => $override['from_name'] ?? ($settings['smtp_from_name'] ?? null),
|
||||
'reply_to' => $override['reply_to'] ?? ($settings['smtp_reply_to'] ?? null),
|
||||
'enabled' => $override['enabled'] ?? ($settings['smtp_enabled'] ?? null),
|
||||
], static fn($v) => $v !== null && $v !== ''));
|
||||
|
||||
$smtpEnabled = !empty($smtp['enabled']);
|
||||
@@ -3074,6 +3075,9 @@ class ApiKernel
|
||||
case 'account.bridge.test':
|
||||
$this->handleAccountBridgeTest();
|
||||
break;
|
||||
case 'account.smtp.test':
|
||||
$this->handleAccountSmtpTest();
|
||||
break;
|
||||
case 'account.fonts.list':
|
||||
$this->handleAccountFontsList();
|
||||
break;
|
||||
@@ -3816,6 +3820,59 @@ class ApiKernel
|
||||
$this->respond(['ok' => true, 'settings' => $settings]);
|
||||
}
|
||||
|
||||
private function handleAccountSmtpTest(): void
|
||||
{
|
||||
$user = $this->requireAuth();
|
||||
$this->ensureRole($user, ['owner', 'admin']);
|
||||
$customerId = (int)($user['customer_id'] ?? 0);
|
||||
if ($customerId <= 0) $this->fail('Customer context missing', null, 500);
|
||||
|
||||
$recipient = trim((string)($this->in['to'] ?? ''));
|
||||
if ($recipient === '') {
|
||||
$recipient = (string)($user['email'] ?? '');
|
||||
}
|
||||
if ($recipient === '' || !filter_var($recipient, FILTER_VALIDATE_EMAIL)) {
|
||||
$this->fail('Valid recipient required', null, 422);
|
||||
}
|
||||
|
||||
$smtpOverride = null;
|
||||
if (array_key_exists('smtp_host', $this->in) || array_key_exists('smtp_enabled', $this->in)) {
|
||||
$smtpOverride = [
|
||||
'enabled' => !empty($this->in['smtp_enabled']),
|
||||
'host' => trim((string)($this->in['smtp_host'] ?? '')),
|
||||
'port' => (int)($this->in['smtp_port'] ?? 0),
|
||||
'user' => trim((string)($this->in['smtp_user'] ?? '')),
|
||||
'pass' => (string)($this->in['smtp_pass'] ?? ''),
|
||||
'secure' => strtolower(trim((string)($this->in['smtp_secure'] ?? ''))),
|
||||
'from_email' => trim((string)($this->in['smtp_from_email'] ?? '')),
|
||||
'from_name' => trim((string)($this->in['smtp_from_name'] ?? '')),
|
||||
'reply_to' => trim((string)($this->in['smtp_reply_to'] ?? '')),
|
||||
];
|
||||
}
|
||||
|
||||
$subject = 'EmailTemplate SMTP Test';
|
||||
$html = '<p>SMTP Test erfolgreich.</p><p>Zeit: ' . date(DATE_ATOM) . '</p>';
|
||||
$ok = $this->dispatchTestMail($recipient, $subject, $html, null, $customerId, $smtpOverride);
|
||||
|
||||
$this->writeDebugLog('smtp_test', [
|
||||
'time' => date(DATE_ATOM),
|
||||
'customer_id' => $customerId,
|
||||
'to' => $recipient,
|
||||
'smtp_enabled' => $smtpOverride['enabled'] ?? null,
|
||||
'smtp_host' => $smtpOverride['host'] ?? null,
|
||||
'smtp_port' => $smtpOverride['port'] ?? null,
|
||||
'smtp_secure' => $smtpOverride['secure'] ?? null,
|
||||
'ok' => $ok,
|
||||
'error' => $ok ? null : $this->lastMailError,
|
||||
]);
|
||||
|
||||
if (!$ok) {
|
||||
$this->fail('SMTP test failed', $this->lastMailError ?: 'Send failed', 500);
|
||||
}
|
||||
|
||||
$this->respond(['ok' => true, 'to' => $recipient]);
|
||||
}
|
||||
|
||||
private function handleAccountSettingsUpdate(): void
|
||||
{
|
||||
$user = $this->requireAuth();
|
||||
@@ -3838,13 +3895,14 @@ class ApiKernel
|
||||
$hasSmtpFromEmail = array_key_exists('smtp_from_email', $this->in);
|
||||
$hasSmtpFromName = array_key_exists('smtp_from_name', $this->in);
|
||||
$hasSmtpReplyTo = array_key_exists('smtp_reply_to', $this->in);
|
||||
$hasSmtpPassClear = array_key_exists('smtp_pass_clear', $this->in);
|
||||
$rotateBridge = !empty($this->in['rotate_bridge_token']);
|
||||
$rotateSender = !empty($this->in['rotate_sender_token']);
|
||||
$rotateExternal = !empty($this->in['rotate_external_token']);
|
||||
$onlyListSort = $hasListSort && !$hasBridgeUrl && !$hasBridgeToken && !$hasSenderToken && !$hasExternalToken
|
||||
&& !$hasEditorDefault && !$hasBridgeTables && !$hasVersionsRetention && !$rotateBridge && !$rotateSender && !$rotateExternal
|
||||
&& !$hasSmtpEnabled && !$hasSmtpHost && !$hasSmtpPort && !$hasSmtpUser && !$hasSmtpPass && !$hasSmtpSecure
|
||||
&& !$hasSmtpFromEmail && !$hasSmtpFromName && !$hasSmtpReplyTo;
|
||||
&& !$hasSmtpFromEmail && !$hasSmtpFromName && !$hasSmtpReplyTo && !$hasSmtpPassClear;
|
||||
|
||||
if (!$onlyListSort) {
|
||||
$this->ensureRole($user, ['owner', 'admin']);
|
||||
@@ -3869,6 +3927,7 @@ class ApiKernel
|
||||
$smtpFromEmail = $hasSmtpFromEmail ? trim((string)($this->in['smtp_from_email'] ?? '')) : (string)($settings['smtp_from_email'] ?? '');
|
||||
$smtpFromName = $hasSmtpFromName ? trim((string)($this->in['smtp_from_name'] ?? '')) : (string)($settings['smtp_from_name'] ?? '');
|
||||
$smtpReplyTo = $hasSmtpReplyTo ? trim((string)($this->in['smtp_reply_to'] ?? '')) : (string)($settings['smtp_reply_to'] ?? '');
|
||||
$smtpPassClear = $hasSmtpPassClear ? !empty($this->in['smtp_pass_clear']) : false;
|
||||
|
||||
if ($bridgeUrl && !filter_var($bridgeUrl, FILTER_VALIDATE_URL)) {
|
||||
$this->fail('Ungültige Bridge-URL', null, 422);
|
||||
@@ -3911,7 +3970,7 @@ class ApiKernel
|
||||
$smtpSecure = '';
|
||||
}
|
||||
|
||||
$settings = $this->saveCustomerSettings($customerId, [
|
||||
$save = [
|
||||
'bridge_url' => $bridgeUrl,
|
||||
'bridge_token' => $bridgeToken,
|
||||
'sender_token' => $senderToken,
|
||||
@@ -3923,12 +3982,18 @@ class ApiKernel
|
||||
'smtp_host' => $smtpHost ?: null,
|
||||
'smtp_port' => $smtpPort > 0 ? $smtpPort : null,
|
||||
'smtp_user' => $smtpUser ?: null,
|
||||
'smtp_pass' => $smtpPass !== '' ? $smtpPass : null,
|
||||
'smtp_secure' => $smtpSecure ?: null,
|
||||
'smtp_from_email' => $smtpFromEmail ?: null,
|
||||
'smtp_from_name' => $smtpFromName ?: null,
|
||||
'smtp_reply_to' => $smtpReplyTo ?: null,
|
||||
]);
|
||||
];
|
||||
if ($smtpPassClear) {
|
||||
$save['smtp_pass'] = null;
|
||||
} elseif ($hasSmtpPass && $smtpPass !== '') {
|
||||
$save['smtp_pass'] = $smtpPass;
|
||||
}
|
||||
|
||||
$settings = $this->saveCustomerSettings($customerId, $save);
|
||||
} else {
|
||||
$settings = $customerId ? $this->ensureSettingsTokens($customerId, $settings) : $settings;
|
||||
}
|
||||
@@ -4600,6 +4665,8 @@ class ApiKernel
|
||||
} else {
|
||||
$row['smtp_port'] = 0;
|
||||
}
|
||||
$row['smtp_pass_set'] = !empty($row['smtp_pass']);
|
||||
unset($row['smtp_pass']);
|
||||
return $row;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user