Merhabalar, bu yazımda PHP Mail Açılıp Açılmadığını Kontrol Etmek işlemini yani PHP ile bir gönderdiğimiz bir mailin, gönderdiğimiz kişi tarafından açılıp açılmadığını nasıl kontrol edeceğimizi göreceğiz..
PHP Mail Açılıp Açılmadığını Kontrol Etmek
Bazen sistemlerimiz üzerinden toplu mailler atarız ve mail gönderdiğimiz kişilerin bu mailleri açıp açmadığını merak ederiz. Hatta bazı senaryolarda bilmemiz gerekir. Özellikle bir kampanya maili attıysak ve kişi bu maili açmadıysa bunu bilmemiz, tekrar mail gönderip göndermememize karar vermemizi sağlayabilir. Belki maili açtıysa ama bir etkileşimde bulunmadıysa neden etkileşimde bulunmadığını anlamak için çeşitli aksiyonlar alabiliriz.
Mesela bir mail attık kişi maili açmadıysa 3 gün sonra tekrar mail göndermek isteyebiliriz. Sonrasında o maili de açmadıysa, 1 hafta sonra tekrar mail atabiliriz. Kişi maili açtıysa ama tıklanmasını beklediğimiz butona tıklanmadıysa neden tıklanmadığını anlamak için beyin fırtınası yapabiliriz. Kişi maili açtıysa ve maildeki butona yani linke tıkladıysa ama gönderdiğimiz sayfada beklediğimiz etkileşimi yapmadıysa yine nedenlerini düşünebiliriz.
Bunun ilerisinde maili ne zaman açtığı ve etkileşimde bulunduysa o tarihi bildiğimiz durumlarda aradaki zaman farkına göre farklı aksiyonlar almak isteyebiliriz. Tüm bunların temelinde mailin açılıp açılmadığını anlamak yatıyor. Bu bahsettiğim aksiyonları yapan firmalar var. Artık biz de kendi sistemimizi hazırlayabiliriz.
Elbette bu bahsedeceğim yöntem %100 güvenilir değil ama yaptığım testlerde başarılı sonuçlar aldım. Bu işlemi yapmak aslında düşündüğümüzden daha basit. Öncelikle bize resim çıktısı veren bir php kodu lazım. 1×1 piksel ve beyaz renkli bir görsel.
Mail Açılma Durumu Kontrol Etmek
Şimdi bu görseli üretelim. Ben böyle bir algoritma kullanıyorum. Dosyaya da KontrolGorseliUret.php adı veriyorum.
Kodların detaylarına çok takılmadım. Görsel üretimi açısından daha kısa kodlar bulabilirsiniz. Bu kodlar biraz parametik olduğu için size gereksiz uzun gelebilir ama bu konumuzun dışında kalıyor. :)
<?php $setting = isset($_GET['s']) ? $_GET['s'] : "000_111_100_100"; $setting = explode("_", $setting); $img = array(); switch ($n = count($setting)) { case $n > 4: case 3: $setting[3] = $setting[2]; case 4: $img['width'] = (int) $setting[2]; $img['height'] = (int) $setting[3]; case 2: $img['color'] = $setting[1]; $img['background'] = $setting[0]; break; default: list($img['background'], $img['color'], $img['width'], $img['height']) = array('F', '0', 100, 100); break; } $background = explode(",", hex2rgb($img['background'])); $color = explode(",", hex2rgb($img['color'])); $width = empty($img['width']) ? 100 : $img['width']; $height = empty($img['height']) ? 100 : $img['height']; $string = (string) isset($_GET['t']) ? $_GET['t'] : $width . "x" . $height; header("Content-Type: image/png"); $image = @imagecreate($width, $height) or die("Cannot Initialize new GD image stream"); $background_color = imagecolorallocate($image, $background[0], $background[1], $background[2]); $text_color = imagecolorallocate($image, $color[0], $color[1], $color[2]); imagestring($image, 5, 5, 5, $string, $text_color); imagepng($image); imagedestroy($image); function hex2rgb($hex) { // Copied $hex = str_replace("#", "", $hex); switch (strlen($hex)) { case 1: $hex = $hex . $hex; case 2: $r = hexdec($hex); $g = hexdec($hex); $b = hexdec($hex); break; case 3: $r = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1)); $g = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1)); $b = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1)); break; default: $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); break; } $rgb = array($r, $g, $b); return implode(",", $rgb); }
Burada, bu dosyanın bir görsel gibi davranması gerekiyor. Bunu sağlayan kod şu satır.
header("Content-Type: image/png");
Dosyaya bir header bilgisi ekleyerek bu dosyanın bir görsel olduğunu söylüyoruz.
Sonrasında bir dosya daha hazırlıyoruz. Ancak bu dosya sizin takip işlemlerinizi yapacağınız dosya olacak ve aşağıdaki img nesnesine src olarak vereceğimiz dosya bu dosya olacak. Buna da MailCheck.php adı verelim. Kodlarınız kısmında malin açıldığı tarihi alabilirsiniz. URL’e eklediğiniz GET parametrelerini okuyup, mesela mail gönderdiğiniz kişini mail adresini parametre olarak verebilir ve hangi mail adresine gönderilen mailin açıldığını takip etmek için kullanabilirsiniz. Tabi burada bu bilgileri DB’ye kayıt etmelisiniz.
<?php // kodlarınız // kodlarınız // kodlarınız include_once("tam/dosya/yolunuz/KontrolGorseliUret.php"); ?>
Şimdi görseli üreten dosyamızı bu işlemi yöneteceğimiz sayfaya include ettiğimiz için, bu dosya da bir görsel gibi davranacak. Ama görsel üretilene kadar bizim işlemlerimiz yapılacak.
Şuanda kontrol dosyamız hazır. Bunu göndereceğimiz mail içerisine eklememiz gerekiyor. Burada ben, bir mail body template’i kullanıyorum. Bu template içinde bu url’i ekleyeceğim yere @TrackerURL@ şeklinde bir key bırakıyorum. Maili göndermeden önce template’i okuyup, takip bağlantısını üretip, html kodları içerisinde yerleştirdiğim @TrackerURL@ key’ini replace ederek url ile değiştiyorum. Burada url’e GET parametreleri ekleyebilir ve MailCheck.php dosyasında bu parametreleri okuyabilirsiniz.
$template = file_get_contents("gonderilecek/mail/template/dosyasının/yolu/GonderilecekMailTemplate.html"); $trackURL= "https://domain.com/MailCheck.php?yourParameter=parameter"; $template = str_replace('@TrackerURL@', $value, $template);
Sonrasında bu template’i mail’in body’si olarak gönderiyorsunuz. Kullanıcı maili açtığı anda bu url bir görsel olduğunu söylediği için url çalışacak ve biz mailin açıldığını anlayacağız.
Burada HTML dosyasında img olarak ekleyeceğiniz hali şöyle olacak.
Mail template’inde img bu şekilde olacak.
<img src="@TrackerURL@" />
Sonra bu keyi değiştireceğiz ve giden mailde şu halde olacak.
<img src="https://domain.com/MailCheck.php?yourParameter=parameter" />
Önemli NOT: Bu img’i mailin alt kısımlarında kalacak şekilde ekleyin. En üstlere eklerseniz, kullanıcı mail uygulamasını açtığında, mail listesinde, başlık altında çıkan açıklama alanında üretilmeye çalışıp kodları çalıştırıyor. Bu yüzden kullanıcı mail uygulamasını açtığında ve mailler o listeye yüklendiği anda mail açılmış gibi oluyor.
PHP Mail Açılıp Açılmadığını Kontrol Etmek yazımızda bu kadardı arkadaşlar. Umarım faydalı olmuştur. Diğer yazılarda görüşmek üzere.
PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Tüm PHP yazılarım için tıklayabilirsiniz.
Discord sunucuma katılmayı unutmayın. :D Tüm bağlantılar için Linktree…
Kodla kalın. :)