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

  1. Пример отправки почты из расширения Joomla.
  2. Получение почтового объекта в Joomla
  3. Установка отправителя email в Joomla
  4. Получатель email в Joomla
  5. Создание почтового сообщения в Joomla
  6. Отправка email в Joomla
  7. См. также по теме отправки email в Joomla

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Пример отправки почты из расширения 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( 'person1@domain.com', 'person2@domain.com', 'person3@domain.com' );

$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

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

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