Documentazione piattaforma Gestione Domini Help

Sistema di Notifiche Email per la Gestione Domini

Introduzione

Questo sistema di notifiche email è progettato per gestire varie comunicazioni automatizzate relative ai domini. Utilizza un sistema di code per l'invio asincrono delle email, migliorando l'efficienza e la robustezza del processo di notifica.

Struttura del Sistema

Il sistema è composto da quattro componenti principali:

  1. Interfaccia (EmailNotificationServiceInterface)

  2. Servizio di Implementazione (EmailNotificationService)

  3. Modello della Coda Email (EmailQueue)

  4. Comando di Elaborazione della Coda (ProcessEmailQueue)

  5. Classe Mailable Generica (GenericEmail)

Interfaccia (EmailNotificationServiceInterface)

namespace App\Interfaces; interface EmailNotificationServiceInterface { public function sendActivationNotification(string $recipient, string $domainName): self; public function sendSuspensionNotification(string $recipient, string $domainName, string $reason): self; public function sendExpirationReminder(string $recipient, string $domainName, int $daysLeft): self; public function sendAutoRenewalNotification(string $recipient, string $domainName, string $renewalDate, float $price): self; public function sendDomainTransferNotification(string $recipient, string $domainName, string $status): self; public function sendDNSChangeNotification(string $recipient, string $domainName, array $changes): self; public function sendSuspiciousLoginNotification(string $recipient, string $accountName, string $ipAddress, string $dateTime): self; public function send(): void; }

Servizio di Implementazione (EmailNotificationService)

Questa classe implementa l'interfaccia e contiene la logica per la preparazione delle notifiche e l'inserimento nella coda.

namespace App\Services; use App\Interfaces\EmailNotificationServiceInterface; use App\Models\EmailQueue; class EmailNotificationService implements EmailNotificationServiceInterface { protected $recipient; protected $subject; protected $content; // Implementazione dei metodi di notifica... public function send(): void { EmailQueue::create([ 'recipient' => $this->recipient, 'subject' => $this->subject, 'content' => $this->content, 'status' => 'pending' ]); } }

Modello della Coda Email (EmailQueue)

namespace App\Models; use Illuminate\Database\Eloquent\Model; class EmailQueue extends Model { protected $fillable = [ 'recipient', 'subject', 'content', 'status', 'attempts', 'last_attempt_at', 'sent_at', 'error_message' ]; // ... altri metodi e relazioni ... }

Comando di Elaborazione della Coda (ProcessEmailQueue)

Questo comando Artisan elabora le email in coda:

namespace App\Console\Commands; use Illuminate\Console\Command; use App\Models\EmailQueue; use Illuminate\Support\Facades\Mail; use App\Mail\GenericEmail; class ProcessEmailQueue extends Command { protected $signature = 'emails:process'; public function handle() { // Logica per elaborare le email in coda } // ... altri metodi ... }

Classe Mailable Generica (GenericEmail)

namespace App\Mail; use Illuminate\Mail\Mailable; class GenericEmail extends Mailable { public $subject; public $htmlContent; public function __construct(string $subject, string $htmlContent) { $this->subject = $subject; $this->htmlContent = $htmlContent; } public function build() { return $this->subject($this->subject) ->html($this->htmlContent); } }

Flusso di Lavoro

  1. Preparazione della Notifica: Utilizzare EmailNotificationService per preparare il contenuto della notifica.

  2. Accodamento: Il metodo send() del servizio inserisce l'email nella coda.

  3. Elaborazione: Il comando ProcessEmailQueue elabora le email in coda periodicamente.

  4. Invio: Le email vengono inviate utilizzando la classe GenericEmail.

  5. Gestione degli Errori: Il sistema gestisce gli errori, ritenta l'invio e notifica gli amministratori in caso di problemi persistenti.

Utilizzo del Sistema

Esempio di utilizzo nel codice:

public function sendWelcomeEmail(EmailNotificationServiceInterface $notificationService, $userId) { $user = User::find($userId); $notificationService->sendActivationNotification($user->email, $user->domain)->send(); }

Configurazione del Cron Job

Assicurarsi di configurare un cron job per eseguire php artisan schedule:run ogni minuto. Questo garantirà l'elaborazione regolare della coda di email.

Best Practices

  • Mantenere il contenuto delle notifiche conciso e chiaro.

  • Utilizzare template Blade per il contenuto delle email per una migliore manutenibilità.

  • Monitorare regolarmente il log degli errori e le email fallite.

  • Testare tutte le nuove notifiche in un ambiente di staging prima del rilascio in produzione.

Risoluzione dei Problemi

  • Controllare i log dell'applicazione per errori dettagliati.

  • Verificare lo stato delle email nella tabella email_queue.

  • Assicurarsi che il cron job sia configurato correttamente e in esecuzione.

Last modified: 12 settembre 2024