Наверх

Загрузка постов


CodeMatrix

A+ R A-

Отправка почты средствами Joomla

При создании любого сайта не обойтись без такого немаловажного элемента как форма обратной связи. Первое, что приходит на ум при работе с Джумлой – это стандартная форма компонента контактов. Для более изысканных задач, как и в любой уважающей себя cms, на эту тему существует множество модулей разной степени кривизны. И, наконец, если вы уже совсем отчаялись найти готовое решение, нет ничего проще, чем написать форму вручную.

Для отправки почты в ядре Джумлы существует специальный класс. Ничего, конечно, не мешает сделать это и по старинке, но нужно понимать что работа через классы, во-первых, обеспечивает максимальную универсальность и безошибочность кода; и потом это на порядок удобнее и быстрее.

В любом случае нам потребуется форма и обработчик. Где мы разместим форму – это вообще не вопрос, хоть в статье, хоть в модуле, хоть прямо в основном коде страницы или обеспечим ее появление через javascript. Обработчик, опять же, можем разместить в любом месте php-кода: можем написать под это простенький модуль, или, опять же, разместить его в коде страницы (но, естественно, если пользуемся стандартным классом Джумлы, то он и должен выполняться внутри Джумлы а не вне ее).

Итак, класс. После стандартных проверок передаваемых данных (наличия переменных, их соответствия и проч) нам потребуется всего несколько строчек кода. В первой мы создадим ссылку на глобальный почтовый объект JMail с помощью класса JFactory:

$mailer =& JFactory::getMailer();

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

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

Далее с помощью метода addRecipient установим получателя письма. Например, просто:

$recipient = 'my_email';
$mailer->addRecipient($recipient);

…или, если их несколько, зададим их массивом:

$recipient = array('my_email', 'manager_mail', 'director_mail');
$mailer->addRecipient($recipient);

…или получим из формы:

$recipient = $_GET['email'];
$mailer->addRecipient($recipient);

…или, наконец, можем отправить текущему авторизованному пользователю:

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

Нужно понимать что в одном обработчике мы можем создать сразу два почтовых объекта и отправить, например, на разные адреса разную информацию из формы, что может быть достаточно удобно (главное по завершению работы первого класса не осуществлять сразу переход на страницу с сообщением об отправке).

Далее создадим само письмо (последняя строчка – в том случае, если вы передаете с письмом некий файл – вы должны указать путь к этому файлу или массив из нескольких имен):

$body = 'Сижу за решеткой\r\nВ темнице сырой\r\nВскормленный в неволе\r\nОрел молодой…';
$mailer->setSubject('Тема письма');
$mailer->setBody($body);
$mailer->addAttachment(PATH_COMPONENT.DS. 'assets'.DS. 'document.pdf');

…или то же самое в формате HTML:

$body = '<p>Сижу за решеткой</p><p>В темнице сырой</p><p>Вскормленный в неволе</p><p>Орел молодой…</p><p><img src="cid: orel_id" /></p>';
$mailer->isHTML(true);
$mailer->setSubject('Тема письма');
$mailer->setBody($body);
$mailer->addEmbeddedImage(PATH_COMPONENT.DS.'assets'.DS.'orel.jpg', 'orel_id', 'orel01.jpg', 'base64', 'image/jpeg');

Все обрабатывается в точности как и в предыдущем примере за исключением изображений, встроенных в HTML (см. последнюю строчку).

И, наконец, отправка и проверка отправки:

$send =& $mailer->Send();
if ($send !== true) {
echo 'Ошибка отправки: '.$send->message;
} else {
echo 'Письмо успешно отправлено';
}

Вот и все. Как мы видим, все уместилось в 10 – 15 строчек кода. Успешной отправки!))