Taula de continguts
Laravel
Si voleu desplegar aplicacions dins d'un contenidor, teniu una explicació a https://help.clouding.io/hc/en-us/articles/13590007627164-How-to-Deploy-Laravel-with-Docker-on-Ubuntu-22-04
Tasques periòdiques
Laravel inclou dins del seu framework un gestor de tasques periòdiques molt potent https://laravel.com/docs/11.x/scheduling, ara bé, perquè funcioni s'ha de configurar el cron del servidor seguint les indicacions de https://laravel.com/docs/11.x/scheduling#running-the-scheduler
Enviar emails dinàmics amb PHPmailer & Laravel (amb una plantilla blade)
Si només volem enviar un mail des de codi php «simple» hi ha l'article sobre correus que explica com crear un compte de correu al labs i com utilitzar-lo des de php.
Per poder utilitzar PHPmailer, el primer cop haurem d'instal·lar la dependència amb composer de la següent manera:
composer require phpmailer/phpmailer
Després de fer la instal·lació de la dependència haurem d'anar a l'arxiu api.php que està en la següent ruta:
back/elTeuNomDeProjecte/routes/api.php
Dins d'aquest arxiu haurem de crear un endpoind e importa el controlador que hem creat per poder enviar el mail i també afegir la view perquè l'usuari pugui veure el contingut del mail.
Per crear un controlador a Laravel es fa de la següent manera:
php artisan make:controller ElNomDelTeuController
Arxiu api.php.
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\ElNomDelTeuController; Route::post('/sendEmail',[ElNomDelTeuController::class, 'sendEmail']); Route::get('/view', function () { return view('NomDelDirectori.NomDelBlade.blade.php', ['message' => 'Este es un mensaje dinámico']); });
Per poder crear una view per l'email haurem d'anar a la següent ruta, farem botó dret «Nova carpeta», dintre de la nova carpeta tornarem a fer botó dret «Nou arxiu» i li posem un nom, per exemple ElMeuBlade.blade.php:
back/elTeuNomDeProjecte/resources
Les views es fan amb HTML. Un exemple d'una view:
IMPORTANT!. Tindre en compte els noms dels objectes i variables si no, sortirà un text per defecte.
<!DOCTYPE html> <html> <head> <title>{{ $subject ?? 'Example App' }}</title> <style> body { font-family: 'Arial', sans-serif; background-color: #F4F4F4; color: #333; margin: 0; padding: 0; line-height: 1.6; } .container { max-width: 600px; margin: 50px auto; padding: 20px; background-color: #e3e3e3; border-radius: 8px; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); text-align: center; } h4 { font-size: 1.5rem; font-weight: bold; color: #58C4DC; margin-bottom: 20px; } p { margin-bottom: 15px; color: #555; } footer { margin-top: 30px; font-size: 0.875rem; color: #888; } </style> </head> <body> <div class="container"> <h4>{{ $subject ?? 'Example App' }}</h4> <p>Bienvenido: <strong>{{ $name ?? 'User' }} {{$lastname ?? 'User' }}</strong></p> <p>Pulsa en el siguiente enlace para acceder al cuestionario:</p> <p> <a href="{{ $quizUrl ?? '#' }}" style="text-decoration: none; color: #58C4DC; font-weight: bold;" onmouseover="this.style.textDecoration='underline'" onmouseout="this.style.textDecoration='none'"> Acceder al cuestionario </a> </p> <footer> <p>© {{ date('Y') }} Example App. Todos los derechos reservados.</p> </footer> </div> </body> </html>
Els controladors es troben en la següent ruta:
back/elTeuNomDeProjecte/app/Http/Controllers/ElNomDelTeuController
Arxiu ElNomDelTeuController.php.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\View; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; class NameController extends Controller { public function sendEmail(Request $request) { // Validar les dades rebudes $validatedData = $request->validate([ 'subject' => 'required|string', 'message' => 'required|string', 'to' => 'required|array', 'to.*' => 'required|email', // Cada element hi ha que se valid ]); // Configurar PHPMailer $mail = new PHPMailer(true); try { // Configuració del servidor SMTP $mail->isSMTP(); $mail->CharSet = 'UTF-8'; $mail->Host = env("MAIL_HOST"); $mail->SMTPAuth = true; $mail->Username = env("MAIL_USERNAME"); $mail->Password = env("MAIL_PASSWORD"); $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]; // Remitent $mail->setFrom('correu@example.com', 'Example App'); // Afegir el destinatari principal (es pot deixar buit si no hi ha principal) $mail->addAddress('correu@example.com'); // Este puede ser tu dirección de control // Afegir cada destinatari com BCC (còpia oculta) foreach ($validatedData['to'] as $recipient) { $mail->addBCC($recipient); } // En cas de tindre una vista (blade) la renderitzarem perquè l'usuari el vegi la informació // en el correu $htmlContent = View::make('email.notification', [ 'subject' => $validatedData['subject'], 'message' => $validatedData['message'], ])->render(); // Contingut del correu $mail->isHTML(true); $mail->Subject = $validatedData['subject']; $mail->Body = $htmlContent; // Enviar el correu $mail->send(); return response()->json([ 'message' => 'Email sent successfully' ]); } catch (Exception $e) { return response()->json([ 'error' => "Error sending email: {$mail->ErrorInfo}" ], 500); } } }
