Hướng dẫn xử lý bounce tracking trên Mautic

Theo nguyên tắc của email thông thường khi gửi email ra ngoài thì các địa chỉ người nhận không có thật hoặc vì lý do nào đó gửi đi bị lỗi (như mailbox bị đầy dung lượng, email của người nhận làm cho công ty A đã nghỉ và bị disable…). Thì hệ thống email server sẽ trả về thông báo cho người gửi rằng “email này không gửi đi được”.

Theo tài liệu của Mautic https://www.mautic.org/docs/en/emails/bounce_management.html thì họ sử dụng cơ chế “append” email address. Hiểu nôm na là Mautic sẽ không trả về địa chỉ người gửi mà họ sẽ trả về địa chỉ monitored email được khai báo tại Configurations -> Email Settings có định dạng là:

youremail+bounce_abc123@sender.com

Hoặc là format (đối với dạng unsubscribe request):

youremail+unsubscribe_abc123@sender.com
    Trong đó:

  • youremail: là địa chỉ của người gửi
  • bounce hoặc unsubscribe: tùy theo loại request là bounce hoặc unsubscribe thì Mautic sẽ quy định ngữ cảnh tại đây.
  • abc123: sẽ là một thông tin random do Mautic quy định

Vậy vấn đề ở đây là gì?

Hãy cùng xem ví dụ sau:

hello@vhost.vn gửi email test đến địa chỉ email: nghiattestmautic@gmail.com. Địa chỉ email nghiattestmautic@gmail.com là địa chỉ email không có thật.

mautic bounce tracking 2



[18/Dec/2019 11:57:32] Recv: Queue-ID: 5df9b1bc-0016475b, Service: SMTP, From: <bounced+bounce_5df9b1bc51c5b890999130@vhost.vn>, To: <nghiattestmautic@gmail.com>, Size: 1585, Sender-Host: 45.122.220.159, User: support@vhost.vn, SSL: yes, Subject: Hi Nghia, Msg-Id: <4e6c9caa1f8562d1b2a358053b7e2aa6@mautic.vhost.vn>
[18/Dec/2019 11:57:35] Recv: Queue-ID: 5df9b1bf-0016475c, Service: DSN, From: &lt;&gt;, To: &lt;<strong>bounced+bounce_5df9b1bc51c5b890999130@vhost.vn</strong>&gt;, Size: 2745, Report: failed, Subject: Returned email: Hi Nghia, Msg-Id: &lt;392058023-30881@mail.vhost.vn&gt;
[18/Dec/2019 11:57:35] Sent: Queue-ID: 5df9b1bc-0016475b, Recipient: &lt;nghiattestmautic@gmail.com&gt;, Result: failed, Status: 5.1.1 550-5.1.1 <strong>The email account that you tried to reach does not exist</strong>. Please try
[18/Dec/2019 11:57:35] 550-5.1.1 double-checking the recipient's email address for typos or
[18/Dec/2019 11:57:35] 550-5.1.1 unnecessary spaces. Learn more at
[18/Dec/2019 11:57:35] 550 5.1.1 https://support.google.com/mail/?p=NoSuchUser r20si1401965pgj.187 - gsmtp, Remote-Host: gmail-smtp-in.l.google.com, Msg-Id: &lt;4e6c9caa1f8562d1b2a358053b7e2aa6@mautic.vhost.vn&gt;
[18/Dec/2019 11:57:37] Sent: Queue-ID: 5df9b1bf-0016475c, Recipient: &lt;bounced+bounce_5df9b1bc51c5b890999130@vhost.vn&gt;, Result: failed, Status: 5.1.1 550-5.1.1 The email account that you tried to reach does not exist. Please try
[18/Dec/2019 11:57:37] 550-5.1.1 double-checking the recipient's email address for typos or
[18/Dec/2019 11:57:37] 550-5.1.1 unnecessary spaces. Learn more at
[18/Dec/2019 11:57:37] 550 5.1.1 https://support.google.com/mail/?p=NoSuchUser d21si1442568pgj.170 - gsmtp, Remote-Host: aspmx.l.google.com, Msg-Id: &lt;392058023-30881@mail.vhost.vn&gt;

 

Hệ thống gửi email đi và bị Google trả về báo email nghiattestmautic@gmail.com không tồn tại. Tuy nhiên hệ thống mail server của vHost.vn đang gửi trả về địa chỉ bounced+bounce_5df9b1bc51c5b890999130@vhost.vn và địa chỉ này không có thật vì vậy bạn không thể xử lý bước tiếp theo là phân loại địa chỉ email có tồn tại hay không.

Mautic hỗ trợ khai báo địa chỉ email trả về tại: Configurations -> Email Settings -> Custom return path (bounce) address như hình sau: bạn có thể khai báo bounced@vhost.vn tại ô này với Mautic để hệ thống Mautic nhận biết khi có email bị lỗi, vui lòng gửi về địa chỉ này.

Cùng kiểm tra lại lần thứ 2 (chưa xóa cache Mautic): hệ thống vẫn trả báo cáo về địa chỉ email bounced+bounce_5df9b63e346e2243643718@vhost.vn

 

Có thể do Mautic bị cache nên chưa cập nhập setting mới và bị lỗi này:

Thực hiện xóa cache:

 

Kiểm tra lại lần 3: hệ thống Mautic vẫn trả báo cáo về địa chỉ email: bounced+bounce_5df9b6c9f0353573460622@vhost.vn

Vậy lỗi nằm ở đâu?

Tính cho đến phiên bản v2.15.1 thì Mautic vẫn bị lỗi này mặc dù đã có nhiều người report. Để fix lỗi này cần chỉnh sửa lại code như sau:

Chỉnh sửa file: app/bundles/EmailBundle/Helper/MailHelper.php

Tìm đoạn code sau:

public function generateBounceEmail($idHash = null)
    {
        $monitoredEmail = false;

        if ($settings = $this-&gt;isMontoringEnabled('EmailBundle', 'bounces')) {
            // Append the bounce notation
            list($email, $domain) = explode('@', $settings['address']);
            $email .= '+bounce';
            if ($idHash || $this-&gt;idHash) {
                $email .= '_'.($idHash ?: $this-&gt;idHash);
            }
            $monitoredEmail = $email.'@'.$domain;
        }

        return $monitoredEmail;
    }

Và thay bằng:

public function generateBounceEmail($idHash = null)
    {
        $monitoredEmail = false;

        if ($settings = $this-&gt;isMontoringEnabled('EmailBundle', 'bounces')) {
            // Append the bounce notation
            list($email, $domain) = explode('@', $settings['address']);
            $email .= '+bounce';
            if ($idHash || $this-&gt;idHash) {
                $email .= '_'.($idHash ?: $this-&gt;idHash);
            }
            $monitoredEmail = $settings['address'];
        }

        return $monitoredEmail;
    }

Tương tự cho unsubscribe request:

Tìm đoạn code:

public function generateUnsubscribeEmail($idHash = null)
    {
        $monitoredEmail = false;

        if ($settings = $this-&gt;isMontoringEnabled('EmailBundle', 'unsubscribes')) {
            // Append the bounce notation
            list($email, $domain) = explode('@', $settings['address']);
            $email .= '+unsubscribe';
            if ($idHash || $this-&gt;idHash) {
                $email .= '_'.($idHash ?: $this-&gt;idHash);
            }
            $monitoredEmail = $email.'@'.$domain;
        }

        return $monitoredEmail;
    }

Và thay thế bằng:

public function generateUnsubscribeEmail($idHash = null)
    {
        $monitoredEmail = false;

        if ($settings = $this-&gt;isMontoringEnabled('EmailBundle', 'unsubscribes')) {
            // Append the bounce notation
            list($email, $domain) = explode('@', $settings['address']);
            $email .= '+unsubscribe';
            if ($idHash || $this-&gt;idHash) {
                $email .= '_'.($idHash ?: $this-&gt;idHash);
            }
            $monitoredEmail = $settings['address'];
        }

        return $monitoredEmail;
    }

Sau khi cập nhập xong thì hệ thống sẽ gửi về đúng địa chỉ bounced@vhost.vn mà bạn đã khai báo trên Mautic:

Lúc này bạn chỉ cần khai báo trong Configurations -> Email Settings đúng folder chứa các email trả về của địa chỉ bounced@vhost.vn để thống Mautic đọc email, xử lý và phân loại ra địa chỉ nào bị bounce, địa chỉ nào đã unsubscribe và địa chỉ nào có reply từ khách hàng.

 

Happy Mautic – Free Automation Marketing

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.