Joomla 1.5: Отправка почты.

Joomla 1.5: Отправка почты.

В этой заметке рассказано о том, как отправлять почту, используя механизмы предоставленные Joomla 1.5 ( класс JMail ). Из кода разрабатываемого вами компонента.

Получаем экземпляр объекта mail

Объект почты в Joomla 1.5 представляет класс JMail, который по сути представляет собой обёртку для классов PHPMailer - а. То есть по сути мы будем использовать PHPMailer но Joomla - функциями. Класс JMail, как и многие другие - реализован при помощи паттерна Singleton и что бы получить экземпляр его объекта нам нужно обратиться к глобальной Joomla - фабрике таким образом:

$mailer =& JFactory::getMailer();

Установка отправителя.

Отправитель письма, определяется с помощью метода JMail::setSender( array $sender ). Функция принимает либо массив с адресом электронной почты и именем отправителя, либо строку - обратный адрес электронной почты - в этом случае имя отправителя берётсвя из настроек системы. Они устанавливаются в панели администратора ( Сайт -> Общие настройки -> Сервер -> Настройки почты). А в коде вашего компонента можно прописать и так:

$config =& JFactory::getConfig();

$sender = array( 
    $config->getValue( 'config.mailfrom' ),
    $config->getValue( 'config.fromname' ) );
 
$mailer->setSender($sender);

Установка получателя.

Установить получателя можно при помощи метода JMail::addRecipient( /*string*/ $recipient ). Чтобы задать адрес электронной почты для текущего пользователя, мы извлекаем его из объекта пользователя:

$user =& JFactory::getUser();
$recipient = $user->email;
 
$mailer->addRecipient($recipient);

Если у вашего письма несколько получателей, то функции JMail::addRecipient( $recipient ) нужно передать как параметр и индексный массив с именами получателей:

...
$mailer->addRecipient( array('mail@to.net','mail2@to.net','mail3@to.net') );
...

Подготавливаем почту

Теперь необходимо создать тему и тело письма. Тема письма задаётся с помощью метода

JMail::addRecipient( /*string*/ $subject ).

Самый простой способ создания текста сообщения электронной почты - это создать его в виде простого текста. Что бы добавить в сообщение текст письма - используйте функцию:

JMail::setBody( /*string*/ $content )

Так же можно прикрепить файл с помощью метода:

JMail::addAttachment( /*mixed*/ $filename )

Он принимает один параметр - это либо строка - имя файла, либо массив строк - имен файлов.

$body   = "Тело вашего письма\n
           в двойных кавычках, если вы хотите, что бы работали \n
           символы форматирования, такие как \n
           новая строка и т.п.";
           
$mailer->setSubject('Тема вашего письма');
$mailer->setBody($body);

// Опционально: прикрепляем файл:
$mailer->addAttachment(JPATH_COMPONENT.DS.'assets'.DS.'document.pdf');

Если вам нужно отправить письмо в формате HTML, то это очень просто. Нужно просто сообщить об этом системе с помощью метода:

JMail::IsHTML($bool)

При отправке сообщения HTML нужно установить название кодировки как base64, чтобы избежать нежелательных символов в данных. Установка темы и вложения - делаются так же, как указано выше, за исключением изображений применяемых в HTML - коде письма - их нужно прикреплять тдельно с помощью метода:

JMail::AddEmbeddedImage( )

Вот описание интефейса этого метода:

/**
 * Добавляет присоеденённые ресурсы. 
 * Ресурсами могут быть изображения, звуки и пр. 
 * Удостоверьтесь, только что что указываете правильный тип $type.
 * Для изображений JPEG используется "image/jpeg" а для изображений GIF используется "image/gif".
 *
 * @param string $path - Путь к файлу ресурса.
 * @param string $cid - имя идентификатора ресурса 
 *                      это нужно для HTML - форм - это будет имя и 
 *                      значение get - переменной, которую будет передавть форма.
 *
 * @param string $name переписывает имя ресурса.
 * @param string $encoding - кодировка.
 * @param string $type  - MIME тип.
 * @return bool
 */
function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream')

А вот так его можно применить:

$body = '<h2>Our mail</h2>'
      . '<div>A message to our dear readers'
      . '<img src="cid:logo_id" alt="logo"/></div>';
      
$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);

// Описываем изображение, которое используется в HTML - коде письма: 
$mailer->AddEmbeddedImage( JPATH_COMPONENT.DS.'assets'.DS.'logo128.jpg', 'logo_id', 'logo.jpg', 'base64', 'image/jpeg' );

Как правило так не поступают, а делают следующим образом: в HTML - коде письма просто обращаются к изображениям, расположенном на вашем сервере, указывая в теге img соответствующий атрибут src, чтобы уменьшить размер письма и время отправки.

Отправка почты.

Почта отправляется с помощью метода:

JMail::Send()

Он возвращает логичекое true случае успеха, или объект JError в ином случае.

$send =& $mailer->Send();
if ( $send !== true ) {
    echo 'Error sending email: ' . $send->message;
} else {
    echo 'Mail sent';
}

Пример использования объекта JMail можно посмотреть ещё в менеджере контактов Joomla. Смотрите файл joomla/components/com_contact/controller.php

Вот и всё по работе с почтой. Оригинал статьи

Добавить комментарий


Защитный код
Обновить






Кто на сайте
Сейчас 88 гостей онлайн