- Пример отправки почты из расширения Joomla.
- Получение почтового объекта в Joomla
- Установка отправителя email в Joomla
- Получатель email в Joomla
- Создание почтового сообщения в Joomla
- Отправка email в Joomla
- См. также по теме отправки email в Joomla
Пример отправки почты из расширения Joomla.
Это пример того, как отправить электронное письмо из компонента Joomla. Обычно это нужно разместить в контроллере компонента.
Получение почтового объекта в Joomla.
Ссылка на глобальный почтовый объект (JMail) извлекается через объект JFactory. Это объект, создающий нашу почту:
$mailer = JFactory::getMailer();
Установка отправителя email в Joomla.
Отправитель email задается с помощью функции setSender
. Функция принимает в качестве аргумента массив с адресом электронной почты и именем. Из глобальной конфигурации Joomla извлекаются адрес электронной почты и имя сайта. Они задаются в настройках админки (Global Configuration → Server → Mail Settings).
$config = JFactory::getConfig();
$sender = array(
$config->get( 'mailfrom' ),
$config->get( 'fromname' )
);
$mailer->setSender($sender);
В Joomla версии 3.1 $config->getValue()
следует заменить на $config->get()
Получатель email в Joomla.
Установка получателя email производится с помощью функции addRecipient
. Чтобы установить адрес электронной почты для текущего пользователя, получаем его из объекта user
.
$user = JFactory::getUser();
$recipient = $user->email;
$mailer->addRecipient($recipient);
Если бы было несколько получателей, можно было бы поместить адрес электронной почты каждого получателя в массив.
$recipient = array( 'person1@domain.com', 'person2@domain.com', 'person3@domain.com' );
$mailer->addRecipient($recipient);
Создание почтового сообщения в Joomla.
Необходимо задать тему письма и создать тело сообщения. Тема задается с помощью setSubject
. Простой способ создания тела письма - в виде строки с обычным текстом. Для добавления сообщения в тело письма используется функция setBody
. Кроме того, можно прикрепить файл с помощью функции addAttachment
. В качестве аргумента она принимает одно имя файла или массив имен файлов.
$body = "Ваша строка тела\n в двойных кавычках, если вы хотите разобрать\n новые строки и т.д.";
$mailer->setSubject('Ваша строка темы письма');
$mailer->setBody($body);
// (Необязательный) прикрепленный файл
$mailer->addAttachment(JPATH_COMPONENT.'/assets/document.pdf');
Если письмо оформляется в формате HTML, необходимо указать почтовой программе, что это HTML. Это делается с помощью функции isHTML
. При отправке электронной почты в формате HTML обычно следует установить кодировку base64, чтобы избежать нежелательных символов в выходных данных. Тема письма и любые вложения обрабатываются, как описано выше, за исключением изображений, встроенных в HTML. О них позаботится функция AddEmbeddedImage
.
$body = '<h2>Our mail</h2>'
. '<div>Сообщение для наших дорогих читателей'
. '<img src="cid:logo_id" alt="logo"/></div>';
$mailer->isHtml(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);
// (Опционально) добавьте встроенное изображение
$mailer->AddEmbeddedImage( JPATH_COMPONENT.'/assets/logo128.jpg', 'logo_id', 'logo.jpg', 'base64', 'image/jpeg' );
Обычно изображения оставляют на сервере и ссылаются на них с помощью обычного HTML-тега изображения, чтобы уменьшить размер письма и время его отправки.
Отправка email в Joomla.
Отправка email осуществляется с помощью функции Send
. Она возвращает true
в случае успеха или объект JError
.
$send = $mailer->Send();
if ( $send !== true ) {
echo 'Ошибка отправки email: ';
} else {
echo 'Email отправлен';
}
Возможно, потребуется написать собственный обработчик ошибок, если произойдет ошибка при отправке письма.
Объект JMail
используется для отправки почты в менеджере контактов Joomla. Смотрите файл joomla/components/com_contact/controller.php
См. также по теме отправки email в Joomla.
- JFactory->getMailer в api.joomla.org
Перевод с английского официальной документации Joomla:
https://docs.joomla.org/Sending_email_from_extensions
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)