и когда Mailgun вышел из строя, я обнаружил, что неверный источник изображения электронной почты Amazon SES не может отображаться в электронной почте
первое изображение — обычный источник электронной почты здесь
версия драйвера находится здесь
symfony/mailer 6.4.8
symfony/mailgun-mailer 7.1.1
Мой вывод об отладке
когда я меняю первый драйвер на SMTP. это хорошо работает
когда мне это нравится
$s = new Symfony\Component\Mailer\SentMessage($message,$envelope);
$s->toString();
$s = new Symfony\Component\Mailer\SentMessage($message,$envelope);
$s->toString();
у вложения будет неправильное имя и
когда я глубоко скопирую сообщение
$current = deep_copy($message)
$s = new Symfony\Component\Mailer\SentMessage($current,$envelope);
$s->toString();
$current = deep_copy($message)
$s = new Symfony\Component\Mailer\SentMessage($current,$envelope);
$s->toString();
все заработало!!!
Далее идет информация для справки
Content-Type: multipart/related;
...
\
....
\--KGCwwzRU
Content-ID: d3a788f4cbf3a6aab32dcacde69a2e34@symfony
Content-Type: image/png; name="d3a788f4cbf3a6aab32dcacde69a2e34@symfony"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
name="d3a788f4cbf3a6aab32dcacde69a2e34@symfony"; filename=V9J4rKBvmB
Источник второго изображения неправильный, невозможно отобразить. и источник электронной почты здесь
Текущий источник изображения: cid:L7HALxfBwi. Его следует обновить до Content-ID 2eabc9240b3557c72ad65e92a60f7f57@symfony.
Content-Type: multipart/mixed;
\
...
\--TG5g10Dt
Content-ID: 2eabc9240b3557c72ad65e92a60f7f57@symfony
Content-Type: image/png; name="2eabc9240b3557c72ad65e92a60f7f57@symfony"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
name="2eabc9240b3557c72ad65e92a60f7f57@symfony"; filename=L7HALxfBwi
я использую почтовую программу Symfony в laravel 10
вот поддельный код
извините за демонстрационный код
config()->set('mail.mailers.failover.mailers', ['mailgun', 'ses']);
$mail_manager = app()->get('mail.manager');
$mail_manager->setSymfonyTransport($mail_manager->createSymfonyTransport(config('mail.mailers.failover')));
Mail::mailer($driver)->send(new MailableView(1, "The $driver mailable view test email"));
use Illuminate\Mail\Mailable
class Mailable extends IlluminateMailable
$this->view('emails.mailable_view_test.email_view')
->text('emails.mailable_view_test.email_view_text')
->sender('xxx', name)
->from('xxx', name)
->replyTo('xxx' name)
->to('xxx', 'xxx')
->with([
'name' => 'xxx',
'url' => 'xxx',
])
->subject($this->title);
в шаблоне лезвия
$message->embedData($logo, 'logo.png', 'image/png')
по путиvendor/symfony/mailer/Transport/RoundRobinTransport.php
это работает. Когда я меняю вот так
кажется, вложения $message являются точкойклон не может клонировать все
поэтому я изменил использование deep_copy для глубокого клонирования для каждой отправки
может быть, почтовый пистолет изменил код вложенийpublic function send(RawMessage $message, ?Envelope $envelope = null): ?SentMessage
{
$exception = null;
while ($transport = $this->getNextTransport()) {
try {
$currentMessage = deep_copy($message); //here i change
return $transport->send($currentMessage, Envelope::create($currentMessage)); //here i change
} catch (TransportExceptionInterface $e) {
$exception ??= new TransportException('All transports failed.');
$exception->appendDebug(sprintf("Transport \"%s\": %s\n", $transport, $e->getDebug()));
$this->deadTransports[$transport] = microtime(true);
}
}
throw $exception ?? new TransportException('No transports found.');
}
Дополнительный контекст
дамп $message с помощью функции laravel dd()
до
-attachments: array:1 [
0 => Symfony\Component\Mime\Part\DataPart^ {#1826
-headers: Symfony\Component\Mime\Header\Headers^ {#1829
-headers: []
-lineLength: 76
}
#_headers: ? Symfony\Component\Mime\Header\Headers
-body: Symfony\Component\Mime\Part\File^ {#1818
-path: "/User/rick/xxxx/img/logo-negative.png"
-filename: null
}
-charset: null
-subtype: "png"
-disposition: "inline"
-name: "4nF4PcToTi"
-encoding: "base64"
-seekable: null
#_parent: ? array
-filename: "4nF4PcToTi"
-mediaType: "image"
-cid: null
}
]
-cachedBody: null
после
-attachments: array:1 [
0 => Symfony\Component\Mime\Part\DataPart^ {#1826
-headers: Symfony\Component\Mime\Header\Headers^ {#1829
-headers: array:1 [
"content-id" => array:1 [
0 => Symfony\Component\Mime\Header\IdentificationHeader^ {#1932
-name: "Content-ID"
-lineLength: 76
-lang: null
-charset: "utf-8"
-ids: array:1 [
0 => "9b83b7043798ef148b6b46ac184ca696@symfony"
]
-idsAsAddresses: array:1 [
0 => Symfony\Component\Mime\Address^ {#1933
-address: "9b83b7043798ef148b6b46ac184ca696@symfony"
-name: ""
}
]
}
]
]
-lineLength: 76
}
#_headers: ? Symfony\Component\Mime\Header\Headers
-body: Symfony\Component\Mime\Part\File^ {#1818
-path: "/User/rick/xxxx/img/logo-negative.png"
-filename: null
}
-charset: null
-subtype: "png"
-disposition: "inline"
-name: "7a7a484a463c3667a9e55d610c2f0641@symfony"
-encoding: "base64"
-seekable: null
#_parent: ? array
-filename: "4nF4PcToTi"
-mediaType: "image"
-cid: "7a7a484a463c3667a9e55d610c2f0641@symfony"
}
]
-cachedBody: null
Подробнее здесь: https://stackoverflow.com/questions/786 ... image-path