MailTracker, Laravel’dan çıkan tüm e-postalara izleme kodu eklemek için kullanılır ve gönderilen e-postaların veritabanında saklanmasını sağlar. Ayrıca, gönderilen e-postaları görüntülemek için bir arayüz de mevcuttur.
NOT: Laravel 9.x sürümü kullanıyorsanız, 9.6.0 veya daha yüksek bir sürümde olmalısınız.
NOT: Laravel 9.x sürümü kullanıyorsanız, 9.6.0 veya daha yüksek bir sürümde olmalısınız.
1.0’dan Yükseltme
1.0’dan Yükseltme
Öncelikle, aşağıdaki komutu çalıştırarak 2.0 sürümüne güncelleyin:
composer require zanysoft/mail-tracker ~2.0
Eski bir sürümden güncelleniyorsanız, yapılandırma dosyanızı güncelleyip yeni migration’ları çalıştırmanız gerekecek. En iyi sonuçlar için, özelleştirdiğiniz değerleri geri yüklemek üzere config/mail-tracker.php dosyanızın bir yedeğini alın ve resources/views/vendor/emailTrackingViews bölümündeki görünümleri (varsa) silin ve ardından aşağıdaki komutu çalıştırın:
php artisan vendor:publish --provider="ZanySoft\MailTracker\MailTrackerServiceProvider" --force
php artisan migrate
Kurulum
Kurulum
Composer üzerinden kurulum:
composer require zanysoft/mail-tracker
Yapılandırma dosyasını ve migration’ları yayınlayın:
php artisan vendor:publish --provider="ZanySoft\MailTracker\MailTrackerServiceProvider"
Migration’ları çalıştırın:
php artisan migrate
Not: Modellerinizi saklamak için farklı bir bağlantı kullanmak isterseniz, migration’lardan önce mail-tracker.php yapılandırma girişini connection olarak güncellemeyi unutmayın.
Kullanım
Kullanım
Kurulum tamamlandıktan sonra, tüm giden e-postalar veritabanına kaydedilecektir. config/mail-tracker.php dosyasında mevcut olan yapılandırma seçenekleri şunlardır:
- name: Uygulama adınızı ayarlayın.
- inject-pixel: HTML e-postalara izleme pikseli eklemek için true olarak ayarlayın.
- track-links: Tüm bağlantı URL’lerini izleme bağlantısı içerecek şekilde değiştirmek için true olarak ayarlayın.
- expire-days: E-posta veritabanında ne kadar süre kalacak? Sıfır ayarlarsanız e-postalar asla silinmez.
- route: İzleme URL’leri için yol bilgisi. Ön ek ve middleware olarak ayarlayın.
- admin-route: Admin için yol bilgisi. Ön ek ve middleware olarak ayarlayın.
- admin-template: Admin Paneli ve Görünümler için parametreler. Mevcut Admin Panelinizi MailTracker ile entegre edebilirsiniz.
- date-format: Admin Panelinde tarihleri görüntülemek için formatı tanımlayabilirsiniz.
- content-max-size: İçerik database alanı için varsayılan maksimum uzunluk sınırını değiştirebilirsiniz.
E-postaların izlenmesini istemiyorsanız, mesajınıza X-No-Track header’ını ekleyin. Bu header, izleme işleminden kaçınmak için rastgele bir string içerir. E-posta gönderilmeden önce header kaldırılacaktır.
\Mail::send('email.test', [], function ($message) {
// ... diğer ayarlar
$message->getHeaders()->addTextHeader('X-No-Track', Str::random(10));
});
E-posta İçeriklerini Dosya Sisteminde Saklama
E-posta İçeriklerini Dosya Sisteminde Saklama
Varsayılan olarak, e-postaların içeriği veritabanındaki content sütununda saklanır. E-postalar fazla sayıda gönderiliyorsa, bu çok fazla bellek tüketebilir. Yapılandırmanıza göre içeriğin dosya sistemine kaydedilmesini sağlayabilirsiniz.
'log-content-strategy' => 'filesystem',
'tracker-filesystem' => null,
'tracker-filesystem-folder' => 'mail-tracker',
Dosya sistemini kullanmak için log-content-strategy‘yi database‘den filesystem‘e değiştirmeniz gerekir. tracker-filesystem ile diskinizi ve tracker-filesystem-folder ile dosyanın saklanacağı klasörü belirleyebilirsiniz.
Modelleri Geçersiz Kılma
Modelleri Geçersiz Kılma
Bazı durumlarda yerleşik modelleri geçersiz kılmak isteyebilirsiniz. Bunu AppServiceProvider içinde kolayca yapabilirsiniz:
MailTracker::useSentEmailModel(YourOwnSentEmailModel::class);
MailTracker::useSentEmailUrlClickedModel(YourOwnSentEmailUrlClickedModel::class);
Modelinizin SentEmailModel veya SentEmailUrlClickedModel arayüzünü uygulaması gerekir. Bu paket, kendi modellerinizi kolayca uygulamak için “traits” sunar ve mevcut kodu tekrar yazmanıza gerek kalmaz.
use Illuminate\Database\Eloquent\Model;
use ZanySoft\MailTracker\Concerns\IsSentEmailModel;
use ZanySoft\MailTracker\Contracts\SentEmailModel;
class OwnEmailSentModel extends Model implements SentEmailModel {
use IsSentEmailModel;
protected static $unguarded = true;
protected $casts = [
'meta' => 'collection',
'opened_at' => 'datetime',
'clicked_at' => 'datetime',
];
}
Belirli E-postalarda İzlemeyi Atlama
Belirli E-postalarda İzlemeyi Atlama
İzleme istemediğiniz belirli bir e-posta varsa, e-postanıza X-No-Track header’ını ekleyebilirsiniz. Bu, e-postanın izlenmesini engeller. Ayrıca Laravel 9’dan itibaren, Mailable sınıfınıza bir header metodu ekleyerek izleme pikselini ve tıklama izlemeyi durdurabilirsiniz:
public function headers() {
return [
'X-No-Track' => Str::random(10),
];
}
Antivirüs/Spam Filtreleri için Açık/Tıklama İzlemeyi Atlama
Antivirüs/Spam Filtreleri için Açık/Tıklama İzlemeyi Atlama
Bazı e-posta sunucuları, e-postaları teslim etmeden önce tarayabilir, bu da izleme pikselini veya tıklanan bağlantıları tetikleyebilir. Bunu yönetmek için ValidActionEvent içerisine bir olay dinleyicisi ekleyebilirsiniz:
class ValidUserListener {
public function handle(ValidActionEvent $event) {
if (in_array(request()->userAgent(), [
'Mozilla/5.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246 Mozilla/5.0'
])) {
$event->skip = true;
}
}
}
Olaylar
Olaylar
Bir e-posta gönderildiğinde, görüntülendiğinde veya bir bağlantı tıklandığında, izleme bilgileri ZanySoft\MailTracker\Model\SentEmail modeli kullanılarak veritabanında kaydedilir. Bu işlemler, e-posta topluca gönderildiğinde veritabanının aşırı yüklenmesini önlemek için sıralı işleri kullanır. İzleme olaylarını işleri ile yönetmek için mail-tracker.tracker-queue yapılandırma ayarını kullanabilirsiniz.
Bu olaylarda ek işleme yapmak isteyebilirsiniz. Olaylar aşağıdaki durumlarda tetiklenir:
- ZanySoft\MailTracker\Events\EmailSentEvent
- ZanySoft\MailTracker\Events\ViewEmailEvent
- ZanySoft\MailTracker\Events\LinkClickedEvent
Olay Dinleyicilerine Veri Gönderme
Olay Dinleyicilerine Veri Gönderme
Gönderilen bir e-postayı başka bir model ile ilişkilendirmek için çok sayıda senaryoda, e-postanın üst bilgisine bir header eklemek en iyi yoldur. İşte bir örnek:
public function handle(EmailSentEvent $event) {
$tracker = $event->sent_email;
$model_id = $tracker->getHeader('X-Model-ID');
$model_name = $tracker->getHeader('X-Model');
$model = app("App\\$model_name")->find($model_id);
// Model üzerinde izleme/bağlantı görevlerinizi gerçekleştirin.
}
Not etmelisiniz ki, e-postaya eklediğiniz üst bilgiler gönderilen mesajla birlikte gitmektedir, bu nedenle e-posta alıcılarınızın göreceği hiçbir veriyi saklamamalısınız.
İstisnalar
İstisnalar
Aşağıdaki istisnalar atılabilir. Bunları istisna dinleyicinizde görmezden gelebilir veya istediğiniz gibi işleyebilirsiniz:
- ZanySoft\MailTracker\Exceptions\BadUrlLink
Amazon SES Özellikleri
Amazon SES Özellikleri
Amazon SES kullanıyorsanız, izleme bilgilerinize ek bilgi ekleyebilirsiniz. SES kontrol panelinde SES bildirimlerini ayarladıktan sonra, konuda gereken URL’yi kopyalayıp abone olabilirsiniz. İsteğe bağlı olarak birden fazla abonelik ile işlemlerinizi özelleştirebilirsiniz.
Görünümler
Görünümler
php artisan vendor:publish komutunu çalıştırdığınızda, özelleştirebileceğiniz basit görünümler resources/views/vendor/emailTrackingViews dizinine eklenir.
Yönetim Paneli
Yönetim Paneli
MailTracker, dahili bir yönetim alanı ile birlikte gelir. Varsayılan yapılandırma, can:see-sent-emails middleware’ine arka planda gizlenmiştir. Ön tanımınızı değiştirebilir veya kendi kurallarınızı kullanabilirsiniz. Varsayılan ön ek ve admin yollarını tamamen devre dışı bırakmayı da seçebilirsiniz.
Yönetim paneli yol adı ‘mailTracker_Index’dir ve standart yol /email-manager altında bulunur. Yönetim menünüze dahil etmek için yol adlarını kullanabilirsiniz. Tüm gönderilen e-postaların, toplam açılma sayısının ve URL tıklama sayısının görüntülendiği ve hızlıca analiz yapılabileceği bir panel sunar.
Lisans
Lisans
MIT Lisansı (MIT). Daha fazla bilgi için Lisans Dosyasına bakın.
Kaynak: Orijinal Makale
- NOT: Laravel 9.x sürümü kullanıyorsanız, 9.6.0 veya daha yüksek bir sürümde olmalısınız.
- 1.0’dan Yükseltme
- Kurulum
- Kullanım
- Belirli E-postalarda İzlemeyi Atlama
- Antivirüs/Spam Filtreleri için Açık/Tıklama İzlemeyi Atlama
- Olaylar
- Olay Dinleyicilerine Veri Gönderme
- İstisnalar
- Amazon SES Özellikleri
- Görünümler
- Yönetim Paneli
- Lisans


