Для того, чтобы программно отправить сообщение из Drupal, нужно использовать 2 функции, одна из которых - hook_mail().
Итак, простое тестовое сообщение.
<?php
function example_callback() {
$to = 'mail@example.com';
$key = 'example_email';
$params = array(
'body' => t('Test message')
);
drupal_mail('example', $key, $to, language_default(), $params);
}
/**
* Implements hook_mail().
*/
function example_mail($key, &$message, $params) {
switch ($key) {
// Ключ, добавленный при использовании функции drupal_mail()
case 'example_email':
$message['subject'] = t('Example Email');
$message['body'][] = $params['body'];
break;
}
}
Есть один нюанс: по умолчанию, до 8-ой версии Drupal все сообщения отправляются как текст. Это значит, если в $params['body'] вставить какой-либо HTML, то получатель увидит его простым текстом.
Для того, чтобы отправлять сообщения в формате HTML необходимо переопределить класс DefaultMailSystem и реализовать хук hook_mail_alter.
<?php
/**
* Overridden Drupal mail backend using PHP's mail function.
*/
class ExamlpeMailSystem extends DefaultMailSystem {
/**
* Concatenate and wrap the e-mail body for HTML-text mails.
*
* @param array $message
* A message array, as described in hook_mail_alter().
*
* @return array
* The formatted $message.
*/
public function format(array $message) {
if (is_array($message['body'])) {
// Склеиваем элементы массива в строку.
$message['body'] = implode("\n\n", $message['body']);
}
$message['body'] = drupal_wrap_mail($message['body']);
return $message;
}
}
/**
* Implements hook_mail_alter().
*/
function example_mail_alter(&$message) {
$headers = array(
'MIME-Version' => '1.0',
// Меняем формат сообщения на HTML
'Content-Type' => 'text/html; charset=iso-8859-1; format=flowed',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal',
);
foreach ($headers as $key => $value) {
$message['headers'][$key] = $value;
}
}
Это все! Теперь можно отсылать сообщения как обычно, но вместо простого текста использовать HTML.