Files
coolify/app/Support/SmtpTransportFactory.php
T
6b07f03107 feat(terminal): interactive console mode for containers (docker attach) (#11538)
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: rosslh <ross@rosshill.ca>
2026-10-14 14:32:02 +02:00

69 lines
2.0 KiB
PHP

<?php
namespace App\Support;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream;
class SmtpTransportFactory
{
public static function fromSettings(object $settings, ?string $localDomain = null): EsmtpTransport
{
$mode = self::encryptionMode($settings);
$transport = new EsmtpTransport(
formatHostForUrl((string) $settings->smtp_host),
(int) $settings->smtp_port,
match ($mode) {
'none' => false,
'tls' => true,
default => null,
}
);
if ($mode === 'none') {
$transport->setAutoTls(false);
}
$transport->setUsername($settings->smtp_username ?? '');
$transport->setPassword($settings->smtp_password ?? '');
$localDomain = $settings->smtp_ehlo_domain ?? $localDomain;
if ($localDomain !== null && $localDomain !== '') {
$transport->setLocalDomain($localDomain);
}
$stream = $transport->getStream();
if (isset($settings->smtp_timeout) && $stream instanceof SocketStream) {
$stream->setTimeout((float) $settings->smtp_timeout);
}
return $transport;
}
/**
* @return array{scheme: ?string, encryption: ?string, auto_tls: string}
*/
public static function mailerOptions(object $settings): array
{
$mode = self::encryptionMode($settings);
return [
'scheme' => match ($mode) {
'none', 'starttls' => 'smtp',
'tls' => 'smtps',
default => null,
},
'encryption' => $mode === 'tls' ? 'tls' : null,
'auto_tls' => $mode === 'none' ? '0' : '',
];
}
private static function encryptionMode(object $settings): ?string
{
return $settings->smtp_encryption === null
? null
: strtolower((string) $settings->smtp_encryption);
}
}