Skip to content

Mails (Utilisation du Spool)

Florent SCHILDKNECHT edited this page Jan 27, 2014 · 1 revision

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 :

Configuration

# 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.

Ligne de commande (depuis la racine du projet [/var/www/onyx]) :

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.