Конфигурация swiftmailer для нескольких учетных записей в Symfony 2
Я использую Gmail для отправки почты, поэтому я настраиваю 'config.yml' следующим образом
swiftmailer:
transport: %mailer_transport%
encryption: %mailer_encryption%
auth_mode: %mailer_auth%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
"parameters.yml" вот так
mailer_transport: smtp
mailer_encryption: ssl
mailer_auth: login
mailer_host: smtp.gmail.com
mailer_user: lee@gmail.com
mailer_password: ******
Теперь я хочу использовать больше почтовых учетных записей для отправки писем для разных целей. Например: Используйте lee@gmail.com отправлять письма для приветствия; Используйте lee1@gmail.com отправлять письма для сброса пароля.
Что я должен настроить swiftmailer?
4 ответа
Если вы используете Swiftmailer 2.3.3, у вас есть возможность сделать все просто:
в settings.yml добавить:
mailer2_transport: smtp
mailer2_encryption: ssl
mailer2_auth_mode: login
mailer2_host: smtp.gmail.com
mailer2_user: your@gmail.com
mailer2_password: *******
В config.yml внести изменения:
swiftmailer:
default_mailer: mailer
mailers:
mailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
mailer2:
transport: %mailer2_transport%
host: %mailer2_host%
username: %mailer2_user%
password: %mailer2_password%
encryption: %mailer2_encryption%
auth_mode: %mailer2_auth_mode%
В коде, если вы пишете:
$mailer = $this->get('swiftmailer.mailer.mailer2');
вы получите настройки из вашего раздела;
И если вы напишите:
$mailer = $this->get('swiftmailer.mailer.default');
или же
$mailer = $this->get('mailer'); // default configuration
вы будете использовать настройки из раздела по умолчанию;
Так будет выглядеть ваш конфигурационный файл.
приложение / Config/config.yml
swiftmailer:
default_mailer: second_mailer
mailers:
first_mailer:
# ...
second_mailer:
# ...
Теперь вы можете использовать любой из почтовых программ следующим образом:
// returns the first mailer
$container->get('swiftmailer.mailer.first_mailer');
// also returns the second mailer since it is the default mailer
$container->get('swiftmailer.mailer');
// returns the second mailer
$container->get('swiftmailer.mailer.second_mailer');
Для более подробной информации смотрите документацию Symfony
SwiftmailerBundle, который управляет конфигурацией почтовой программы, позволяет вам настроить только одну конфигурацию по умолчанию. Однако настроить другие довольно просто. Просто используйте Swiftmailer напрямую или определите свои собственные почтовые классы с другими конфигурациями.
/**
* Gets the 'mailer' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return Swift_Mailer A Swift_Mailer instance.
*/
protected function getMailerService()
{
return $this->services['mailer'] = new \Swift_Mailer($this->get('swiftmailer.transport'));
}
Вы можете определить столько сервисов с различной конфигурацией, сколько захотите. Для примера посмотрите следующий пример.
<service id="mysecond.transport.smtp" class="%swiftmailer.transport.smtp.class%" public="false">
<argument type="service" id="swiftmailer.transport.buffer" />
<argument type="collection">
<argument type="service" id="swiftmailer.transport.authhandler" />
</argument>
<argument type="service" id="swiftmailer.transport.eventdispatcher" />
<call method="setHost"><argument>%mysecond.transport.smtp.host%</argument></call>
<call method="setPort"><argument>%mysecond.transport.smtp.port%</argument></call>
<call method="setEncryption"><argument>%mysecond.transport.smtp.encryption%</argument></call>
<call method="setUsername"><argument>%mysecond.transport.smtp.username%</argument></call>
<call method="setPassword"><argument>%mysecond.transport.smtp.password%</argument></call>
<call method="setAuthMode"><argument>%mysecond.transport.smtp.auth_mode%</argument></call>
<call method="setTimeout"><argument>%mysecond.transport.smtp.timeout%</argument></call>
<call method="setSourceIp"><argument>%mysecond.transport.smtp.source_ip%</argument></call>
</service>
Затем в вашем коде вы бы сделали что-то вроде.
$mySecondMailer = new \Swift_Mailer($this->get('mysecond.transport.smtp'));
Это должно делать свое дело.
Это должно работать: из документации
require_once 'lib/swift_required.php';
// Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25)
->setUsername('your username')
->setPassword('your password')
;
/*
You could alternatively use a different transport such as Sendmail or Mail:
// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
// Mail
$transport = Swift_MailTransport::newInstance();
*/
// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
->setFrom(array('john@doe.com' => 'John Doe'))
->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
->setBody('Here is the message itself')
;
// Send the message
$result = $mailer->send($message);