2017-04-13 3 views
0

Je veux envoyer des courriels à divers utilisateurs en fonction des horaires qu'ils ont définis.Laravel - Envoyer un courrier à l'avenir en fonction de la condition

Je l'ai lu beanstalkd, queues et Delayed Message Queueing et maintenant il semble approprié dans:

$when = Carbon::now()->addMinutes($minutes); // i can calculate minutes at this moment 
\Mail::to($user)->later($when, new \App\Mail\TestMail); 

Mais je ne suis pas tout à fait sûr sur quelques petites choses:

  1. L'utilisateur peut annuler une calendrier futur. Dans ce cas, comment puis-je annuler un e-mail supposé être envoyé à l'avenir? Puis-je définir une condition quelque part qui est vérifiée avant d'envoyer l'e-mail réel? Essayé return false sur la méthode handle de \App\Mail\TestMail et il a commencé à lancer erreur

  2. Suis-je utiliser la bonne approche. Je lis aussi sur Scheduler mais je ne comprends pas comment je vais annuler vos futurs emails (si elles doivent être)

+0

créer un champ db dans la table des emails comme is_active si son un contre un email email devrait aller sinon si l'utilisateur se désabonne ou arrête de l'obtenir devrait être 0 donc vous pouvez utiliser la condition sur la base is_active. –

Répondre

1

Il y a plusieurs façons d'aborder ce sujet. Personnellement, je mettrais les emails en file d'attente sur un calendrier plutôt que de les ajouter à la file d'attente pour plus tard.

Vous exécutez une tâche planifiée une fois par jour (ou heure ou minute) qui exécute une requête pour sélectionner les utilisateurs nécessitant un courrier électronique, puis en utilisant ce jeu de résultats, vous ajoutez un travail à chaque file d'attente. De cette façon, si un utilisateur se désinscrit, vous n'avez pas à vous soucier de supprimer les tâches déjà mises en file d'attente.

Laravel offre une interface assez agréable pour créer des travaux planifiés (https://laravel.com/docs/5.4/scheduling) qui peuvent ensuite être appelés via un cronjob.