Que tal, en esta ocasión veremos como enviar correos con Laravel usando el servicio de correo empresarial de Microsoft (Exchange).
Para esto he creado un proyecto llamado mail.
Vamos a dirigirnos a al archivo donde se almacenan las variable de entorno, el .env
Reemplazaremos los valores de la sección mail por estos
MAIL_DRIVER=smtp
MAIL_HOST=smtp.office365.com
MAIL_PORT=587
MAIL_USERNAME=tu_email@tu_empresa.com
MAIL_PASSWORD=KublaiKan@100
MAIL_ENCRYPTION=tls
El host y el puerto son los que usamos para conectarnos a nuestra cuenta de correo empresarial, debes cambiar los datos de Mail_username y Mail_password por los tuyos (recuerda que estos parámetros solo aplican para el servicio empresarial de Office 365, si quieres usar una cuenta de Gmail deberás agregar sus valores).
Después de cambiar las variables de .env es necesario limpiar la cache para que laravel tome los nuevos valores, esto lo hacemos con el comando
php artisan config:cache
Ahora nos dirigimos a la carpeta config de Laravel, y abrimos el archivo mail.php
Vamos a modificar el archivo para indicarle que tome como referencia las variables del archivo .env que actualizamos anteriormente.
Deberia quedar de la siguiente manera:
'driver' => env('MAIL_DRIVER'),
'host' => env('MAIL_HOST'),
'port' => env('MAIL_PORT'),
'from' => [
'address' => env('MAIL_FROM_ADDRESS'),
'name' => env('MAIL_FROM_NAME'),
],
'encryption' => env('MAIL_ENCRYPTION'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
Ahora vamos a crear un controlador para gestionar el envio, lo llamaré MailController
php artisan make:controller MailController --resource
Abrimos nuestro controlador y en la función index colocaremos el siguiente code:
$data = array('name'=>"Hola Mundo");
$template_path = 'email_template';
Mail::send(['html'=> $template_path ], $data, function($message) {
$message->to('destinatario@outlook.com', 'Receiver Name')->subject('Titulo del correo');
$message->from('mi_cuenta@mi_empresa.com','Hola Mundo');
});
return "El correo ha sido enviado";
Recuerda incluir la clase Mail en este controlador (use Mail;)
Lo que hace este code es llamar a una vista donde se incluye el cuerpo de correo; el nombre de la vista que debemos crear es email_template así que vamos allá.
El siguiente paso es crear la ruta en el archivo web.php para poder ejecutar el controlador que enviará el correo:
Route::resource('mail','MailController');
Vamos a acceder a esa ruta y ver la magia.
Por último revisemos la bandeja de entrada (para este ejemplo, de outlook)
Nota: Si aparece el siguiente error: Filed loading cafile stream:’c:\xampp\apache\bin\curl-ca-bundle.crt’ deben descargarse este certificado e instalarlo en la carpeta c:\xampp\apache\bin\
Excelente, amigo muchas gracias por compartir tus conocimientos, ¿como puedo pasar variables a la vista, para poderlos enviar por el correo?…
Saludos y muchas gracias!
Duda, hay problema si se mandan 17mil correos por día usando dos cuentas? cómo podría hacerlo?
Que tal Suleyma, eso dependería de cada proveedor, algunos establecen limites para la cantidad de correos que pueden salir por hora. Realmente desconozco si la versión profesional del correo de Microsoft tiene esas limitantes. En cualquier caso para esa cantidad de correos al día creo que lo mejor seria usar algún servicio especializado como mailjet o mailChimp.