1. Создание e-mail шаблона
Контент для e-mail сообщений хранится в директории dev/email приложения. Например, если посмотреть в директорию applications/core/dev/email (вам нужно находиться в режиме разработчика, чтобы увидеть эту папку), вы увидите все e-mail сообщения, отправляемые приложением core.
Все e-mail сообщения, отправляемые Invision Community, могут быть в двух форматах: HTML (для большинства e-mail клиентов) и простой текст (для устаревших e-mail клиентов или пользователей, кто намеренно не желает получать письма в простом тексте). Для каждого отправляемого типа существует два файла key.phtml (содержит HTML версию письма) и key.txt (версия с простым текстом).
Обратите внимание, что оба типа сообщений отправляются пользователю, и его почтовый клиент самостоятельно определит наиболее подходящий вариант для отображения.
Для отправки собственных e-mail писем, вы должны создать оба варианта. Их ключи могут быть любыми, но уникальными. Первая строка обоих файлов должна быть тегом:
<ips:template parameters="$parameter1, $parameter2, $email" />
Позже (на шаге 3), когда вы вызываете код для отправки своего e-mail письма, вы можете передать любые параметры, которые хотите использовать в ваших шаблонах.
Внутри своих шаблонов вы можете использовать логику шаблонов и теги шаблонов, однако имейте ввиду, отправленное вами письмо, вероятно, будет с другим авторизованным пользователем при отправке сообщения, поэтому, поэтому не используйте ничего, что зависит от текущего авторизованного пользователя. И самое главное, не используйте тег шаблона {lang=""} (который всегда основывается на текущем авторизованном пользователе). Вместо этого вы можете получить использовать $email->language, являющийся объектом класса \IPS\Lang для правильного использования языка получателя.
Также есть специальный тег {dir}, который также можно использовать в шаблоне. Это либо ltr, либо rtl, в зависимости от языка получателя и применяется (особенно для таблиц) для обеспечения правильного расположения e-mail письма для языка. Пример использования:
<td dir='{dir}' valign='middle' align='center' style="...">
При создании своего шаблона HTML имейте в виду, что почтовые клиенты используют самые разные стандарты для браузеров, и многие обычные техники не могут быть использованы. Мы рекомендуем вам использовать шаблон из какого-либо приложения Invision Community в качестве основы, кроме того вы можете использовать такой инструмент, как Litmus.
При создании шаблона с простым текстом, вы не должны использовать какие-либо HTML теги, а пробелы принимаются во внимание; то есть любые пробелы в шаблоне будут отображаться в письме.
2. Добавление языковой строки для темы письма
Система будет автоматически искать языковую строку с ключом mailsub__<app>_<key>, чтобы использовать её в качестве темы, поэтому необходимо добавить её в файл dev/lang.php. Обратите внимание, что вы можете использовать параметры, которые вы передаете шаблону - например, в файле applications/core/dev/lang.php можно увидеть следующее:
'mailsub__core_notification_new_likes' => '{$member->name|raw} liked your post',
3. Отправка e-mail сообщения
Фактический код для отправки электронной почты очень прост:
\IPS\Email::buildFromTemplate( 'app', 'key', $params )->send( $member );
Метод send() может быть передан как объект \IPS\Member (это лучший способ, так как система будет автоматически настраивать e-mail для пользователя, включая выбор правильного языка) или e-mail адрес в виде строки (что вы должны сделать, если нужно отправить e-mail письмо незарегистрированным пользователям), или массив любого из них для отправки нескольким получателям. Вы также можете передавать второй и третий параметры для пользователей в CC (копия ) и BCC (скрытая копия) соответственно.
Если вы хотите настроить контент сообщения в зависимости от пользователя, вы можете включить переменные в свой шаблон в формате *|key|* , а затем отправить так:
<td> *|some_key|*<br> </td>
PHP:
\IPS\Email::buildFromTemplate( 'app', 'key', $params, TRUE )->mergeAndSend( array(
'user1@example.com' => array(
'some_key' => 'value for user 1',
),
'user2@example.com' => array(
'some_key' => 'value for user 2',
)
) );