public MailManager::doMail($module, $key, $to, $langcode, $params = array(), $reply = NULL, $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 PHP email validation filter. Some examples are:
- user@example.com
- user@example.com, anotheruser@example.com
- User <user@example.com>
- User <user@example.com>, Another User <anotheruser@example.com>
string $langcode: Language code to use to compose the email.
array $params: (optional) Parameters to build the email.
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
\Drupal\Core\Mail\MailManagerInterface::mail()
File
- core/lib/Drupal/Core/Mail/MailManager.php, line 218
Class
- MailManager
- Provides a Mail plugin manager.
Namespace
Drupal\Core\Mail
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | public function doMail( $module , $key , $to , $langcode , $params = array (), $reply = NULL, $send = TRUE) { $site_config = $this ->configFactory->get( 'system.site' ); $site_mail = $site_config ->get( 'mail' ); if ( empty ( $site_mail )) { $site_mail = ini_get ( 'sendmail_from' ); } // Bundle up the variables into a structured array for altering. $message = array ( 'id' => $module . '_' . $key , 'module' => $module , 'key' => $key , 'to' => $to , 'from' => $site_mail , 'reply-to' => $reply , 'langcode' => $langcode , 'params' => $params , 'send' => TRUE, 'subject' => '' , 'body' => array (), ); // Build the default headers. $headers = array ( 'MIME-Version' => '1.0' , 'Content-Type' => 'text/plain; charset=UTF-8; format=flowed; delsp=yes' , 'Content-Transfer-Encoding' => '8Bit' , 'X-Mailer' => 'Drupal' , ); // To prevent email from looking like spam, the addresses in the Sender and // Return-Path headers should have a domain authorized to use the // originating SMTP server. $headers [ 'Sender' ] = $headers [ 'Return-Path' ] = $site_mail ; $headers [ 'From' ] = $site_config ->get( 'name' ) . ' <' . $site_mail . '>' ; if ( $reply ) { $headers [ 'Reply-to' ] = $reply ; } $message [ 'headers' ] = $headers ; // Build the email (get subject and body, allow additional headers) by // invoking hook_mail() on this module. We cannot use // moduleHandler()->invoke() as we need to have $message by reference in // hook_mail(). if (function_exists( $function = $module . '_mail' )) { $function ( $key , $message , $params ); } // Invoke hook_mail_alter() to allow all modules to alter the resulting // email. $this ->moduleHandler->alter( 'mail' , $message ); // Retrieve the responsible implementation for this message. $system = $this ->getInstance( array ( 'module' => $module , 'key' => $key )); // Format the message body. $message = $system ->format( $message ); // Optionally send email. if ( $send ) { // The original caller requested sending. Sending was canceled by one or // more hook_mail_alter() implementations. We set 'result' to NULL, // because FALSE indicates an error in sending. if ( empty ( $message [ 'send' ])) { $message [ 'result' ] = NULL; } // Sending was originally requested and was not canceled. else { // Ensure that subject is plain text. By default translated and // formatted strings are prepared for the HTML context and email // subjects are plain strings. if ( $message [ 'subject' ]) { $message [ 'subject' ] = PlainTextOutput::renderFromHtml( $message [ 'subject' ]); } $message [ 'result' ] = $system ->mail( $message ); // Log errors. if (! $message [ 'result' ]) { $this ->loggerFactory->get( 'mail' ) ->error( 'Error sending email (from %from to %to with reply-to %reply).' , array ( '%from' => $message [ 'from' ], '%to' => $message [ 'to' ], '%reply' => $message [ 'reply-to' ] ? $message [ 'reply-to' ] : $this ->t( 'not set' ), )); drupal_set_message( $this ->t( 'Unable to send email. Contact the site administrator if the problem persists.' ), 'error' ); } } } return $message ; } |
Please login to continue.