При отказе первого драйвера аварийного переключения. при следующей отправке неправильный путь к изображению встроенного Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 При отказе первого драйвера аварийного переключения. при следующей отправке неправильный путь к изображению встроенного

Сообщение Anonymous »

Справочная информация
Я использовал почтовую программу Laravel 10 вместе с Symfony Mailer и обнаружил ошибку, связанную с функцией переключения при сбое, когда первая почтовая программа не смогла отправить электронное письмо.
Конфигурация аварийного переключения
Моя настройка аварийного переключения следующая:
Основной драйвер почтовой программы: Mailgun
Вторичный драйвер почтовой программы: Amazon SES
Описание проблемы
Когда электронное письмо не удается отправить с помощью Mailgun, система пытается отправить электронное письмо через Amazon SES. Однако я обнаружил, что электронные письма, отправленные через Amazon SES, содержат неработающие источники изображений (src), из-за чего изображения в электронных письмах отображаются некорректно.
Версия пакета
symfony/mailer 6.4.8
symfony/mailgun-mailer 7.1.1
Мой локальный тест отладки
когда я меняю первый драйвер на SMTP. это работает хорошо
и я делаю это перед классом FailoverTransport перед первой отправкой
$s = new Symfony\Component\Mailer\SentMessage($message,$envelope);
$s->toString();

у вложения будет неправильное имя и
когда я глубоко скопирую сообщение
$current = deep_copy($message)
$s = new Symfony\Component\Mailer\SentMessage($current,$envelope);
$s->toString();


все работало хорошо !!!
Следующая информация для справки
Вот первый источник отправки электронной почты .
Это нормально.
это для сравнения второго источника электронной почты.
Изображение src — это cid:V9J4rKBvmB, и он заменит его на cid:d3a788f4cbf3a6aab32dcacde69a2e34@symfony, результат будет выглядеть следующим образом
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


Вот второе изображение. SRC неправильный. это невозможно отобразить.
и источник электронного письма с взломанным изображением находится здесь.
Этот источник изображения — cid:L7HALxfBwi.
Он должен быть обновлен до Content-ID cid:2eabc9240b3557c72ad65e92a60f7f57@symfony
но результат будет cid:L7HALxfBwi .
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\Component\Mailer\Transport\AbstractTransport
в функции отправки
$message = clone $message; // this clone haven't clone the inner object var


поддельный код для моего теста
я использую почтовую программу 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 для глубокого клонирования для каждой отправки
Я обнаружил, что драйвер почтового пистолета был изменен в cid вложений
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()
сначала электронная почта var $message dump
-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

с неработающим источником изображения из дампа $message второго электронного письма.
-attachments: array:1 [
0 => Symfony\Component\Mime\Part\DataPart^ {#1826 //object is same
-headers: Symfony\Component\Mime\Header\Headers^ {#1829 //object is same
-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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»