Надсилання електронних листів
Чи збираєтеся ви надсилати електронні листи, наприклад, інформаційні бюлетені або підтвердження замовлень? Фреймворк Nette надає необхідні інструменти з дуже зручним API. Ми покажемо:
- як створити електронний лист, включно з вкладеннями
- як відправити
- як об'єднати електронні листи та шаблони
Встановлення
Завантажте та встановіть пакет за допомогою Composer:
Створення електронних листів
Email – це об'єкт Nette\Mail\Message:
Усі параметри мають бути закодовані в UTF-8.
Крім зазначення одержувачів за допомогою методу addTo()
, ви також
можете вказати одержувача копії за допомогою addCc()
, або
одержувача прихованої копії за допомогою addBcc()
. Усі ці методи,
включно з setFrom()
, приймають адресата трьома способами:
Тіло листа, написане у форматі HTML, передається за допомогою методу
setHtmlBody()
:
Вам не потрібно створювати текстовий варіант листа, Nette згенерує його
автоматично за вас. А якщо лист не має теми, її буде взято з елемента
<title>
.
Зображення також можна дуже легко вставити в HTML-тіло листа. Просто передайте шлях, де фізично розташовані зображення, як другий параметр, і Nette автоматично включить їх до листа:
Алгоритм вбудовування зображень підтримує такі шаблони:
<img src=...>
, <body background=...>
, url(...)
всередині
HTML-атрибута style
і спеціальний синтаксис [[...]]
.
Чи можна зробити надсилання електронних листів ще простішим?
Електронні листи – це як листівки. Ніколи не надсилайте паролі або інші облікові дані електронною поштою.
Вкладення
Зрозуміло, ви можете прикріплювати вкладення до електронних листів.
Використовуйте команду
addAttachment(string $file, ?string $content = null, ?string $contentType = null)
.
Шаблони
Якщо ви надсилаєте електронні листи у форматі HTML, чудова ідея – писати їх у системі шаблонів Latte. Як це зробити?
Файл email.latte
:
Nette автоматично вставляє всі зображення, встановлює тему відповідно
до елемента <title>
і генерує текстову альтернативу для
тіла HTML.
Використання в додатку Nette
Якщо ви використовуєте електронну пошту разом із Nette Application, тобто
презентерами, ви можете захотіти створити посилання в шаблонах,
використовуючи атрибут n:href
або тег {link}
. Latte в принципі їх
не знає, але їх дуже легко додати. Створенням посилань може займатися
об'єкт Nette\Application\LinkGenerator
, який ви отримаєте, передавши його за
допомогою впровадження
залежностей.
У шаблоні посилання створюється як у звичайному шаблоні. Усі посилання, створені за допомогою LinkGenerator, є абсолютними:
Надсилання електронних листів
Mailer – це клас, який відповідає за надсилання електронних листів. Він реалізує інтерфейс Nette\Mail\Mailer і пропонує кілька готових поштових програм, які ми представимо.
Фреймворк автоматично додає сервіс Nette\Mail\Mailer
на основі configuration в контейнер DI, який ви отримуєте, передаючи його
за допомогою впровадження
залежностей.
SendmailMailer
За замовчуванням використовується SendmailMailer, який використовує функцію PHP mail. Приклад використання:
Якщо ви хочете встановити returnPath
, але сервер все одно
перезаписує його, використовуйте $mailer->commandArgs = '-fmy@email.com'
.
SmtpMailer
Для надсилання пошти через SMTP-сервер використовуйте SmtpMailer
.
У конструктор можуть бути передані такі додаткові параметри:
port
– якщо не задано, використовуватиметься стандартне значення 25 або 465 дляssl
.timeout
– тайм-аут для SMTP-з'єднанняpersistent
– використовувати постійне з'єднанняclientHost
– призначення клієнтаstreamOptions
– дозволяє встановити опції контексту SSL для з'єднання
FallbackMailer
Він не надсилає листи електронною поштою, а розсилає їх через набір розсилок. Якщо одна розсилка не вдалася, вона повторює спробу на наступній. Якщо остання з них не працює, то все починається заново з першої.
Інші параметри в конструкторі включають число повторів і час очікування в мілісекундах.
DKIM
DKIM (DomainKeys Identified Mail) – це технологія надійної електронної пошти, яка також допомагає виявити підроблені повідомлення. Відправлене повідомлення підписується закритим ключем домену відправника, і цей підпис зберігається в заголовку електронної пошти. Сервер одержувача порівнює цей підпис із відкритим ключем, що зберігається в DNS-записах домену. Звіряючи підпис, можна довести, що електронний лист справді надійшов із домену відправника і що повідомлення не було змінено під час його передавання.
Ви можете налаштувати mailer для підпису електронної пошти в конфігурації. Якщо ви не використовуєте впровадження залежностей, він задається таким чином:
Конфігурація
Огляд параметрів конфігурації для Nette Mail. Якщо ви використовуєте не весь фреймворк, а тільки цю бібліотеку, прочитайте Як завантажити файл конфігурації.
За замовчуванням для надсилання листів використовується поштова
програма Nette\Mail\SendmailMailer
, яка більше не налаштовується. Однак ми
можемо переключити його на Nette\Mail\SmtpMailer
:
Ви можете вимкнути перевірку автентичності SSL-сертифіката за
допомогою опції context › ssl › verify_peer: false
. Настійно рекомендується
не робити цього, оскільки це зробить додаток вразливим. Натомість,
додайте сертифікати до сховища
довіри.
Щоб підвищити довіру, ми можемо підписувати електронні листи за допомогою технології DKIM:
Послуги з проведення розслідувань
Ці сервіси додаються до контейнера DI:
Назва | Тип | Опис |
---|---|---|
mail.mailer |
Nette\Mail\Mailer | клас відправлення електронноїпошти |
mail.signer |
Nette\Mail\Signer | підписання DKIM |