Mandar un email con Drupal 8

Cuando quiero mandar un email desde un módulo personalizado lo que suelo hacer es primero crear el fichero templates/mail.html dentro de la carpeta del módulo. En este fichero tebndremos el html que se manda por correo y si queremos personalizar un texto normalmente le pongo el nombre de variables entre corchetes. Por ejemplo:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>el title</title>
</head>
<body>
Este es un email con el siguiente mensaje personalizado: {{mensaje}}
</body>
</html>

Lo siguiente, en la programación de nuestro módulo plantamos el siguiente código:

$mailManager = \Drupal::service('plugin.manager.mail');
$module = 'my_modulo'; 
$key = 'email_contacto'; // clave que identifica el email

// configuración del envio
$html = file_get_contents(str_replace('src/Form', 'templates/mail.html', __DIR__));
$to = 'email@prueba.es';
$params['subject'] = 'el asunto del email ';
$params['message'] = str_replace('{{mensaje}}', 'el texto a sustituir', $html) ;
$params['Cc'] = [];
$langcode = \Drupal::currentUser()->getPreferredLangcode();
$send = true;
$result = $mailManager->mail($module, $key, $to, $langcode, $params, NULL, $send);

// guardamos en el log de Drupal el resultado del envio
$message = ($result['result'] !== true)?'Se ha producido un error en el envio de email':'Email enviado';
\Drupal::logger('contactForm')->notice($message);

Por ultimo, en el fichero .modulo especificamos el siguiente hook:

use Drupal\Core\Mail\MailManagerInterface;
use Drupal\Component\Utility\SafeMarkup;
use Drupal\Component\Utility\Html;

function my_modulo_mail($key, &$message, $params) {
 $options = array(
   'langcode' => $message['langcode'],
 );
 switch ($key) {
   case 'email_contacto':
     $header = array(
           'MIME-Version' => '1.0',
           'Content-Type' => 'text/html; charset=UTF-8; format=flowed; delsp=yes',
           'Content-Transfer-Encoding' => '8Bit',
           'X-Mailer' => 'Drupal'
     );
     if(count($params['Cc'])>0) $header['Cc'] = implode(',', $params['Cc']);
     $message['headers'] = $header;
     $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed; delsp=yes';
     $message['from'] = \Drupal::config('system.site')->get('mail');
     $message['subject'] = $params['subject'];
     $message['body'][] = $params['message'];
     break;
 }
}
Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.