Como enviar email en laravel 9

Como enviar email en laravel 9

luilliWeb

Ing. Luis Moreno

Senior Full-Stack Developer.

laravel tiene una forma de envio muy comoda que permite una exelente manipulacion y control de los correos que se quieran enviar y aqui te mostrare como debes configurar tu laravel 9 para que puedas enviarlos

Asumiendo que ya tienes un laravel 9 instalado y activo, partire de este punto, de no tener laravel instalado te invito a que vallas a mi otro articulo para que hagas ese proceso y puedes reanudar dsde este punto.

Configurar SMTP en ambiente de desarrollo con Mailtrap

Si estas trabajando en ambiente de desarrollo y nesesitas configurar el envio de correo lo ideal es que prepares un entorno de desarrollo que permita hacer tus pruebas sin molestar tus clientes o amigos con correos basura y lo mejor en estos escenarios es usar Mailtrap; esta herramienta ademas de ser muy facil de usar es muy comoda para este tipo de actividades, siendo la mas usada por desarrolladores en modo desarrollo y aca te explicare como debes configurarla

Pasos para configurar Mailtrap

  • Creas una cuenta en mailtrap, o si ya tienes te logueas
  • creas tu bandeja de entrada
  • vas a configuracion y luego precionas en ver credenciales

Configuracion de mailtrap en laravel

Nesesitamos tener nuestro archivo .env y nuestro panel de credenciales abiertos para proceder a configurar el laravel:

  • vas a ir a la raiz de tu proyecto en laravel y vas abrir tu archivo .env y vas a colocar tus datos de acceso proporcionados por mailtrap
              
              
                MAIL_MAILER=smtp
                MAIL_HOST=smtp.mailtrap.io
                MAIL_PORT=2525
                MAIL_USERNAME=d295bff12021
                MAIL_PASSWORD=11b1aea9valores
                MAIL_ENCRYPTION=null
                MAIL_FROM_ADDRESS=administracion@moreno.website
                MAIL_FROM_NAME="${APP_NAME}"
    
             
            
  • Debes abrir tus credenciales de mailtrap e ir asignandoselo a tu archivos de configuracion .env de laravel 9

Enviar emails tomando datos de una Base de Datos en Laravel 9

debemos crear nuestro modelo, controlador y migraciones para poder preparar el entorno y los metodos a usar para consultar base de datos

Crear modelo y migracion en laravel 9

en nuestra linea de comandos ingresamos el siguiente comando de artisan
          
          
               php artisan make:model cotizacion -m

         
        

Crear campos de base de datos en database/migrations

Los campos lo configuraremos como string , pero hay mas tipos de datos el cual se pueden usar; y que puedes elegir a gusto cual nesesitas:

          
          
               
  

              use Illuminate\Database\Migrations\Migration;
              use Illuminate\Database\Schema\Blueprint;
              use Illuminate\Support\Facades\Schema;

              class CreateCotizacionsTable extends Migration
              {

                  public function up()
                  {
                      Schema::create('cotizacions', function (Blueprint $table) {
                          $table->id();
                          $table->string('correo');
                          $table->string('nombre')->nullable();;
                          $table->string('web')->nullable();;
                          $table->string('telefono')->nullable();;
                          $table->string('clacificacion')->nullable();;
                          $table->string('descripcion')->nullable();;
                          $table->timestamps();
                      });
                  }

                  public function down()
                  {
                      Schema::dropIfExists('cotizacions');
                  }
              }


         
        

Creación de tablas con el sistema de migraciones de laravel 9

          
          
               php artisan migrate


         
        

Configuramos nuestro modelo

recuerda que debes tomar en cuenta protected $fillable para que al momento de guardar no te de error. debes indicar cuales son los campos que quieres que se guarden

          
          
              namespace App\Models;

              use Illuminate\Database\Eloquent\Factories\HasFactory;
              use Illuminate\Database\Eloquent\Model;

              class cotizacion extends Model
              {
                  use HasFactory;

                  protected $fillable =[
                      'correo',
                      'nombre',
                      'web',
                      'telefono',
                      'clacificacion',
                      'descripcion'
                  ];
              }



         
        

crear rutas y usar elocuent de laravel 9

vamos a ir directamente al archivo Routes/web.php y crearemos una ruta, en cual definiremos de la siguiente manera:

          
              
              use Illuminate\Foundation\Application;
              use Illuminate\Support\Facades\Route;
              use App\Mail\suscriptormail;
              use Illuminate\Support\Facades\Mail;
              use App\Models\cotizacion;



              Route::get('administracion/suscriptores/corrreos/enviar', function () {


              $suscriptores = cotizacion::latest()->get();

              foreach ($suscriptores as $key ) {

                  $mailable = new suscriptormail($key);
                  Mail::to($key->correo)->send($mailable);
              }


              return "correo enviado con exito";
              });


         
        

es importante que incluyas, asi como esta arriba para que pueda funcionar:

          

                use App\Mail\suscriptormail;
                use Illuminate\Support\Facades\Mail;
                use App\Models\cotizacion;



         
        

Creación y uso de controlador de email

una vez ingreses este comando con el nombre que quieras, se te crea una carpeta llamada app/Mail donde se creara a su vez un archivo que en mi caso se llama suscriptormail y que debemos configurar
          

          
              php artisan make:mail suscriptormail


         
        

En este punto el templante navidad y su carpeta no existen , pero se crearan en el siguiente paso asi que ten en cuenta ese detalle por si quieres coloar otro nombre puedas considerar esto cuando empesemos con este punto.

          

namespace App\Mail;

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

class suscriptormail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($key)
    {
        $this->key = $key;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {

        $this->view('mails.navidad')->with([
                  'key' => $this->key
                ]);
      
    }
}

         
        

creación de templante con HTML personalizado

usando el motor de plantillas blade de laravel podemos personalizar y construir un lindo templante usando los datos que nos proporciona nuestro controlador y el resultado lo podemos ver aqui:

ejemplo de html personalizado en nuestro mail:

          

               

Hola {{ $key->nombre }}, Si tu web: {{$key->web }}, tiene un problema, puedes seguir contando con mi apoyo

una vez configurado todo queda probar como funciona

          

            php artisan serve


         
        

Copiamos nuestro link que genera en terminal y lo ejecutamos en nuestro navegador

Hay muchas cosas por mejorar pero el correo se manda y el ejemplo te puede servir si quieres aprender a como enviar un correo con laravel 9 y pasandole parametros de base de datos

si reviso mi mailtrap podras notar que ya me llego el correo y eso significa que todo quedo correctamente configurado y listo para pasar a produccion :). te recomiendo que te descargues una plantilla bonita y ya le pasas valores de base de datos

guarde unos datos en base de datoas para hacer pruebas

fijate que son los mismos, lo cual significa que la plantilla se esta rellenando de base de datos y todo quedo correctamente




Comentar