() translation by (you can also view the original English article)
El envío de correos electrónicos es crucial para cualquier aplicación web. Por lo general, se envía un correo electrónico para notificar al usuario de algún tipo de actividad que haya tenido lugar en el sitio, por ejemplo, cuando se han hecho actualizaciones o cuando se han encontrado nuevos amigos. En este breve tutorial, te mostraré cómo enviar correos electrónicos con Gmail de forma rápida desde una aplicación de muestra de Laravel ampliando la funcionalidad que construimos en mi último tutorial, Autenticación con Laravel 4.
Por lo tanto, tomaremos esa aplicación de autenticación (puedes descargar el código fuente del tutorial anterior en Github para darte un punto de partida) con la que terminamos la última vez y añadiremos una nueva característica para que cada vez que un usuario se registre en el sitio, le enviemos un correo de confirmación, ¡dándole la bienvenida a la aplicación!
Configuración de correo
Antes de que podamos enviar correos electrónicos con Laravel 4 necesitamos configurar el archivo app/config/mail.php
. En este archivo podemos establecer las siguientes opciones:
Opción | Descripción |
driver | El conductor del correo que te gustaría usar. Por defecto, está configurado como SMTP, pero también puedes cambiarlo para usar la función de correo de PHP o Sendmail en su lugar. |
host | Esta es la dirección de tu servidor SMTP. |
port | Tu puerto SMTP. |
from | Esto te permite establecer el campo "desde" en tu correo electrónico, para que todos los correos electrónicos se envíen desde la misma dirección. |
encryption | Este es el protocolo de encriptación que se usará siempre que se envíen correos electrónicos. |
username | Este es tu nombre de usuario SMTP. |
password | Esta es tu contraseña SMTP. |
sendmail | Esta es la ruta donde se encuentra Sendmail en el servidor, cuando se utiliza el controlador de sendmail. |
pretend | Cuando se establece como true , los correos electrónicos se registrarán en un archivo de registro, en lugar de enviar un mensaje de correo electrónico real. |
Enviando correo con Gmail
Para este tutorial voy a utilizar Gmail para enviar mis mensajes de correo electrónico, ya que es muy fácil de usar. Todo lo que necesitas para enviar correo con Gmail es tener una cuenta de Gmail activa, con un nombre de usuario y una contraseña. Te proporcionaré todo lo demás. Editamos nuestro archivo app/config/mail.php
para que se vea algo así (eliminé los comentarios para hacer el código más compacto):
1 |
return array( |
2 |
|
3 |
'driver' => 'smtp', |
4 |
|
5 |
'host' => 'smtp.gmail.com', |
6 |
|
7 |
'port' => 587, |
8 |
|
9 |
'from' => array('address' => 'authapp@awesomeauthapp. com', 'name' => 'Awesome Laravel 4 Auth App'), |
10 |
|
11 |
'encryption' => 'tls', |
12 |
|
13 |
'username' => 'your_gmail_username', |
14 |
|
15 |
'password' => 'your_gmail_password', |
16 |
|
17 |
'sendmail' => '/usr/sbin/sendmail -bs', |
18 |
|
19 |
'pretend' => false, |
20 |
|
21 |
);
|
Aquí he dejado al driver
listo para el smtp
. Configuré el host
para que utilice smtp.gmail.com
, que es el servidor SMTP de Gmail. Configuré el port
a 587
, el "from
" a una dirección de correo electrónico falsa, lo que suena apropiado para nuestra aplicación. Dejé la encryption
configurada en tls
y finalmente querrás introducir tu propio username
y password
de Gmail para tu cuenta y dejar la opción de pretend
que es false
.
Enviando el correo
Ejemplo de código
Para esta aplicación, cada vez que un usuario se registre con éxito, queremos enviarle un correo electrónico dándole la bienvenida al sitio. El envío de correos electrónicos con Laravel se hace usando el método Mail::send()
. Aquí hay un pequeño fragmento de código, por ejemplo, los propósitos:
1 |
Mail::send('folder.view', $data, function($message) { |
2 |
$message->to('registered-user@gmail. com', 'Jon Doe')->subject('Welcome to the Laravel 4 Auth App!'); |
3 |
});
|
El primer argumento es el archivo de vista que queremos usar para formatear nuestro mensaje de correo electrónico. El segundo argumento es cualquier dato que queramos pasar a ese archivo de vista. El tercer argumento es un cierre que acepta un objeto de $message
que podemos usar para decirle al remitente a quién le enviamos el correo electrónico y cuál será el asunto del mismo. En esta clausura, también se pueden especificar otras opciones como los archivos adjuntos, etc. Esto entonces enviará el correo electrónico al usuario.
Bastante fácil, ¿verdad?
Enviar correos electrónicos tras un registro satisfactorio
Modifiquemos ahora la acción postCreate()
de nuestro UsersController
y aprovechemos lo que hemos aprendido sobre el envío de correos electrónicos para enviar un mensaje de bienvenida a nuestros usuarios, siempre que se registren en la aplicación.
Dentro de nuestra acción postCreate()
está la declaración if
, donde comprobamos si la validación ha pasado, justo después de donde guardamos el usuario en la base de datos, añadimos el siguiente código:
1 |
if ($validator->passes()) { |
2 |
$user = new User; |
3 |
$user->firstname = Input::get('firstname'); |
4 |
$user->lastname = Input::get('lastname'); |
5 |
$user->email = Input::get('email'); |
6 |
$user->password = Hash::make(Input::get('password')); |
7 |
$user->save(); |
8 |
|
9 |
Mail::send('users.mails.welcome', array('firstname'=>Input::get('firstname')), function($message){ |
10 |
$message->to(Input::get('email'), Input::get('firstname').' '.Input::get('lastname'))->subject('Welcome to the Laravel 4 Auth App!'); |
11 |
});
|
12 |
|
13 |
return Redirect::to('users/login')->with('message', 'Thanks for registering!'); |
14 |
} else { |
15 |
return Redirect::to('users/register')->with('message', 'The following errors occurred')->withErrors($validator)->withInput(); |
16 |
}
|
Aquí hemos llamado al método Mail::send()
y le hemos dicho que use un archivo de vista users.mails.welcome
. Luego pasamos en una matriz como los datos que deberían estar disponibles dentro del archivo de la vista, en este caso solo enviamos el nombre de pila de los usuarios, usando el método Input::get('firstname')
. A continuación, creamos nuestro cierre y configuramos esto para enviar el correo electrónico a la dirección de correo electrónico del usuario. También establecemos el nombre usando el nombre y apellido del usuario del formulario. Por último, solo le damos un tema bastante genérico (puedes usar el tema que quieras), para que el usuario sepa de qué se trata todo el alboroto.
Creación del archivo de vista de correo electrónico
Ahora necesitamos crear nuestro archivo de vista de correo electrónico de bienvenida
. En app/views/users
crea una nueva carpeta llamada mails
y dentro de ella crea un nuevo archivo llamado welcome.blade.php
y añade el siguiente código:
1 |
<h1>Hi, {{ $firstname }}!</h1> |
2 |
|
3 |
<p>We'd like to personally welcome you to the Laravel 4 Authentication Application. Thank you for registering!</p> |
En este archivo de la vista solo tenemos algo de HTML básico, usando la variable $firstname
que pasamos como datos de nuestro controlador a la vista, dando la bienvenida al usuario a la aplicación. No hay mucho que hacer, puedes usar tus archivos de vista para los correos electrónicos como lo haces para cualquier otra vista.
Probémoslo
Asegúrate de iniciar tu servidor web usando el servicio php artisan
y podemos visitar localhost:8000/usuarios/registro
, y luego crea un nuevo usuario:



...y luego revisa la cuenta de correo electrónico de ese usuario para verificar que el correo electrónico fue enviado exitosamente:



¡Perfecto! Nuestro correo electrónico fue enviado.
En conclusión
Y eso es todo lo que hay para enviar mensajes de correo electrónico con Laravel 4 y Gmail. Por supuesto, puedes personalizar tus mensajes de correo electrónico tanto como quieras para que el correo sea más atractivo.
Ahora bien, esta es la forma más básica de enviar correo con Laravel y puede ralentizar tu aplicación, ya que envía el correo electrónico, pero tienes otras opciones. Seguirás usando la clase de correo de Laravel pero en lugar de enviarla inmediatamente, puedes poner en queue tus correos para que se envíen en segundo plano, sin hacer esperar a tus usuarios. Pero este tema es mejor guardarlo para un artículo separado.
Para más información sobre el envío de correo electrónico con Laravel, consulta la documentación en línea. Gracias por leer.