function hook_mail_alter

Same name in other branches
  1. 7.x modules/system/system.api.php \hook_mail_alter()
  2. 8.9.x core/core.api.php \hook_mail_alter()
  3. 10 core/core.api.php \hook_mail_alter()
  4. 11.x core/core.api.php \hook_mail_alter()

Alter an email message created with MailManagerInterface->mail().

Hook hook_mail_alter() allows modification of email messages created and sent with MailManagerInterface->mail(). Usage examples include adding and/or changing message text, message fields, and message headers.

Email messages sent using functions other than MailManagerInterface->mail() will not invoke hook_mail_alter(). For example, a contributed module directly calling the MailInterface->mail() or PHP mail() function will not invoke this hook. All core modules use MailManagerInterface->mail() for messaging, it is best practice but not mandatory in contributed modules.

Parameters

$message: An array containing the message data. Keys in this array include:

  • 'id': The MailManagerInterface->mail() id of the message. Look at module source code or MailManagerInterface->mail() for possible id values.
  • 'to': The address or addresses the message will be sent to. The formatting of this string must comply with RFC 2822.
  • 'from': The address the message will be marked as being from, which is either a custom address or the site-wide default email address.
  • 'subject': Subject of the email to be sent. This must not contain any newline characters, or the email may not be sent properly.
  • 'body': An array of strings or objects that implement \Drupal\Component\Render\MarkupInterface containing the message text. The message body is created by concatenating the individual array strings into a single text string using "\n\n" as a separator.
  • 'headers': Associative array containing mail headers, such as From, Sender, MIME-Version, Content-Type, etc.
  • 'params': An array of optional parameters supplied by the caller of MailManagerInterface->mail() that is used to build the message before hook_mail_alter() is invoked.
  • 'language': The language object used to build the message before hook_mail_alter() is invoked.
  • 'send': Set to FALSE to abort sending this email message.

See also

\Drupal\Core\Mail\MailManagerInterface::mail()

Related topics

1 function implements hook_mail_alter()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

mail_cancel_test_mail_alter in core/modules/system/tests/modules/mail_cancel_test/mail_cancel_test.module
Implements hook_mail_alter().
1 invocation of hook_mail_alter()
MailManager::doMail in core/lib/Drupal/Core/Mail/MailManager.php
Composes and optionally sends an email message.

File

core/core.api.php, line 2059

Code

function hook_mail_alter(&$message) {
    if ($message['id'] == 'modulename_messagekey') {
        if (!example_notifications_optin($message['to'], $message['id'])) {
            // If the recipient has opted to not receive such messages, cancel
            // sending.
            $message['send'] = FALSE;
            return;
        }
        $message['body'][] = "--\nMail sent out from " . \Drupal::config('system.site')->get('name');
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.