1 email_example.module | email_example_mail($key, &$message, $params) |
Implements hook_mail().
This hook defines a list of possible e-mail templates that this module can send. Each e-mail is given a unique identifier, or 'key'.
$message comes in with some standard properties already set: 'to' address, 'from' address, and a set of default 'headers' from backdrop_mail(). The goal of hook_mail() is to set the message's 'subject' and 'body' properties, as well as make any adjustments to the headers that are necessary.
The $params argument is an array which can hold any additional data required to build the mail subject and body; for example, user-entered form data, or some context information as to where the mail request came from.
Note that hook_mail() is not actually a hook. It is only called for a single module, the module named in the first argument of backdrop_mail(). So it's a callback of a type, but not a hook.
Related topics
File
- modules/
examples/ email_example/ email_example.module, line 39 - Hook implementations for the Email Example module.
Code
function email_example_mail($key, &$message, $params) {
global $user;
// Each message is associated with a language, which may or may not be the
// current user's selected language, depending on the type of e-mail being
// sent. This $options array is used later in the t() calls for subject
// and body to ensure the proper translation takes effect.
$options = array(
'langcode' => $message['language']->langcode,
);
switch ($key) {
// Send a simple message from the contact form.
case 'contact_message':
$message['subject'] = t('E-mail sent from @site-name', array('@site-name' => config_get('system.core', 'site_name')), $options);
// Note that the message body is an array, not a string.
$message['body'][] = t('@name sent you the following message:', array('@name' => $user->name), $options);
// Because this is just user-entered text, we do not need to translate it.
// Since user-entered text may have unintentional HTML entities in it like
// '<' or '>', we need to make sure these entities are properly escaped,
// as the body will later be transformed from HTML to text, meaning
// that a normal use of '<' will result in truncation of the message.
$message['body'][] = check_plain($params['message']);
break;
}
}