如何为swift邮件程序设置回退,并测试我的后备代码是否正常工作? 我从howto获得了这个标准代码。
$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";
}
它显示已发送,但如果我将错误的信息放入参数中,则不会显示失败。 我一直在读,另一种解决方案是使用
Swift_Transport_FailoverTransport
但我无法在网上找到例子。
在Swift_mailer中实现回退的简单方法是什么,
答案 0 :(得分:1)
我可以从班级Swift_Transport_FailoverTransport
延伸。
包含一个名为setTransports
的方法。在那里,您可以设置一个失败时使用的传输。这有点像连锁课。类本身是Swift_Transport
的一个实例,它包含多个其他传输。
创建要用于连接邮件服务器的传输。然后将它们添加到Swift_Transport_FailoverTransport
的实例中。然后使用该实例作为邮件传输。
答案 1 :(得分:0)
对于每个想知道如何在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
构造函数中:
swiftmailer.mailer.transport.app_failover:
class: AppBundle\Util\App_Swift_Transport_FailoverTransport
arguments:
$mailers: ['@swiftmailer.mailer.main', '@swiftmailer.mailer.fallback']