Как отправить электронное письмо¶
Отправление электронное почты - это классическое задание для любого веб-приложения, которое имеет особенные сложности и потенциальные подвохи. Вместо того, чтобы выдумывать колесо, одним из решений отправки писем является использование SwiftmailerBundle, который использует силу библиотеки Swift Mailer. Этот пакет включен в Symfony Standard Edition.
Конфигурация¶
Чтобы использовать Swift Mailer, вам понадобится сконфигурировать его для вашего почтового сервера.
Tip
Вместо того, чтобы устанавливать/использовать ваш собственный почтовый сервер, вы можете захотеть использовать провайдер почты вроде Mandrill, SendGrid, Amazon SES или дрегие. Они дают вам SMTP-сервер, имя пользователя и парль (иногда называется ключом), которые мгут быть использованы с конфигурацией Swift Mailer.
В стандартной установке Symfony, некоторые конфигурации swiftmailer
уже
включены:
- YAML
1 2 3 4 5 6
# app/config/config.yml swiftmailer: transport: '%mailer_transport%' host: '%mailer_host%' username: '%mailer_user%' password: '%mailer_password%'
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!-- app/config/config.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/swiftmailer http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd"> <swiftmailer:config transport="%mailer_transport%" host="%mailer_host%" username="%mailer_user%" password="%mailer_password%" /> </container>
- PHP
1 2 3 4 5 6 7
// app/config/config.php $container->loadFromExtension('swiftmailer', array( 'transport' => "%mailer_transport%", 'host' => "%mailer_host%", 'username' => "%mailer_user%", 'password' => "%mailer_password%", ));
Эти значения (например, %mailer_transport%
), считывают параметры, которые
установлены в файле parameters.yml. Вы можете
изменять значения в этом файле или устанавливать их там напрямую.
Доступны следуюзие конфигурации атрибутов:
transport
(smtp
,mail
,sendmail
, илиgmail
)username
password
host
port
encryption
(tls
, orssl
)auth_mode
(plain
,login
, orcram-md5
)spool
type
(как определять очередь сообщений, поддерживаютсяfile
илиmemory
, см How to Spool Emails)path
(где сохранять сообщения)
delivery_addresses
(массив адресов электронной почты, куда отправляются ВСЕ письма)disable_delivery
(установите как "true" чтобы полностью отключить доставку)
Caution
Начиная с SwiftMailer 5.4.5, транспорт mail
резко оспаривался, и будет
удален в версии 6. Подумайте о том, чтобы использовать другой транспорт,
вроде smtp
, sendmail
или gmail
.
Отправка писем¶
Библиотека Swift Mailer работает путем создания, конфигурации и последующей
отправки объектов Swift_Message
. "Отправщик" ответственнен за действительную
доставку сообщения и к нему можно получить доступ через сервис mailer
. В общем,
отправка электронного письма достаточно прямолинейна:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public function indexAction($name, \Swift_Mailer $mailer)
{
$message = new \Swift_Message('Hello Email')
->setFrom('[email protected]')
->setTo('[email protected]')
->setBody(
$this->renderView(
// app/Resources/views/Emails/registration.html.twig
'Emails/registration.html.twig',
array('name' => $name)
),
'text/html'
)
/*
* Если вы также хотите включить вресию сообщения plaintext
->addPart(
$this->renderView(
'Emails/registration.txt.twig',
array('name' => $name)
),
'text/plain'
)
*/
;
$mailer->send($message);
// или вы также можете вызвать сервис mailer таким образом
// $this->get('mailer')->send($message);
return $this->render(...);
}
|
Чтобы все было раздельно, тело письма было сохранено в щаблоне и отображено
с помощью метода renderView()
. Шаблон registration.html.twig
может
выглядеть как-то так:
1 2 3 4 5 6 7 8 9 10 11 12 | {# app/Resources/views/Emails/registration.html.twig #}
<h3>You did it! You registered!</h3>
Hi {{ name }}! You're successfully registered.
{# пример, предполагающий, что у вас есть маршрут под названием "login" #}
To login, go to: <a href="{{ url('login') }}">...</a>.
Thanks!
{# Создаёт абсолютный URL к /images/logo.png file #}
<img src="{{ absolute_url(asset('images/logo.png')) }}">
|
Объект $message
поддерживает больше опций, таких как добавление вложений,
добавление HTML-содержимого и многое другое. К счастью, в своей документации,
Swift Mailer покрывает тему Создания сообщений в красочных деталях.
Узнать больше¶
- Как использовать облако для отправки электронных писем
- How to Work with Emails during Development
- Как работать с электронными письмами во время разработки
- Как использовать Gmail для отправки электронных писем
- How to Spool Emails
- Как спулить электронные письма
- How to Test that an Email is Sent in a Functional Test
- Как протестировать, было ли отправлено электронное письмо в функциональном тесте
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.