Kısaca
Kısaca
- Laravel’in kendi mail olaylarını kullanarak giden postaları kaydedebilirsiniz — gönderildi, teslim edildi, açıldı, tıklandı — SaaS ESP gerektirmez.
-
MessageSending/MessageSentolayları, gönderim tarafında kancaları sağlar; bir izleme pikseli açılan postaları takip eder; yeniden yazılan bağlantılar tıklama işlemlerini ele alır. - Tüm süreci bir runtime toggle ile koruyun, böylece dağıtım yapmadan her ortamda kapatabilirsiniz.
- Önemli bir nokta: Piksel aracılığıyla “açıldı” ifadesi kesin bir bilgi değildir; sinyalin ne anlama geldiğini bilin.
İki Gönderim Olayı
İki Gönderim Olayı
Laravel, bir mesaj iletimden önce MessageSending ve sonrasında MessageSent olaylarını tetikler. İkisini dinleyerek, her giden e-posta için kalıcı bir kayıt elde edersiniz — alıcı, konu, üretilen mesaj kimliği — mailables’lar üzerinde herhangi bir değişiklik yapmadan.
class StoreMessageSending
{
public function handle(MessageSending $event): void
{
if (! MailTracking::enabled()) {
return; // runtime toggle — dağıtım olmadan kapatılır
}
$event->message->getHeaders()->addTextHeader('X-Mail-Id', (string) Str::uuid());
}
}
Kendi kimliğinizi bir başlıkta damgalamanız, açılan ve tıklanan geri çağırmaları daha sonra tam doğru mesajla ilişkilendirmenizi sağlar. Her iki dinleyiciyi sağlayıcıda kaydederseniz, bir mail geçmişi tablosu kendiliğinden dolmaya başlar.
Açılma: Dürüst Bir Piksel
Açılma: Dürüst Bir Piksel
Açılma, HTML gövdesinin sonuna yerleştirilen 1×1 saydam bir resimdir ve izlenen bir yola işaret eder. Mail istemcisi bunu yüklediğinde, noktanız mesajı açılmış olarak işaretler ve pikseli döner.
Route::get('mail/o/{mailId}', function (string $mailId) {
MailHistory::where(, $mailId)->update([=> now()]);
return response(base64_decode(self::PIXEL), 200)
->header(, );
})->name();
Bu ölçümle ilgili dürüst olun. Birçok istemci uzaktan resimleri engeller, Apple Mail Privacy Protection bunları önceden yükler (yanlış pozitifler) ve düz metin okuyucuları bunu asla yüklemez. “Açılmış” bir yumuşak sinyal olup, kesin bir bilgi değildir. Takip edin, ancak buna dayalı faturalama oluşturmayın.
Tıklamalar: Yeniden Yönlendirmeler Üzerinden Bağlantıları Yeniden Yazma
Tıklamalar: Yeniden Yönlendirmeler Üzerinden Bağlantıları Yeniden Yazma
Tıklamalar için, giden bağlantıları, vuruşu kaydeden ve ardından gerçek hedefe 302 yönlendiren bir takip rotasına geçecek şekilde yeniden yazın.
Route::get(, function (Request $request, string $mailId) {
MailHistory::where(, $mailId)->update([=> now()]);
return redirect()->away($request->query());
})->name();
Bir güvenlik notu: u hedefini doğrulayın veya imzalayın. Açık yönlendirici bir phishing hediye olur. Bağlantınızı yeniden yazarken URL’yi imzalayın ve imza doğrulama işlemi başarısız olan her şeyi reddedin — rastgele kullanıcı tarafından sağlanan URL’lere yönlendirmeyin.
Neden Runtime Toggle Önemlidir
Neden Runtime Toggle Önemlidir
Takip, bir kod kararı değil, bir politika kararıdır. Bazı ortamlar (veya bazı alıcılar, yasal olarak) izlenmemelidir. Bir runtime bayrağı — sistem ayarı, boot aşaması sırasında .env okuma değil — takibi anında kapatma ve değişiklikleri denetleme imkanı sunar, dağıtım göndermeden.
it(, function () {
MailTracking::disable();
Mail::to()->send(new WelcomeMail());
expect(MailHistory::count())->toBe(0);
});
Sinyallerin Gerçek Anlamı
Sinyallerin Gerçek Anlamı
| Sinyal | Nasıl | Güven Seviyesi |
|---|---|---|
| Gönderildi | MessageSending tetiklendi | Yüksek — onu ileticiye teslim ettiğinizi biliyorsunuz |
| Teslim Edildi | Taşıyıcı kabul etti (geri dönme yok) | Orta — kabul ≠ gelen kutusuna düştü |
| Açıldı | İzleme pikseli yüklendi | Düşük — birçok istemci tarafından engellenmiş / önceden yüklenmiş |
| Tıklandı | Yönlendirici vuruldu | Yüksek — bir insan (veya bot) bağlantıyı takip etti |
Çıkarım
Çıkarım
Dış bir mail hizmetine ihtiyacınız yok — Laravel’in mail olayları, bir piksel ve imzalı bir yönlendirici, çoğu kez bunun için yeterlidir. Sinyalleri dürüstçe etiketleyin (açılmalar yanıltıcıdır, tıklamalar doğruyu gösterir), yönlendirme hedeflerinizi imzalayın ve tüm süreci bir runtime toggles’ın arkasına koyun, böylece izleme bir seçim olur, zorunlu bir varsayılan değil.
Kaynak: Orijinal Makale


