-
Notifications
You must be signed in to change notification settings - Fork 3
Mails (Utilisation du Spool)
Les mails sous symfony2 peuvent être envoyés directement, ou bien être stockés dans un "spool" pour être envoyés par une tâche planifiée. Nous utiliserons la seconde méthode pour soulager le serveur.
Tout d'abord, configurer l'envoi de mails localement :
# app/config/parameters.yml
parameters:
# [...]
mailer_transport: gmail
mailer_host:
mailer_user: [email protected]
mailer_password: votre-mot-de-passe
# app/config/config.yml
# Swiftmailer Configuration
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
spool:
type: file
path: %kernel.root_dir%/cron/mails/spool
Dans cet exemple, GMAIL est utilisé comme serveur mail local (SMTP). Plus d'informations sur la configuration sont disponibles ici
Dans la configuration de SwiftMailer, on indique vouloir l'utilisation d'un spool. Pour préférer des messages à la volée, il suffit de retirer la partie spool, car il est désactivé par défaut.
Dans un environnement de développement, il est possible d'utiliser une commande pour simuler le CRON et envoyer les mails contenus dans le spool.
php app/console swiftmailer:spool:send
# Cette méthode peut consommer pas mal de ressources et de temps en fonction de la méthode d'envoi des mails, des options sont disponibles :
# --message-limit=10 --> Limite à 10 le nombre maximal d'emails envoyés
# --time-limit=10 --> Limite à 10 secondes le temps de traitement du spool
# --env=prod --> Indique l'environnement comme production, pour tester éventuellement
Dans un environnement de production, même s'il est possible d'embaucher un chinois pour exécuter le spool manuellement avec une commande, il peut être préférable de configurer un CRON toutes les 5, 10 ou 15 minutes pour exécuter la commande.
*/5 * * * * php /absolute-path-to-project-root-folder/app/console swiftmailer:spool:send --env=prod
Dans cet exemple, on appelle la commande toutes les 5 minutes. Attention, il faut bien mettre le chemin absolu du fichier app/console afin que le CRON s'exécute.