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
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
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); } } }