fix(email): prevent Proton SMTP From header folding (#11400)

This commit is contained in:
Andras Bacsai
2026-08-19 11:52:59 +02:00
committed by GitHub
parent 2b8e684f68
commit 59be75bdac
5 changed files with 67 additions and 11 deletions
+29 -6
View File
@@ -6,6 +6,7 @@ use Illuminate\Mail\Message;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Mail;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
function is_transactional_emails_enabled(): bool
{
@@ -45,6 +46,32 @@ function mail_from_formatted(object $settings): string
return mail_from_address($settings)->toString();
}
function mail_from_email(Email $email, object $settings): Email
{
$email->from(mail_from_address($settings));
prevent_mail_from_header_folding($email, $settings);
return $email;
}
function mail_from_message(Message $message, object $settings): Message
{
$identity = mail_from_identity($settings);
$message->from($identity['address'], $identity['name']);
prevent_mail_from_header_folding($message->getSymfonyMessage(), $settings);
return $message;
}
function prevent_mail_from_header_folding(Email $email, object $settings): void
{
if (strtolower(trim((string) ($settings->smtp_host ?? ''))) !== 'smtp.protonmail.ch') {
return;
}
$email->getHeaders()->get('From')?->setMaxLineLength(998);
}
function send_internal_notification(string $message): void
{
try {
@@ -61,14 +88,11 @@ function send_user_an_email(MailMessage $mail, string $email, ?string $cc = null
if (blank($type)) {
throw new Exception('No email settings found.');
}
$from = mail_from_identity($settings);
if ($cc) {
Mail::send(
[],
[],
fn (Message $message) => $message
->from($from['address'], $from['name'])
fn (Message $message) => mail_from_message($message, $settings)
->to($email)
->replyTo($email)
->cc($cc)
@@ -79,8 +103,7 @@ function send_user_an_email(MailMessage $mail, string $email, ?string $cc = null
Mail::send(
[],
[],
fn (Message $message) => $message
->from($from['address'], $from['name'])
fn (Message $message) => mail_from_message($message, $settings)
->to($email)
->subject($mail->subject)
->html((string) $mail->render())