Drupal → Отправка email

28.03.2010

Письма в друпале отправляются довольно нестандартным способом. Во первых, нужно вызвать функцию drupal_mail в которую передать название модуля, идентификатор письма, адрес получателя и язык письма.

drupal_mail('mymodule', 'my_notify', 'to-user@gmail.com', language_default(), array('somevar' => 'somevalue'));

Последним параметром можно передать какие-нибудь данные, которые будут участвовать в генерации темы письма или сообщения.

Во вторых, в модуле нужно реализовать хук hook_mail, в котором в зависимости от идентификатора письма, будет заполнена тема и текст письма.

/**
 * Реализация hook_mail()
 */
function mymodule_mail($key, &$message, $params) {
  if ($key == 'my_notify') {
    $message['subject'] = 'Тема';
    $message['body'][] = "Текст письма \n somevar = {$params['somevar']}";
  }
}

Громоздкая с виду конструкция, но она позволяет другим модулям, с помощью хука hook_mail_alter, изменять свойства любого письма. Так же функция drupal_mail позволяет создавать письма на основе шаблонов из модулей, в которых реализован хук hook_mail.

Подробнее.

Добавлено 23/02/2012

Отправлять письма можно и без реализации hook_mail(), для этого в drupal_mail() нужно указать имя модуля — system, а в $params передать специально сформированный массив:

drupal_mail('system', 'mail', 'to@example.com', language_default(), array(
  'context' => array(
    'subject' => 'Some subject',
    'message' => 'Some message',
  )
));

Как отправить e-mail с вложением (атачем).

Написанное актуально для
Drupal 6, Drupal 7
Похожие записи

Комментарии

Гость
24.04.2012, 11:34

Добрый день!
создаю форму заявки с forms api, как можно организовать отправку сообщения в кнопку submit?
чтобы была адрес отправителя брался от тела заполненного пользователем данным? где копать ?

Гость
24.04.2012, 13:32

Спасибо но, я там уже копал, там не было примера отправки на почту... с аргументами

AndrewFall
02.11.2012, 13:56

Подскажите, как, пользуясь модулем htmlmail | Drupal 7, правильно вставить в письмо стили css и image? для этого используется инлайн стиль или отдельный css-файл с конкретным названием? как указывается путь к картинке?

У меня стили только инлайново работают, классы очищаются, урл картинки в инлайн стиле становится вот такого вида background: url("").

Есть модуль mailmime (не путать с mimemail)) он работает в паре с htmlmail, но что он конкретно делает, заметить на практике не получилось.

Буду рад любому совету.

А чем mimemail не устраивает? вполне норм отправляет html-письма

AndrewFall
02.11.2012, 14:02

я вызываю функцию drupal_mail из кастомного модуля и mimemail заваливает меня ошибками offset 0 и тому подобными вещами... я ему как-то неправильно скармливаю переменные. если подскажете как правильно передать данные - реализую через этот модуль.

я вызываю функцию drupal_mail из кастомного модуля и mimemail заваливает меня ошибками offset 0 и тому подобными вещами... я ему как-то неправильно скармливаю переменные. если подскажете как правильно передать данные - реализую через этот модуль.

Я отправляю примерно также как в этой статье, только в mymodule_mail() приписываю
$message['headers']['Content-Type'] = 'multipart/mixed; charset=UTF-8; format=flowed; delsp=yes';

Гость
19.03.2014, 15:21

А html в письмах то таким способом и не отправляется.

Братья, помогите догадаться.

При отправке письма функцией drupal_mail текст по ширине сам становися меньше, хотя переносов строки нет никаких, и в функции просто одной строкой все идет.

Несколько раз уже сталкивался, никак не найду где поправить.

Например текст:

Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов.

По идее ожидается что он по ширине так и придет, а приходит на почтовик:

Lorem Ipsum - это текст-"рыба", часто используемый
в печати и вэб-дизайне. Lorem Ipsum является
стандартной "рыбой" для текстов на латинице
с начала XVI века. В то время некий безымянный
печатник создал большую коллекцию размеров и форм шрифтов,
используя Lorem Ipsum для распечатки образцов.

друпал вставляет перенос строки в строки длиннее 78 символов согласно RFC 3676

А отменить то это никак нельзя, да? Клиентам то же не нравится... Спасибо за ответ.

переходите на html письма или поищите модуль с альтернативным MailSystem

Евгений
27.04.2017, 16:14

Добрый день, а не подскажите как программно отправить письмо всем пользователям одной роли?

Получить список пользователей, каждому отправить письмо.

Гость
20.05.2017, 13:16

Вы не сталкивались с трудностями с отправкой писем на адреса, которые содержат точку в логине, например, exmpl.example@example.com? В Drupal есть ли что-то, что может мешать отправлять письма на такие адреса?

Добавить комментарий