sumarsono.com
Take it with a grain of salt


Laravel Custom Message-ID Swift Mailer

Posted on

Laravel membawa swift mailer untuk fitur kirim email. Satu hal yang ngeselin dari Swift Mailer itu bagian message-ID, dia akan generate message-ID: [email protected]>. Imbasnya ketika melewati rspamd dia akan kena symbol MID_RHS_NOT_FQDN, memang tidak serta merta di flag sebagai spam, tapi cukup kesel aja pas lihat log. Haha. Solusinya, custom message-ID swift mailer, bagian domainnya yg di custom supaya jadi fqdn. Jadi hasil akhirnya akan berupa message-ID: [email protected].

Pertama, edit file config/mail.php tambahin:

'domain' => 'sumarsono.com',

Kedua, bikin listener baru pakai artisan:

php artisan make:listener -e 'Illuminate\Mail\Events\MessageSending' MessageSendingListener

Ketiga, edit listener yang tadi dibuat menjadi seperti berikut ini:

<?php
/**
 * Set the domain part in the message-id generated by Swift Mailer
 */

namespace App\Listeners;

use Illuminate\Mail\Events\MessageSending;
use Swift_Mime_IdGenerator;

class MessageSendingListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSending  $event
     * @return void
     */
    public function handle(MessageSending $event)
    {
        $event->message->setId((new Swift_Mime_IdGenerator(config('mail.domain')))->generateId());
    }
}

Keempat, daftarkan listener ke app/Providers/EventServiceProvider:

        protected $listen = [

           // [...]

            \Illuminate\Mail\Events\MessageSending::class => [
                 \App\Listeners\MessageSendingListener::class,
            ],
         ];

Selesai, coba kirim email maka message-ID sudah berubah menjadi Message-ID: [email protected]> dan rspamd udah gak komplain lagi.

Cool~