Отправка почтовых сообщений из расширений Joomla

  1. Пример отправки почты из расширения Joomla.
  2. Получение почтового объекта в Joomla
  3. Установка отправителя email в Joomla
  4. Получатель email в Joomla
  5. Создание почтового сообщения в Joomla
  6. Отправка email в Joomla
  7. См. также по теме отправки 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( '[email protected]', '[email protected]', '[email protected]' );

$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.

Перевод с английского официальной документации Joomla:
https://docs.joomla.org/Sending_email_from_extensions

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню