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

 

Возможно Вас заинтересуют эти материалы

Joomla 1.5: Пагинация.

Класс JPagination, представленный в Joomla! 1.5, позволяет легко, и просто добавлять постраничную навигацию - пагинацию

Joomla 1.5: Система событий.

Joomla 1.5 имеет систему событий, основанную на реализации шаблона проектирования Observer. И эта система очень неплохо

Joomla 1.5: Использование Ajax

В данной заметке вы узнаете, о том как разработать простое Ajax взаимодействие с использованием MooTools