1

Estoy tratando de crear un cron job que envie un correo a los usuarios que estan registrados en una app que corre en PHP con Laravel y tengo esta clase que funciona para el proposito, pero no logro hacer que la vista se renderize correctamente, el View::make me devuelve el codigo sin construir el header y footer de la plantilla de correo y sin sustituir las variables, alguna idea de como hacerlo? les agradezco mucho por su atencion.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\User;
use Illuminate\Support\Facades\View;
use App\Services\PHPMailerWrapper;

class SendEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'email:send';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send email to all users';

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

    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle(PHPMailerWrapper $phpMailerWrapper)
    {
        $mailer = $phpMailerWrapper->mailer();
        try {          
          $users = User::all();

          if ($users->isEmpty()) {
            $this->info('No users found');
            return;
          }          

          foreach ($users as $user) {
            $data = [
              'firstName' => $user->name,
              'lastName' => $user->lastname,
            ];

            $template = $this->buildTemplate($data);

            $mailer->setFrom('[email protected]', 'Support');
            $mailer->addAddress($user->email, $user->name);

            $mailer->isHTML(true);
            $mailer->Subject = 'My Email Template';
            $mailer->Body = $template;

            $mailer->send();
          }

          $this->info('Email sent successfully');
        } catch (\Exception $e) {
          $this->error('Email could not be sent. Error: ' . $e->getMessage());
        }        
    }

    public function buildTemplate ($data)
    {
      return View::make('email.my-template', $data);
    }
}

Lo que se recibe resulta ser:

@extends('layouts.email') @section('content')

Email title

Hi {{ $firstName }} {{ $lastName }},

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

If you believe this email was sent to you in error, please disregard it, for any questions or concerns, please don't hesitate to contact our support team at: [email protected]

@endsection
1
  • Hola esto tiene que ver con php y laravel directamente, no tiene nada que ver con ls otras etiquetas. el 7 may. a las 19:14

1 respuesta 1

0

Revisando con mas detalle y tiempo, encontre dos errores en la implementacion y se los dejo por si les llega a suceder:

1.- Agregar metodo render a la vista

    public function buildTemplate ($data)
    {
      $view = View::make('email.password-reset-reminder', $data)->render();           
      return $view;
    }

2.- Revisar plantilla de correo, por error al guardarla no la guardé con la extension .blade.php entonces no resolvia la plantilla de manera correcta.

Tu Respuesta

By clicking “Publica tu respuesta”, you agree to our terms of service and acknowledge you have read our privacy policy.

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.