我在Symfony 2中使用SwiftMailer包。我在config.yml文件中传递了我的smtp用户/密码设置,它工作的很好,但我需要从数据库中进行此设置,发送邮件。 我可以存取权限此PARAMS:动态更改SwiftMailer中的smtp设置
$mailer = $this->getContainer()->get('mailer')->getTransport();
但有可能改变它们的运行?我没有看到任何setter方法。 非常感谢!
我在Symfony 2中使用SwiftMailer包。我在config.yml文件中传递了我的smtp用户/密码设置,它工作的很好,但我需要从数据库中进行此设置,发送邮件。 我可以存取权限此PARAMS:动态更改SwiftMailer中的smtp设置
$mailer = $this->getContainer()->get('mailer')->getTransport();
但有可能改变它们的运行?我没有看到任何setter方法。 非常感谢!
您可以创建一个kernel.request
事件侦听器,注入swiftmailer.transport.real
并设置SMPT信息如
Listener类
namespace Namespace\Of\YourListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class YourListener implements EventSubscriberInterface
{
/**
* @var Swift_Transport_EsmtpTransport
*/
private $transport;
/**
* @var Doctrine\ORM\EntityManager
*/
private $em;
public function __construct($transport, $em)
{
$this->transport = $transport;
$this->em = $em;
}
public function onKernelRequest(GetResponseEvent $event)
{
//fetch info from db
$this->transport->setHost("host");
$this->transport->setPort("port");
$this->transport->setUserName("username");
$this->transport->setPassword("pass");
}
static public function getSubscribedEvents()
{
return array(
KernelEvents::REQUEST => array('onKernelRequest', 0)
);
}
}
服务decleration,
your_listener:
class: FQCN\Of\YourListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
arguments: [@swiftmailer.transport.real, @doctrine.orm.entity_manager]
非常感谢,但它不是解决办法我正在寻找内核请求,我不知道我将使用哪个帐户。我需要更改发送邮件循环中的设置。 我发现很酷的解决方案:
foreach ($locations as $location) {
// get settings for account
$user = $location->getSmtpUser();
$pass = $location->getSmtpPass();
// switch to new settings
$transport = $this->getContainer()->get('mailer')->getTransport();
$ext = $transport->getExtensionHandlers();
$auth_handler = $ext[0];
$auth_handler->setUserName($user);
$auth_handler->setPassword($pass);
// send message using new settings
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($email)
->setBody($body)
->setContentType('text/html');
$this->getContainer()->get('mailer')->send($message);
}
我知道这是有点老了,但我希望得到一个答案在-情况下,它可以帮助别人。我们使用带有SMTP传输的文件假脱机程序,并且需要根据网站定制SMTP服务器连接。
我们的解决方案是修改Swiftmailer以允许每条消息的一些附加数据以及将其绑定到Symfony2的事件分派器。这使我们能够在线轴冲洗时从每条消息中提取连接信息。
我们把它做成了一个捆绑包,以便其他人可以利用它。你可以阅读关于它here。
我只是好奇,你如何存储密码使用吗? – Gigala
@Gigala我看到你在那里做了什么。是的,这个问题必须得到回答! – aalaap
@aalaap哈哈,我的老评论:P – Gigala