class MailManager extends DefaultPluginManager implements MailManagerInterface (View source)

Provides a Mail plugin manager.

Traits

Provides a trait for the messenger service.

Wrapper methods for \Drupal\Core\StringTranslation\TranslationInterface.

Provides methods to use a cache backend while respecting a 'use caches' flag.

Properties

protected DiscoveryInterface $discovery

The object that discovers plugins managed by this manager.

from  PluginManagerBase
protected FactoryInterface $factory

The object that instantiates plugins managed by this manager.

from  PluginManagerBase
protected MapperInterface|null $mapper

The object that returns the preconfigured plugin instance appropriate for a particular runtime condition.

from  PluginManagerBase
protected array $definitions

Cached definitions array.

from  DiscoveryCachedTrait
protected CacheBackendInterface $cacheBackend

Cache backend instance.

from  UseCacheBackendTrait
protected bool $useCaches

Flag whether caches should be used or skipped.

from  UseCacheBackendTrait
protected string $cacheKey

The cache key.

from  DefaultPluginManager
protected array $cacheTags

An array of cache tags to use for the cached definitions.

from  DefaultPluginManager
protected string $alterHook

Name of the alter hook if one should be invoked.

from  DefaultPluginManager
protected string|bool $subdir

The subdirectory within a namespace to look for plugins, or FALSE if the plugins are in the top level of the namespace.

from  DefaultPluginManager
protected ModuleHandlerInterface $moduleHandler

The module handler to invoke the alter hook.

from  DefaultPluginManager
protected array $defaults

A set of defaults to be referenced by $this->processDefinition() if additional processing of plugins is necessary or helpful for development purposes.

from  DefaultPluginManager
protected string $pluginDefinitionAnnotationName

The name of the annotation that contains the plugin definition.

from  DefaultPluginManager
protected string|null $pluginInterface

The interface each plugin should implement.

from  DefaultPluginManager
protected Traversable $namespaces

An object that implements \Traversable which contains the root paths keyed by the corresponding namespace to look for plugin implementations.

from  DefaultPluginManager
protected string[] $additionalAnnotationNamespaces

Additional namespaces the annotation discovery mechanism should scan for annotation definitions.

from  DefaultPluginManager
protected MessengerInterface $messenger

The messenger.

from  MessengerTrait
protected TranslationInterface $stringTranslation

The string translation service.

from  StringTranslationTrait
protected ConfigFactoryInterface $configFactory

The config factory.

protected LoggerChannelFactoryInterface $loggerFactory

The logger factory.

protected RendererInterface $renderer

The renderer.

protected array $instances

List of already instantiated mail plugins.

Methods

getDefinitions()

{@inheritdoc}

getDefinition($plugin_id, $exception_on_invalid = TRUE)

{@inheritdoc}

array|null
doGetDefinition(array $definitions, string $plugin_id, bool $exception_on_invalid)

Gets a specific plugin definition.

hasDefinition($plugin_id)

{@inheritdoc}

getDiscovery()

Gets the plugin discovery.

getFactory()

Gets the plugin factory.

object
createInstance(string $plugin_id, array $configuration = [])

Creates a pre-configured instance of a plugin.

object
handlePluginNotFound(string $plugin_id, array $configuration)

Allows plugin managers to specify custom behavior if a plugin is not found.

object|false
getInstance(array $options)

Overrides PluginManagerBase::getInstance().

object|false
cacheGet(string $cid)

Fetches from the cache backend, respecting the use caches flag.

cacheSet(string $cid, mixed $data, int $expire = Cache::PERMANENT, array $tags = [])

Stores data in the persistent cache, respecting the use caches flag.

__construct(Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, LoggerChannelFactoryInterface $logger_factory, TranslationInterface $string_translation, RendererInterface $renderer)

Constructs the MailManager object.

setCacheBackend(CacheBackendInterface $cache_backend, string $cache_key, array $cache_tags = [])

Initialize the cache backend.

alterInfo(string $alter_hook)

Sets the alter hook name.

clearCachedDefinitions()

Clears static and persistent plugin definition caches.

array|null
getCachedDefinitions()

Returns the cached plugin definitions of the decorated discovery class.

setCachedDefinitions(array $definitions)

Sets a cache of plugin definitions for the decorated discovery class.

useCaches(bool $use_caches = FALSE)

Disable the use of caches.

processDefinition($definition, $plugin_id)

Performs extra processing on plugin definitions.

array
findDefinitions()

Finds plugin definitions.

string|null
extractProviderFromDefinition(mixed $plugin_definition)

Extracts the provider from a plugin definition.

alterDefinitions($definitions)

Invokes the hook to alter the definitions if the alter hook is set.

bool
providerExists($provider)

Determines if the provider of a definition exists.

string[]
getCacheContexts()

The cache contexts associated with this object.

string[]
getCacheTags()

The cache tags associated with this object.

int
getCacheMaxAge()

The maximum age for which this object may be cached.

setMessenger(MessengerInterface $messenger)

Sets the messenger.

messenger()

Gets the messenger.

t(string $string, array $args = [], array $options = [])

Translates a string to the current language or to a given language.

formatPlural($count, $singular, $plural, array $args = [], array $options = [])

Formats a string containing a count of items.

getNumberOfPlurals($langcode = NULL)

Returns the number of plurals supported by a given language.

getStringTranslation()

Gets the string translation service.

$this
setStringTranslation(TranslationInterface $translation)

Sets the string translation service to use.

array
mail(string $module, string $key, string $to, string $langcode, array $params = [], string|null $reply = NULL, bool $send = TRUE)

Composes and optionally sends an email message.

array
doMail(string $module, string $key, string $to, string $langcode, array $params = [], string|null $reply = NULL, bool $send = TRUE)

Composes and optionally sends an email message.

Details

abstract getDefinitions()

{@inheritdoc}

getDefinition($plugin_id, $exception_on_invalid = TRUE)

{@inheritdoc}

Parameters

$plugin_id
$exception_on_invalid

protected array|null doGetDefinition(array $definitions, string $plugin_id, bool $exception_on_invalid)

Gets a specific plugin definition.

Parameters

array $definitions

An array of the available plugin definitions.

string $plugin_id

A plugin id.

bool $exception_on_invalid

If TRUE, an invalid plugin ID will cause an exception to be thrown; if FALSE, NULL will be returned.

Return Value

array|null

A plugin definition, or NULL if the plugin ID is invalid and $exception_on_invalid is TRUE.

Exceptions

PluginNotFoundException

hasDefinition($plugin_id)

{@inheritdoc}

Parameters

$plugin_id

protected DiscoveryInterface getDiscovery()

Gets the plugin discovery.

Return Value

DiscoveryInterface

protected FactoryInterface getFactory()

Gets the plugin factory.

Return Value

FactoryInterface

object createInstance(string $plugin_id, array $configuration = [])

Creates a pre-configured instance of a plugin.

Parameters

string $plugin_id

The ID of the plugin being instantiated.

array $configuration

An array of configuration relevant to the plugin instance.

Return Value

object

A fully configured plugin instance.

Exceptions

PluginException

protected object handlePluginNotFound(string $plugin_id, array $configuration)

Allows plugin managers to specify custom behavior if a plugin is not found.

Parameters

string $plugin_id

The ID of the missing requested plugin.

array $configuration

An array of configuration relevant to the plugin instance.

Return Value

object

A fallback plugin instance.

object|false getInstance(array $options)

Overrides PluginManagerBase::getInstance().

Returns an instance of the mail plugin to use for a given message ID.

The selection of a particular implementation is controlled via the config 'system.mail.interface', which is a keyed array. The default implementation is the mail plugin whose ID is the value of 'default' key. A more specific match first to key and then to module will be used in preference to the default. To specify a different plugin for all mail sent by one module, set the plugin ID as the value for the key corresponding to the module name. To specify a plugin for a particular message sent by one module, set the plugin ID as the value for the array key that is the message ID, which is "${module}_${key}".

For example to debug all mail sent by the user module by logging it to a file, you might set the variable as something like:

Parameters

array $options

An array of options that can be used to determine a suitable plugin to instantiate and how to configure it.

Return Value

object|false

A fully configured plugin instance. The interface of the plugin instance will depend on the plugin type. If no instance can be retrieved, FALSE will be returned.

Exceptions

InvalidPluginDefinitionException

protected object|false cacheGet(string $cid)

Fetches from the cache backend, respecting the use caches flag.

Parameters

string $cid

The cache ID of the data to retrieve.

Return Value

object|false

The cache item or FALSE on failure.

See also

CacheBackendInterface::get

protected cacheSet(string $cid, mixed $data, int $expire = Cache::PERMANENT, array $tags = [])

Stores data in the persistent cache, respecting the use caches flag.

Parameters

string $cid

The cache ID of the data to store.

mixed $data

The data to store in the cache. Some storage engines only allow objects up to a maximum of 1MB in size to be stored by default. When caching large arrays or similar, take care to ensure $data does not exceed this size.

int $expire

One of the following values:

  • CacheBackendInterface::CACHE_PERMANENT: Indicates that the item should not be removed unless it is deleted explicitly.
  • A Unix timestamp: Indicates that the item will be considered invalid after this time, i.e. it will not be returned by get() unless $allow_invalid has been set to TRUE. When the item has expired, it may be permanently deleted by the garbage collector at any time.
array $tags

An array of tags to be stored with the cache item. These should normally identify objects used to build the cache item, which should trigger cache invalidation when updated. For example if a cached item represents a node, both the node ID and the author's user ID might be passed in as tags. For example array('node' => array(123), 'user' => array(92)).

See also

CacheBackendInterface::set

__construct(Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, LoggerChannelFactoryInterface $logger_factory, TranslationInterface $string_translation, RendererInterface $renderer)

Constructs the MailManager object.

Parameters

Traversable $namespaces

An object that implements \Traversable which contains the root paths keyed by the corresponding namespace to look for plugin implementations.

CacheBackendInterface $cache_backend

Cache backend instance to use.

ModuleHandlerInterface $module_handler

The module handler.

ConfigFactoryInterface $config_factory

The configuration factory.

LoggerChannelFactoryInterface $logger_factory

The logger channel factory.

TranslationInterface $string_translation

The string translation service.

RendererInterface $renderer

The renderer.

setCacheBackend(CacheBackendInterface $cache_backend, string $cache_key, array $cache_tags = [])

Initialize the cache backend.

Plugin definitions are cached using the provided cache backend.

Parameters

CacheBackendInterface $cache_backend

Cache backend instance to use.

string $cache_key

Cache key prefix to use.

array $cache_tags

(optional) When providing a list of cache tags, the cached plugin definitions are tagged with the provided cache tags. These cache tags can then be used to clear the corresponding cached plugin definitions. Note that this should be used with care! For clearing all cached plugin definitions of a plugin manager, call that plugin manager's clearCachedDefinitions() method. Only use cache tags when cached plugin definitions should be cleared along with other, related cache entries.

protected alterInfo(string $alter_hook)

Sets the alter hook name.

Parameters

string $alter_hook

Name of the alter hook; for example, to invoke hook_mymodule_data_alter() pass in "mymodule_data".

clearCachedDefinitions()

Clears static and persistent plugin definition caches.

Don't resort to calling \Drupal::cache()->delete() and friends to make Drupal detect new or updated plugin definitions. Always use this method on the appropriate plugin type's plugin manager!

protected array|null getCachedDefinitions()

Returns the cached plugin definitions of the decorated discovery class.

Return Value

array|null

On success this will return an array of plugin definitions. On failure this should return NULL, indicating to other methods that this has not yet been defined. Success with no values should return as an empty array and would actually be returned by the getDefinitions() method.

protected setCachedDefinitions(array $definitions)

Sets a cache of plugin definitions for the decorated discovery class.

Parameters

array $definitions

List of definitions to store in cache.

useCaches(bool $use_caches = FALSE)

Disable the use of caches.

Can be used to ensure that uncached plugin definitions are returned, without invalidating all cached information.

This will also remove all local/static caches.

Parameters

bool $use_caches

FALSE to not use any caches.

processDefinition($definition, $plugin_id)

Performs extra processing on plugin definitions.

By default we add defaults for the type to the definition. If a type has additional processing logic they can do that by replacing or extending the method.

Parameters

$definition
$plugin_id

protected array findDefinitions()

Finds plugin definitions.

Return Value

array

List of definitions to store in cache.

protected string|null extractProviderFromDefinition(mixed $plugin_definition)

Extracts the provider from a plugin definition.

Parameters

mixed $plugin_definition

The plugin definition. Usually either an array or an instance of \Drupal\Component\Plugin\Definition\PluginDefinitionInterface

Return Value

string|null

The provider string, if it exists. NULL otherwise.

protected alterDefinitions($definitions)

Invokes the hook to alter the definitions if the alter hook is set.

Parameters

$definitions

The discovered plugin definitions.

protected bool providerExists($provider)

Determines if the provider of a definition exists.

Parameters

$provider

Return Value

bool

TRUE if provider exists, FALSE otherwise.

string[] getCacheContexts()

The cache contexts associated with this object.

These identify a specific variation/representation of the object.

Cache contexts are tokens: placeholders that are converted to cache keys by the @cache_contexts_manager service. The replacement value depends on the request context (the current URL, language, and so on). They're converted before storing an object in cache.

Return Value

string[]

An array of cache context tokens, used to generate a cache ID.

string[] getCacheTags()

The cache tags associated with this object.

When this object is modified, these cache tags will be invalidated.

Return Value

string[]

A set of cache tags.

int getCacheMaxAge()

The maximum age for which this object may be cached.

Return Value

int

The maximum time in seconds that this object may be cached.

setMessenger(MessengerInterface $messenger)

Sets the messenger.

Parameters

MessengerInterface $messenger

The messenger.

MessengerInterface messenger()

Gets the messenger.

Return Value

MessengerInterface

The messenger.

protected TranslatableMarkup t(string $string, array $args = [], array $options = [])

Translates a string to the current language or to a given language.

See \Drupal\Core\StringTranslation\TranslatableMarkup::__construct() for important security information and usage guidelines.

In order for strings to be localized, make them available in one of the ways supported by the

Parameters

string $string

A string containing the English text to translate.

array $args

(optional) An associative array of replacements to make after translation. Based on the first character of the key, the value is escaped and/or themed. See \Drupal\Component\Render\FormattableMarkup::placeholderFormat() for details.

array $options

(optional) An associative array of additional options, with the following elements:

  • 'langcode' (defaults to the current language): A language code, to translate to a language other than what is used to display the page.
  • 'context' (defaults to the empty context): The context the source string belongs to. See the @link i18n Internationalization topic @endlink for more information about string contexts.

Return Value

TranslatableMarkup

An object that, when cast to a string, returns the translated string.

See also

FormattableMarkup::placeholderFormat
TranslatableMarkup::__construct

protected formatPlural($count, $singular, $plural, array $args = [], array $options = [])

Formats a string containing a count of items.

Parameters

$count
$singular
$plural
array $args
array $options

See also

TranslationInterface::formatPlural

protected getNumberOfPlurals($langcode = NULL)

Returns the number of plurals supported by a given language.

Parameters

$langcode

See also

PluralFormulaInterface::getNumberOfPlurals

protected TranslationInterface getStringTranslation()

Gets the string translation service.

Return Value

TranslationInterface

The string translation service.

$this setStringTranslation(TranslationInterface $translation)

Sets the string translation service to use.

Parameters

TranslationInterface $translation

The string translation service.

Return Value

$this

array mail(string $module, string $key, string $to, string $langcode, array $params = [], string|null $reply = NULL, bool $send = TRUE)

Composes and optionally sends an email message.

Sending an email works with defining an email template (subject, text and possibly email headers) and the replacement values to use in the appropriate places in the template. Processed email templates are requested from hook_mail() from the module sending the email. Any module can modify the composed email message array using hook_mail_alter(). Finally \Drupal::service('plugin.manager.mail')->mail() sends the email, which can be reused if the exact same composed email is to be sent to multiple recipients.

Finding out what language to send the email with needs some consideration. If you send email to a user, use \Drupal\Core\Session\AccountInterface::getPreferredAdminLangcode(). If you send email based on form values filled on the page, there are two additional choices if you are not sending the email to a user on the site. You can either use the language used to generate the page or the site default language. See Drupal\Core\Language\LanguageManagerInterface::getDefaultLanguage(). The former is good if sending email to the person filling the form, the later is good if you send email to an address previously set up (like contact addresses in a contact form).

Taking care of always using the proper language is even more important when sending emails in a row to multiple users. Hook_mail() abstracts whether the mail text comes from an administrator setting or is static in the source code. It should also deal with common mail tokens, only receiving $params which are unique to the actual email at hand.

An example:

Parameters

string $module

A module name to invoke hook_mail() on. The {$module}_mail() hook will be called to complete the $message structure which will already contain common defaults.

string $key

A key to identify the email sent. The final message ID for email altering will be {$module}_{$key}.

string $to

The email address or addresses where the message will be sent to. The formatting of this string will be validated with the @link http://php.net/manual/filter.filters.validate.php PHP email validation filter. @endlink Some examples are:

string $langcode

Language code to use to compose the email.

array $params

(optional) Parameters to build the email. Use the key '_error_message' to provide translatable markup to display as a message if an error occurs, or set this to false to disable error display.

string|null $reply

Optional email address to be used to answer.

bool $send

If TRUE, call an implementation of \Drupal\Core\Mail\MailInterface->mail() to deliver the message, and store the result in $message['result']. Modules implementing hook_mail_alter() may cancel sending by setting $message['send'] to FALSE.

Return Value

array

The $message array structure containing all details of the message. If already sent ($send = TRUE), then the 'result' element will contain the success indicator of the email, failure being already written to the watchdog. (Success means nothing more than the message being accepted at php-level, which still doesn't guarantee it to be delivered.)

array doMail(string $module, string $key, string $to, string $langcode, array $params = [], string|null $reply = NULL, bool $send = TRUE)

Composes and optionally sends an email message.

Parameters

string $module

A module name to invoke hook_mail() on. The {$module}_mail() hook will be called to complete the $message structure which will already contain common defaults.

string $key

A key to identify the email sent. The final message ID for email altering will be {$module}_{$key}.

string $to

The email address or addresses where the message will be sent to. The formatting of this string will be validated with the @link http://php.net/manual/filter.filters.validate.php PHP email validation filter. @endlink Some examples are:

string $langcode

Language code to use to compose the email.

array $params

(optional) Parameters to build the email. Use the key '_error_message' to provide translatable markup to display as a message if an error occurs, or set this to false to disable error display.

string|null $reply

Optional email address to be used to answer.

bool $send

If TRUE, call an implementation of \Drupal\Core\Mail\MailInterface->mail() to deliver the message, and store the result in $message['result']. Modules implementing hook_mail_alter() may cancel sending by setting $message['send'] to FALSE.

Return Value

array

The $message array structure containing all details of the message. If already sent ($send = TRUE), then the 'result' element will contain the success indicator of the email, failure being already written to the watchdog. (Success means nothing more than the message being accepted at php-level, which still doesn't guarantee it to be delivered.)

See also

MailManagerInterface::mail