RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

JMail — Отправка почтовых сообщений

Работа с классами JMail, PHPMailer в Joomla

Объект для работы с почтой

Ссылка на глобальный объект электронной почты JMail получается с помощью класса JFactory. Это создание нашего объекта JMail.

$mailer =& JFactory::getMailer();

В результате мы получим объект класса JMail, который объявлен по адресу /libraries/joomla/mail/mail.php и является потомком класса PHPMailer. Все необходимые файлы подключаются сами по необходимости.

Библиотека PHPMailer — Это внешняя библиотека для отправки почты расположенная по адресу /libraries/phpmailer. Служит для передачи электронной почты, позволяющий, в частности, вкладывать в сообщение несколько файлов, посылать копии CC и BCC, устанавливать атрибут REPLY-TO, использовать в сообщениях HTML, работать с резервными SMTP-серверами, переносить строки по словам. Он может посылать сообщения с через sendmail, PHP mail() или непосредственно по протоколу SMTP.

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

Отправитель письма устанавливается с помощью метода setSender. Функция принимает массив с адресом электронной почты и именем в качестве аргумента. Мы получили имя и адрес электронной почты из глобальной конфигурации сайта. Они устанавливаются в административной части сайта (Общие настройки / Настройки почты). От этого имени будет отправлена почта.

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

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

Вы устанавливаете получатель электронной почты с помощью метода addRecipient. Для того что-бы задать e-mail адрес текущего авторизованного пользователя, мы возьмём его из объекта пользователя.

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

Если у нас есть несколько адресатов, мы можем отправить их в виде массива.

$recipient = array('person1@domain.com', 'person2@domain.com', 'person3@domain.com');
$mailer->addRecipient($recipient);

Создание письма

Мы должны указать тему письма и создать содержимое. Тема письма устанавливается с помощью метода JMail->setSubject.

Простой способ создания сообщения в виде строки текста. Используйте функцию JMail->setBody для добавления сообщения к письму. Вы можете так же прикрепить файл JMail->addAttachment. В качестве аргумента может быть имя одного файла или массив имён нескольких.

$body   = "Your body string\nin double quotes if you want to parse the \nnewlines etc";
$mailer->setSubject('Your subject string');
$mailer->setBody($body);
// Optional file attached
$mailer->addAttachment(PATH_COMPONENT.DS.'assets'.DS.'document.pdf');

HTML-формат письма

Если вы предпочитаете HTML-формат письма, вы должны это указать. Это делается с помощью метода JMail->IsHTML. Темы и любые вложения обрабатываются, как указано выше, за исключением изображений встроенных в HTML. Они обрабатываются методом JMail->AddEmbeddedImage.

$body   = '<h2>Our mail</h2>'
         .'<div>A message to our dear readers'
         .'<img src="cid:logo_id" alt="logo"/></div>';
$mailer->isHTML(true);
$mailer->setBody($body);
// Optionally add embedded image
$mailer->AddEmbeddedImage(PATH_COMPONENT.DS.'assets'.DS.'logo128.jpg', 'logo_id', 'logo.jpg', 'base64', 'image/jpeg');

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

Дополнительные опции для писем

Это редкоиспользуемые методы, но в редких случаях бывают необходимы и добавляют гибкости при отправке почты. Всем перечисленным методам ниже можно указывать несколько значений в виде массива или строкой.

  • JMail->addReplyTo — добавить адрес почты для ответа. Пример одного адреса — array(’person1@domain.com’, ’username’). Несколько адресов соответственно — это вложенный массив.
  • JMail->addBCC — Добавить получателей слепой точной копии (BCC).
  • JMail->addCC — Добавить получателей точной копии (CC).
  • JMail->addAttachment — Добавить файл(ы) к письму. Указывать нужно абсолютный путь до файла на вашем сервере.

Т.к JMail является потомком PHPMailer, то доступны все методы и из него, прочитать о нем подробно можно по ссылкам ниже.

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

Письмо отправляется с помощью метода Send. Он возвращает true при успешной отправке или объект ошибки JError. Все письма будут отправляться в кодировке UTF-8. Это необходимо иметь ввиду, иначе письмо будет затруднительно прочитать.

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

Во всяком случае лучше всего написать собственный обработчик ошибок с помощью класса JError.

Альтернативный способ отправки писем

Существует класс JUtility, который без явного создания объекта поможет отправить письмо. Это просто немного упрощенная версия того что описано выше. Делает это примерно так.

jimport('joomla.utilities.utility');

$fromEmail = 'admin@mysite.ru'; // отправитель, почта
$fromName = 'Test Server'; // отправитель, имя

$email = 'admin@example.com'; // кому

$subject = 'Test Mail Message'; // тема письма

$convertedBody = '<p>TEST MESSAGE</p>'; // сообщение в html

$filename = JPATH_BASE.DS.'images'.DS.'stories'.DS.'articles.jpg'; // прикрепляемый файл

// отправляем 

JUtility::sendMail($fromEmail, $fromName, $email, $subject, $convertedBody, true, null, null, $filename );

Почему не нужно использовать функцию mail()?

Отправляя письма через mail(), вы сами должны следить за всеми заголовками, конвертировать необходимые вещи через base64, учитывать кодировку и многое другое. Более того, JMail может отправлять письма различными способами: SMTP, sendmail и функция mail(). Настроить это можно в Общих настройках / Сервер.

Так что лучше использовать готовый набор библиотек, где все уже учтено и отлажено и готово к работе.

Примеры в компонентах Joomla

Объект JMail используется для отправки почты в компоненте контактов (joomla/components/com_contact/controller.php).

Смотрите также:
Комментарии (33) Добавить комментарий
  • Seoforum
    Seoforum
    10 Ноября 2011, 00:41
     ↑  +3  ↓     ответ

    Спасибо!

    Разобрался

  • Светка-конфетка
    Светка-конфетка
    31 Мая 2012, 13:59
     ↑  0  ↓     ответ

    Классная статья! Спасибо.

  • Михаил
    Михаил
    13 Сентября 2012, 00:25
     ↑  0  ↓     ответ

    Спасибо супер искал давно, нормальную инструкцию.

    А тут так просто и понятно описано. Спасибо.

  • Vit
    Vit
    02 Апреля 2013, 19:42
     ↑  0  ↓     ответ

    То, что надо! Сейчас буду пробовать

  • frag
    frag
    28 Июня 2013, 15:24
     ↑  0  ↓     ответ

    Классная статья. Спасибо.

  • frag
    frag
    28 Июня 2013, 15:39
     ↑  0  ↓     ответ

    А можно при использовании JUtility::sendMail() отловить ошибку, по аналогии с методом Send?

  • Sasha
    Sasha
    09 Апреля 2014, 20:32
     ↑  +3  ↓     ответ

    jimport('joomla.utilities.utility');

    $fromEmail = 'admin@mysite.ru'; // отправитель, почта

    $fromName = 'Test Server'; // отправитель, имя

    $email = 'admin@example.com'; // кому

    $subject = 'Test Mail Message'; // тема письма

    $convertedBody = '<p>TEST MESSAGE</p>'; // сообщение в html

    $filename = JPATH_BASE.DS.'images'.DS.'stories'.DS.'articles.jpg'; // прикрепляемый файл

    // отправляем

    JUtility::sendMail($fromEmail, $fromName, $email, $subject, $convertedBody, true, null, null, $filename );

    мы же не указали, что это html разметка, у меня так и выводит, просто текстом

  • Сергей
    Сергей
    01 Мая 2015, 16:33
     ↑  0  ↓     ответ

    JUtility убрали в Joomla 3+

    https://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3_and_Joomla_Platform_12.2#JUtility

    Остается только JMail

  • Alex
    Alex
    24 Декабря 2015, 05:00
     ↑  0  ↓     ответ

    Как в Joomla! 3.2.4 добавить дополнительный email таким образом, чтобы при отправке почты он был скрыт, то есть нужно вставить какой то PHP код с адресом почты. Другими словами, есть сайт на Joomla, с него идут заявки, нужно сделать чтобы заявки дублировались на скрытый email

  • Денис
    Денис
    24 Августа 2016, 12:43
     ↑  0  ↓     ответ

    Как подключить jimport('joomla.utilities.utility'); в стороннем php файле?

    (файл загружается через аякс)

  • крем титан гель цена
    крем титан гель цена
    12 Мая 2017, 03:03
     ↑  -2  ↓     ответ

    гель титан отрицательные отзывы

    титан-гель отзывы

    титан гель развод или правда

    титан гель в барнауле

    крем титан гель отзывы

    как использовать титан гель https://2pay.pro/titan-gel/

  • SONY L6301 High Performance Silicone Sealant ( Black )
    SONY L6301 High Performance Silicone Sealant ( Black )
    11 Июля 2017, 14:35
     ↑  0  ↓     ответ

    Hi everyone, it's my first visit at this site, and paragraph is

    really fruitful in favor of me, keep up posting such articles or reviews.

  • videos porno free
    videos porno free
    20 Июля 2017, 01:23
     ↑  0  ↓     ответ

    Oh my goodness! Awesome article dude! Many thanks,

    However I am encountering problems with your RSS.

    I don't know the reason why I can't subscribe to it.

    Is there anyone else having identical RSS issues? Anyone who knows the solution will you kindly

    respond? Thanks!!

  • academy award winning movie trailer
    academy award winning movie trailer
    23 Июля 2017, 19:41
     ↑  0  ↓     ответ

    Article writing is also a fun, if you be familiar with then you can write otherwise

    it is difficult to write.

  • pozyczka internetowa
    pozyczka internetowa
    06 Августа 2017, 08:19
     ↑  0  ↓     ответ

    Hi, I do believe this is a great website. I stumbledupon it ;) I may return once again since I book marked

    it. Money and freedom is the best way to change, may you be rich and continue to help other people.

  • pozyczka internetowa
    pozyczka internetowa
    25 Августа 2017, 05:10
     ↑  0  ↓     ответ

    I need to to thank you for this great read!! I absolutely

    loved every bit of it. I've got you bookmarked to look at new things you post…

  • https://www.phelieudatthanh.com/
    https://www.phelieudatthanh.com/
    26 Августа 2017, 05:07
     ↑  0  ↓     ответ

    I like it when people get together and share ideas.

    Great blog, keep it up!

  • abcd1234abcdtest--.xyz
    abcd1234abcdtest--.xyz
    27 Августа 2017, 17:10
     ↑  0  ↓     ответ

    gsatest1254--.xyz Most piano benches on the websites for purchase are new piano benches, packed

    in a box with the detachable legs stored inside.

    I suspect that the clue for this thinking lay behind the tattoo right across his forehead which

    simply read: "Mind the Gap". Without a doubt, your

    friends and family want out for the perfect interest of

    one's child.

  • Samantha
    Samantha
    04 Сентября 2017, 06:10
     ↑  0  ↓     ответ

    Hello There. I found your weblog using msn. That is an extremely neatly written article.

    I will be sure to bookmark it and return to learn extra of your useful info.

    Thanks for the post. I'll certainly comeback.

  • agen icp capsule jakarta selatan
    agen icp capsule jakarta selatan
    25 Сентября 2017, 20:24
     ↑  0  ↓     ответ

    I have been browsing online greater than 3 hours these days, yet I never discovered any interesting article like yours.

    It is beautiful value enough for me. Personally, if

    all webmasters and bloggers made excellent content as you did, the

    web will probably be much more helpful than ever before.

  • alles in 1 vergelijken
    alles in 1 vergelijken
    17 Октября 2017, 12:12
     ↑  0  ↓     ответ

    Internet via glasvezel is echter nog lang niet op elk adres beschikbaar dus

    examine via de Checko alles-in-1 vergelijker of glasvezel op jouw huisadres beschikbaar is.

    Glasvezel kan dus honderden mega bits per seconde leveren en uploaden gaat even snel als downloaden.

  • wyrob pieczatek,
    wyrob pieczatek,
    27 Октября 2017, 13:07
     ↑  0  ↓     ответ

    Hello there! This post could not be written any better!

    Reading through this post reminds me of my good old room mate!

    He always kept chatting about this. I will forward this post to him.

    Fairly certain he will have a good read. Thanks for sharing!

  • phelieudatthanh.com
    phelieudatthanh.com
    05 Ноября 2017, 23:36
     ↑  0  ↓     ответ

    Hello.This post was really motivating, particularly since I was investigating for thoughts on this

    issue last Monday.

  • http://www.phelieudatthanh.com
    http://www.phelieudatthanh.com
    06 Ноября 2017, 02:56
     ↑  0  ↓     ответ

    Hello.This post was really interesting, especially since I was browsing

    for thoughts on this topic last Tuesday.

  • Shemale Gifs
    Shemale Gifs
    10 Ноября 2017, 13:09
     ↑  0  ↓     ответ

    Great post, Carry on the good work!. Certainly will be coming back again to check

    out any new posts!

  • chaturbate-girls.com
    chaturbate-girls.com
    11 Ноября 2017, 06:15
     ↑  0  ↓     ответ

    I’m not that much of a online reader to

    be honest but your blogs really nice, keep it

    up! I'll go ahead and bookmark your site to come back later.

    Many thanks

  • cam girls
    cam girls
    16 Ноября 2017, 07:53
     ↑  0  ↓     ответ

    Hello, I wish for to subscribe for this web site to take

    hottest updates, therefore where can i do it please

    assist.

  • cam girls
    cam girls
    17 Ноября 2017, 22:08
     ↑  0  ↓     ответ

    My developer is trying to persuade me to move to .net from PHP.

    I have always disliked the idea because of the expenses.

    But he's tryiong none the less. I've been using WordPress

    onn various websites for about a year and am concerned about switching to another platform.

    I have heard great things about blogengine.net. Is there a

    way I can importt all my wordpress content into it?

    Any help would be really appreciated!

  • Bobby
    Bobby
    23 Ноября 2017, 07:15
     ↑  0  ↓     ответ

    Wonderful blog! I found it while browsing on Yahoo News.

    Do you have any tips on how to get listed in Yahoo News?

    I've been trying for a while but I never seem to get there!

    Cheers

  • cam girls
    cam girls
    26 Ноября 2017, 15:07
     ↑  0  ↓     ответ

    Howdy I am so glad I found our web site, I really found you by mistake, while

    I wwas lookking oon Digg for something else, Nonetheless I am here now and wuld

    just like to say thabk you for a incredible post and a all round enjoyable blog (I also love tthe theme/design), I don’t have time to read

    through it all at the moment but I have book-marked it and also added your RSS feeds,

    so when I have time I will be back to read much more, Please do keep up the great

    jo.

  • kredit ruko di karawang
    kredit ruko di karawang
    29 Ноября 2017, 22:21
     ↑  0  ↓     ответ

    Paragraph writing is also a excitement, if you

    be acquainted with after that you can write if not it is difficult to write.

  • chaturbate-Girls.com
    chaturbate-Girls.com
    30 Ноября 2017, 02:27
     ↑  0  ↓     ответ

    I think that everything published was very logical.

    However, think about this, suppose you added a little content?

    I ain't saying your information isn't good, however shppose

    you added a title that grabbed folk's attention? I mean Отправка

    почты в Joomla, классы JMail и PHPMailer.

    / Классы Joomla .:. Документация Joomla!CMS is kinda boring.

    You might look at Yahoo's home page and see how they write article titles

    to grab people interested. You might add a related

    video or a pic or two to get people interested about everything've written. Just my opinion,

    it would bring your posts a little livelier.

  • online business systems
    online business systems
    14 Декабря 2017, 15:29
     ↑  0  ↓     ответ

    Hello.This article was really interesting, particularly since I was looking for thoughts

    on this issue last couple of days.

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.