Письма в друпале отправляются довольно нестандартным способом. Во первых, нужно вызвать функцию 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',
)
));
- Добавляем возможность использовать токены в адресе получателя контактной формы
- Отправить уведомление о новом заказе в Commerce 2
- Как сделать чтобы все письма отправлялись в html формате (8+)
- Ежедневно присылать на почту лог PHP ошибок
- Разрешить анонимам отправлять пользователям сообщения через их персональную контактную форму
Комментарии
Добрый день!
создаю форму заявки с forms api, как можно организовать отправку сообщения в кнопку submit?
чтобы была адрес отправителя брался от тела заполненного пользователем данным? где копать ?
http://drupal.org/node/751826
Спасибо но, я там уже копал, там не было примера отправки на почту... с аргументами
Подскажите, как, пользуясь модулем htmlmail | Drupal 7, правильно вставить в письмо стили css и image? для этого используется инлайн стиль или отдельный css-файл с конкретным названием? как указывается путь к картинке?
У меня стили только инлайново работают, классы очищаются, урл картинки в инлайн стиле становится вот такого вида background: url("").
Есть модуль mailmime (не путать с mimemail)) он работает в паре с htmlmail, но что он конкретно делает, заметить на практике не получилось.
Буду рад любому совету.
А чем mimemail не устраивает? вполне норм отправляет html-письма
я вызываю функцию 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
Спасибо! Все так и есть!
Добрый день, а не подскажите как программно отправить письмо всем пользователям одной роли?
Получить список пользователей, каждому отправить письмо.
Вы не сталкивались с трудностями с отправкой писем на адреса, которые содержат точку в логине, например, exmpl.example@example.com? В Drupal есть ли что-то, что может мешать отправлять письма на такие адреса?
Не сталкивался
Добавить комментарий