Как установить резервную копию, для быстрой почтовой программы и проверить, работает ли мой резервный код?. Я получил этот стандартный код из инструкции.
$transport = Swift_SmtpTransport::newInstance(SMTP_HOST, SMTP_PORT, 'tls')
->setUsername(SMTP_USERNAME)
->setPassword(SMTP_PASSWORD)
;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('S5_Dagsrapport_' . $dato1)
->setFrom(array($from => 'S5'))
->setTo(array($to => $navn))
->setBody($body, 'text/html')
->addPart($body, 'text/html')
->attach(Swift_Attachment::newInstance($attachment, 's5_dagsreport_' . $dato1 . '.xls', 'application/xls'))
;
// Send the message
$mailer->send($message);
если я использую
if(
$mailer->send($message)){
echo "Sent\n";
}else{
echo "Failed\n";
}
он показывает отправленные, но если я помещаю неверную информацию в параметры, она не показывает Failed. Я читал, что другое решение - использовать
Swift_Transport_FailoverTransport
но я не могу найти примеры в Интернете, на этом.
что является простым способом сделать резервную копию в Swift_mailer,
Я могу сказать, из класса Swift_Transport_FailoverTransport
продолжается.
Содержит метод setTransports
. Там вы можете установить транспорты, чтобы использовать, когда один из них не работает. Это немного похоже на цепочку. Сам класс является экземпляром Swift_Transport
который содержит несколько других транспортов.
Создайте транспорты, которые вы собираетесь использовать для подключения к почтовым серверам. Затем добавьте их в экземпляр Swift_Transport_FailoverTransport
. Затем используйте этот экземпляр в качестве вашего почтового транспорта.
Для всех, кто хочет знать, как использовать это в Symfony, вот мое решение. Создайте класс, который расширяет Swift_Transport_FailoverTransport
.
namespace AppBundle\Util;
class App_Swift_Transport_FailoverTransport extends \Swift_Transport_FailoverTransport
{
/**
* @param \Swift_Mailer[] $mailers
*/
public function __construct(array $mailers)
{
parent::__construct();
/** @var \Swift_Mailer $mailer */
foreach ($mailers as $mailer) {
$this->_transports[] = $mailer->getTransport();
}
}
}
В вашем config.yml
под ключом swiftmailer
расширьте ваши почтовые программы:
swiftmailer:
default_mailer: default
mailers:
default:
transport: 'app_failover'
# example mailhog config
main:
disable_delivery: false
delivery_addresses: null
transport: smtp
host: 127.0.0.1
port: 1025
username: null
password: null
# example for sendgrid
fallback:
disable_delivery: false
delivery_addresses: null
encryption: 'ssl'
transport: 'smtp'
host: 'smtp.sendgrid.net'
port: '465'
username: 'apikey'
password: 'mypassword'
И последнее, но не менее App_Swift_Transport_FailoverTransport
: App_Swift_Transport_FailoverTransport
определенные почтовые программы в ваш конструктор App_Swift_Transport_FailoverTransport
:
swiftmailer.mailer.transport.app_failover:
class: AppBundle\Util\App_Swift_Transport_FailoverTransport
arguments:
$mailers: ['@swiftmailer.mailer.main', '@swiftmailer.mailer.fallback']