Tutorial Laravel Mail : Enviar un mensaje al correo

Crear un proyecto de laravel

composer create-project laravel/laravel proyecto-laravel

Crear un controlador

php artisan make:controller ControllerMail

Después de crear controlador, agregar una función para cargar la vista del formulario de mensaje

app/Http/Controllers/ControllerMail.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SendEmailController extends Controller
{
    function index()
    {
     return view('form');
    }
}

?>

Crear una vista Formulario de contacto

resources/views/form.blade.php

<!DOCTYPE html>
<html>
 <head>
  <title>How Send an Email in Laravel</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

  <!-- Styles -->
  <style>
      html, body {
          background-color: #fff;
          color: #636b6f;
          font-family: 'Nunito', sans-serif;
          font-weight: 200;
          height: 100vh;
          margin: 0;
      }

      .full-height {
          height: 100vh;
      } 

      .content {
          text-align: center;
      }

      .title {
          font-size: 84px;
      } 
  </style>
 </head>
 <body>
  <br />
  <br />
  <br />
  <div class="container box" style="width: 970px;">
   <h1 style="text-align:center;"> <tutofox/> </h1>
   <h3 align="center">Cómo enviar un correo electrónico en Laravel</h3>
   <br/>
   @if (count($errors) > 0)
    <div class="alert alert-danger">
     <button type="button" class="close" data-dismiss="alert">×</button>
     <ul>
      @foreach ($errors->all() as $error)
       <li>{{ $error }}</li>
      @endforeach
     </ul>
    </div>
   @endif
   @if ($message = Session::get('success'))
   <div class="alert alert-success alert-block">
    <button type="button" class="close" data-dismiss="alert">×</button>
      <strong>{{ $message }}</strong>
   </div>
   @endif
   <form method="post" action="{{url('send')}}">
    {{ csrf_field() }}
    <div class="form-group">
     <label>Nombre</label>
     <input type="text" name="name" class="form-control" value="" />
    </div>
    <div class="form-group">
     <label> Email</label>
     <input type="text" name="email" class="form-control" value="" />
    </div>
    <div class="form-group">
     <label>Mensaje</label>
     <textarea name="message" class="form-control"></textarea>
    </div>
    <div class="form-group">
     <input type="submit" name="send" class="btn btn-info" value="Enviar" />
    </div>
   </form>

  </div>
 </body>
</html>
<form method="post" action="{{url('send')}}">

Configurar Route

routes/web.php

<?php

// ruta de formulario
Route::get('/form', 'ControllerMail@index');
// ruta al enviar correo
Route::post('/send', 'ControllerMail@send');

?>

Antes de hacer la clase mailable, debemos definir la configuración del correo electrónico en el archivo .env del marco Laravel.

MAIL_DRIVER=smtp
MAIL_HOST=smtpout.secureserver.net
MAIL_PORT=80
MAIL_USERNAME=xxxxxxx
MAIL_PASSWORD=xxxxxxx
MAIL_ENCRYPTION=null

Ahora estamos listos para hacer una clase de mailable para esto, tenemos que ir a tiempo y escribir siguiendo el comando.

php artisan make:mail SendMail

Este comando creará el archivo SendMail.php dentro de App \ Mail \ SendMail.php. En esta clase tenemos que definir una propiedad con nombre $ datos, al usar esta propiedad podemos pasar datos en el momento de crear una nueva instancia de esta clase.

app/Mail/SendMail.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ValidateMail extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */

    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('mensaje');
    }
}

Hacer archivo de vista para el cuerpo del correo electrónico

En este marco, el contenido del cuerpo del correo electrónico se ha obtenido del archivo de vista A continuación, hemos creado un archivo de vista mailmessage.blade.php en la carpeta resources/views.

resources/views/mensaje.blade.php

<!DOCTYPE html>
<html>
 <head>
  <title>Message</title>
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
  <!-- Styles -->
  <style>
      html, body {
          background-color: #fff;
          color: #636b6f;
          font-family: 'Nunito', sans-serif;
          font-weight: 200;
          height: 100vh;
          margin: 0;
      }
      .content { text-align: center; }
      .title { font-size: 84px; }
  </style>
 </head>
 <body>
  <br />
  <div class="container box" style="width: 970px;">
   <h1 style="text-align:center;"> {{ $data['name'] }} </h1>
   <h3 align="center">{{ $data['message'] }}</h3>
  </div>
 </body>
</html>

Crear una función para enviar en el controlador


use App\Mail\SendMail;
use Illuminate\Support\Facades\Mail;

public function send(Request $request)
{
  $this->validate($request, [
      'name'     =>  'required',
      'email'  =>  'required|email',
      'message' =>  'required'
     ]);
     
   $data = array(
        'name'      =>  $request->input('name'),
        'message'   =>   $request->input('message')
    );

    $email = $request->input('email');

  Mail::to($email)->send(new SendMail($data));

  return back()->with('success', 'Enviado exitosamente!');

}

Aquí ¿Cómo podemos enviar un correo electrónico con el código Laravel? Ahora tenemos que ejecutar la aplicación Laravel, para esto tenemos que ir a la terminal y escribir el siguiente comando.

php artisan serve
Un comentario

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *