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.'/joomla-programming/99-otpravka-pochty.html/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.'/joomla-programming/99-otpravka-pochty.html/logo128.jpg', 'logo_id', '/joomla-programming/99-otpravka-pochty.html/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
Вот и всё по работе с почтой. Оригинал статьи