xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Отправка email

Опубликовано в

Письма в друпале отправляются довольно нестандартным способом. Во первых, в любом месте вашего модуля, нужно вызвать функцию 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
Похожие записи

Комментарии RSS

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

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

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

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

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

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

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

я вызываю функцию 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';

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

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

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

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

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

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

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

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

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

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

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

Спасибо! Все так и есть!

А как при способе отправки

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

добавить дополнительные заголовки? В частности reply-to. Пробовал сделать так:

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

но не работает :(

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

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании