Disable tạm thời send mail với Swiftmailer trên Symfony.

Khi đã dùng Symfony thì chắc ai cũng đã dùng qua Swiftmailer để gởi email, dưới đây mình xin bày cách cực kỳ đơn giản nhưng hiệu quả để tạm thời ngưng việc send email tránh spam user.

Chả là mình đang xây dựng mới một hệ thống quản các công ty, Hệ thống cũ đã có khoảng vài nghìn công ty và việc đăng ký cần phải gởi email để activate account. Mọi việc develop và test đã sẳn sàng, nhưng tới việc migrate data thì nhận thêm yêu cầu từ Boss là phải ngưng mọi tính năng liên quan đến gởi mail cho user. Mình cũng hơi băn khoăn 1 tí, định chơi kiểu dirty là đổi certificate để quăng ra lỗi khi send mail là xong, nhưng thấy kì kì, nên thôi :D.

Lọ mọ một hồi document của Swift Mailer trên symfony document mới thấy tính năng Spool Emails. Swift Mailer được cấu hình mặc định trên Symfony là sẽ tự động send mail lập tức khi gọi hàm send(), nhưng nó còn cho ta 1 chế độ khác là send async bằng command line php app/console swiftmailer:spool:send --env=prod.

OK, vậy là mọi chuyện sẽ được giải quyết nếu mình cho chạy sendmail async và ko chạy command line swiftmailer:spool:send.

Cấu hình đơn giản bằng cách thêm vào cấu hình cho spool trong file app/config/config.yml

swiftmailer:  
    transport:  "%mailer_transport%"
    host:       "%mailer_host%"
    username:   "%mailer_user%"
    password:   "%mailer_password%"
    port:       "%mailer_port%"
    encryption: "%mailer_encryption%"
    spool:
        type: "file"
        path: '%kernel.root_dir%/logs/spool'