E-Posta Takibi - İsmail KIRBAŞ ile Web Sitesi Tasarımı
İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa]
 Site Haritası 
 
Site Map
Ana SayfaYeriniz | Ana Sayfa | Makaleler | Programcılık | JavaScript | E-Posta Takibi

Diğer Yazılar
Hızlı Aşağı Açılır (Drop-down) Menü


E-posta Gönderin Yorum Yazın
Güvenlik Kodu:1200Güvenlik Kodu:1200Güvenlik Kodu:1200Güvenlik Kodu:1200




En Son Okunan 10 Makale
  1. Toplam Kalite'nin Mayası: Tevazu
  2. Grafik
  3. İçerik Yönetiminde Strateji
  4. Grafik Tasarımda Plan ve Ürün Görselliği
  5. İnternette Marka Olmanın Anahtarları
  6. Sekmeli Menü 2
  7. Doğru İşe Doğru Eleman
  8. Lider Satış Yöneticisi
  9. Kolay ve İyi Öğrenme
  10. Bana Yaratıcılığı Öğretenin 40 yıl kölesi olurum
 
E-Posta Takibi>
Yazı Tipi KüçültYazı Tipi BüyütAna SayfaYazıcıdan ÇıkarPDF Belgesi Olarak GörüntüleFavorilerime EkleArkadaşıma Tavsiye EdeceğimRTF (Word Dokümanı) olarak görüntüle

HTML, JavaScript ve PHP ile E-Posta Takibi

Düşünün ki eski bir dostunuza ya da eski sevgilinize e-posta atıyorsunuz ama onun bu iletiyi okuyup okumadığından emin olamıyorsunuz! :)

Ne yapacaksınız? Oturup merak içinde bekleyecek misiniz? Tabii ki hayır! ;)

Peki ne yapmalı?

Önce derdimize çare olacak bir sistem taslağı çizmeli tabii ki:
  1. Gönderilecek e-posta bir kod içerecek.
  2. Bu kod çalışınca bir yere tetikleme yapacak.
  3. Tetikleme yaptığı yerdeki programcık gerekli veriyi alıp hemen log'a işleyecek.
Bu aşamada 1. ve 2. bölümü geçelim ve bu olayın en önemli kısımlarından biri olan PHP programını yazalım. 1. ve 2. bölüme daha sonra döneceğim merak etmeyin! ;)

Önce aşağıdaki kodu içeren bir PHP dökümanı hazırlıyorsunuz ve logger.php adı ile kaydediyorsunuz:
<?

setlocale(LC_ALL,tr_TR);

$tarih = "%d %B %Y %A </b>günü saat <b>%H:%M.%S";

$domain = GetHostByName($REMOTE_ADDR);

if ($HTTP_GET_VARS['sifre'] == 'Sifreniz') {

    $filename = $HTTP_GET_VARS['sayfa']. ".html";

    if( isset($HTTP_GET_VARS['konu']) && isset($HTTP_GET_VARS['sayfa']) ) {

	if (file_exists($filename)) {
	    $out = fopen($filename, "r");
	}
	else {
	    $out = fopen($filename, "a+");
	}

	$contents = fread($out,filesize($filename));
	fclose($out);

	if (preg_match ("/".$HTTP_GET_VARS['konu']."/", $contents)) {
	    $str = "<b>::: </b><font face=Verdana size=2><font color=red><b>".$HTTP_GET_VARS['konu']."</b>
		</font><b> :::</b> konulu e-posta <b>" . strftime($tarih) . " </b>de 
		<font color=red><b>okundu</b></font>. <b>IP: </b>" . $domain . "</font><br>";
	    $out = fopen($filename, "a+");
	    fwrite($out, $str);
	    fclose($out);
	}

	else {
	    $str = "<b>::: </b><font face=Verdana size=2><font color=red><b>".$HTTP_GET_VARS['konu']."</b>
		</font><b> :::</b> konulu e-posta <b>" . strftime($tarih) . " </b>de <font color=#0066cc><b>gönderildi
		</b></font>. <b>IP: </b>" . $domain . "</font><br>";
	    $out = fopen($filename, "a+");
	    fwrite($out, $str);
	    fclose($out);
	}
    }
}

?>

Şimdi yukarıdaki kodu satır satır açıklayıp, konuyu, burada belki işinize çok yarayacak belki de uzun ve sıkıcı olacak temel PHP dersi moduna sokmak istemiyorum ama kısaca bu kodun ne yaptığını açıklayayım.

Kodu içine kaydettiğiniz dosyanın (logger.php) içindeki değişkenler sizin loglama kriterlerinizi belirlemekte. Bu kodun çalışması için tarayıcınızın adres kısmına aşağıdaki gibi bir adres yazarak çalıştırabilirsiniz;
http://sizin_sunuzunuz/log_dizininiz/logger.php?konu=E-postanizin_Konusu&sifre=Sifreniz&sayfa=logunuzun_tutulacagi_sayfa
Peki yukarıdaki adresteki değişkenler neyi belirliyor?

Konu değişkeni, gönderdiğiniz e-postanın konusunu belirliyor adından da anlaşılabileceği gibi. Bunu e-postayı gönderirken siz belirleyeceksiniz. Adı üstünde değişken! :)

Sifre değişkeni, hazırladığınız PHP dökümanı içerisinde belirlediğiniz şifree değişkeni oluyor. Bunu yapmamızın sebebi sunucunuzda bulunan logger.php dosyasını bulan herhangi bir kişinin şans eseri de olsa sizin loglarınızda karışıklık yaratmasını engellemek. PHP kodu içerisindeki 'Sifreniz' bölümünde gerekliği değişikliği yaparak kendi şifrenizi belirlemenizi tavsiye ederim! ;)

Sayfa değişkeni ise gönderdiğiniz e-postanın okunup okunmadığına dair logların sunucunuz üzerinde logger.php'nin bulunduğu dizinde tutulacağı dosyayı belirliyor. Burada önemli bir ayrıntı vermem gerekiyor, sayfa=log olarak bir değişken verdiğinizde logger.php bunu kendi bulunduğu dizinde "log.html" olarak bir dosyaya kaydeder. Kısacası sizin verdiğiniz değişkenin sonuna ".html" ekleyerek kaydeder.

Şimdi gelelim bu logger.php'nin nasıl çalıştırılabilir bir hale getirileceğine: "logger.php" dökümanını sunucunuzda logların tutulmasını istediğiniz ve örnekte "log_dizininiz" olarak belirttiğim dizine gönderiyorsunuz (upload ediyorsunuz).

Hemen ardından "log_dizininiz" isimli dizinin ve logger.php'nin kullanıcı haklarını 755 yapıyorsunuz ki bu logger.php'nin "log_dizininiz" dizininde kayıtları tutacağı bir döküman açıp içeriğine veri eklemesine izin vermek demek oluyor.

Peki bu PHP dökümanı hangi verilerin loglanmasını sağlıyor?
  1. Gönderdiğiniz e-posta'nın konusu. (Daha önceden yazdığım gibi; bunu e-postayı gönderirken siz belirleyeceksiniz)
  2. E-postanın okunduğu tarih ve saat.
  3. E-postayı okuyan kişinin IP adresi.
(Bu veriler isteğinize göre logger.php'nin içeriğinde yapacağınız ekleme/çıkarmalar sayesinde artırılabilir ya da azaltılabilir, orası size kalmış!) :)

Şimdi daha önceden döneceğimi söylediğim 1. ve 2. maddeye dönelim;

2. maddeyi zaten yukarıdaki yazdıklarımdan çıkartmışsınızdır. E-postanın içereceği kod bir yere tetikleme yapmak zorunda ve yapacağı yer de yukarıda belirttiğim gibi, sunucunuzda bulunan "logger.php" dökümanı.

Dokümanın çalışma şeklini de tekrar belirteyim:
http://sizin_sunuzunuz/log_dizininiz/logger.php?konu=E-postanizin_Konusu&sifre=Sifreniz&sayfa=logunuzun_tutulacagi_sayfa
Şimdi işin en çetrefilli kısmı olan, e-postanın içine eklenecek koda gelelim: Bu e-posta ve içerdiği kod birkaç özellik içermeli:
  1. Kod e-posta okunduğu anda çalışmalı.
  2. Kod gizli olmalı.
  3. Kodun çalıştığı e-postayı okuyan kullanıcı tarafından farkedilmemeli.
Bu 3 şartın bir arada meydana gelebilmesi biraz karmaşık ve zor görünüyor sanırım. :)

Burada ilk aklıma gelen şey (FZ'nin de yardımları ile) e-postanın içeriğine bir JavaScript ekleyerek OnBodyLoad fonksiyonu ile bu adresi çalıştırmak oldu ama bu fikirden acilen vazgeçmek zorunda kaldım! :) Sebebi ise karşıdaki kullanıcının tarayıcısının desteklemeyebilecek olması ve dahası herhangi bir ScriptBlocking kullanabilecek olması.

Bir sonraki fikir ise koordinatları görüntünün dışında bir yere tekabül eden bir pop-up pencere açtırmak ve kod çalıştıktan hemen sonra bu pop-up pencerenin kapanması oldu ama sizin de farkedebileceğiniz gibi ilk akla gelen JavaScript problemlerinden dolayı bundan da vazgeçmek zorunda kaldım! :)

Burada HTML hacking devreye girdi ve değişik bir teknik denedim. HTML formatında gönderdiğim e-postanın içeriğine gizli (hidden) bir katman (layer) eklemek ve bu katman içerisinde gerekli kodu çağırmak! :) Eklenecek katman ve tabii ki bunun gizlenmesi temel HTML bilgisi ile çok kolay bir şekilde halledilebilir ama bu kod bu katmanda nasıl çalıştırılabilir?

İlk deneme ve sonuç başarılı! ;)

Katman içerisine bir IMG etiketi yazılır ve "src" source (kaynak) olarak yukarıda iki kere belirttiğim logger.php adresi ve değişkenler verilir! IMG fonksiyonu çağıracağı adreste uzantı (extension) kontrolü yapmadığı için normal olarak logger.php'yi çağırmaya çalışır. Sonuç olarak beklediği resmi (image) döndürememiş olsa da adresi fetch (çağırmak) ettiği için logger.php sunucuda devreye girerek gerekli kaydın tutulması işlemini başlatır! :)

Peki göndereceğim e-postaya nasıl bir kod eklemeliyim?

Gönderdiğiniz e-postaya aşağıdaki kodu ekliyorsunuz:
<div id="Layer1" style="position:absolute; width:1px; height:1px; z-index:1; visibility: hidden">
<img src="http://sizin_sunuzunuz/log_dizininiz/logger.php?konu=E-postanizin_Konusu&sifre=Sifreniz&sayfa=logunuzun_tutulacagi_sayfa"></div>

Burada dikkat edilmesi gereken 3 önemli husus var:

1. E-posta gönderilirken preview (önizleme) yapıldığı için logger.php çağırılmış oluyor ve sizin konu olarak belirlediğiniz değeri (string) sayfa değişkeninde "logunuzun_tutulacagi_sayfa" olarak belirlediğiniz "logunuzun_tutulacagi_sayfa.html" dökümanına "::: E-postanizin_Konusu ::: konulu e-posta "önizlemenin yapıldığı tarih ve zaman" da gönderildi. IP: "sizin o an sahip olduğunuz IP adresi" olarak işliyor ve daha sonra her çağırıldığında "konu=" değişkenini "logunuzun_tutulacagi_sayfa.html" dosyasının içeriğinden bir RegExp (Bkz: Düzenli İfadeler) "preg_match" ile kontrol ederek "eğer konu döküman içeriğinde varsa okundu olarak işle, yoksa gönderildi olarak işle" şeklinde işliyor. Bu sayede e-postanın gönderildiği tarihi ve okunduğu tarihi ve dolayısı ile aradaki zaman farkını kolayca anlayabiliyorsunuz.

2. Eğer sunucunuzda bulunan PHP'nin Türkçe Dil Desteği varsa loglara geçecek tarih Türkçe çıkacaktır, aksi takdirde PHP kodunun başında geçen "setlocale(LC_ALL,tr_TR);" satırı hiçbir işe yaramayacaktır...

3. İkinci maddede belirttiğim; sunucunuzda bulunan PHP'nin Türkçe Dil Desteği şayet yoksa logger.php çalıştırılırken vereceğiniz değişkenler kesinlikle Türkçe karakter (ş,ı,ğ,ü,ö,ç,İ,Ü,Ğ,Ç,Ş,Ö) içermemeli. Aksi takdirde PHP karakter eşlemesi yapamadığı için [ben öyle sanmaktayım :)] hata verecektir...

Peki bu loglara nasıl ulaşacağım?

Daha önce yukarıda birkaç kere belirttiğim logger.php'nin çalışması için gerekli olan değişkenlerden "sayfa" değişkeninin içeriği + ".html" olarak ulaşabilirsiniz. Yani örenkte verdiğim "logunuzun_tutulacagi_sayfa" değişkenini vermiş olduğunuzu düşünürsek, loglarınıza erişmek için kullanmanız gereken adres aşağıdaki gibi olacaktır:
http://sizin_sunucunuz/log_dizininiz/logunuzun_tutulacagi_sayfa.html
Ve IE (Internet Explorer) kullanıcıları için bir ufak kıyak daha yapayım hemen! :) Açıklamasını yapmaya üşeniyor olmamdan ve yine temel JavaScript bilgisi vermekten pek haz etmememden dolayı çok fazla üzerinde durmayacak olsam da.

Aşağıdaki kodu dosya ismini sizin belirleyeceğiniz bir HTML dökümanı olarak bilgisayarınıza kaydedecek olursanız, e-posta gönderirken içeriğine ekleyeceğiniz kodu kolayca oluşturabilirsiniz! :)
<html>
<head>
<title>Logger Layer Kodu Olustur</title>
<meta http-equiv="Content-Type" content="text/html; charset=">
</head>

<body bgcolor="#000000">
<script language=JavaScript>
function loggerlayer() {

    bir = "<div id=\"Layer1\" style=\"position:absolute; width:1px; height:1px; z-index:1; visibility: hidden\">";
    iki = "<img src=\"http://sizin_sunucunuz/log_dizininiz/logger.php?konu=";
    uc = "\&sifre=";
    dort = "\&sayfa=";
    bes = "\"></div>"
    kodcu.kod.value = bir + iki + kodcu.konu.value + uc + kodcu.sifre.value + dort + kodcu.sayfa.value + bes;
}

</script>
<form method="post" action="" name="kodcu">
  <center><textarea name="kod" rows="3" cols="80"></textarea>
    <br>
    <br>
  </center>
  <table width="75" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr> 
      <td> 
        <div align="left"><font color="#FFFFFF"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Konu: 
          </font></b></font></div>
      </td>
      <td> 
        <div align="left"> 
          <input type="text" name="konu">
        </div>
      </td>
    </tr>
    <tr> 
      <td> 
        <div align="left"><font color="#FFFFFF"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Sifre:</font></b></font></div>
      </td>
      <td> 
        <div align="left"> 
          <input type="password" name="sifre">
        </div>
      </td>
    </tr>
    <tr> 
      <td> 
        <div align="left"><font color="#FFFFFF"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Sayfa: 
          </font></b></font></div>
      </td>
      <td> 
        <div align="left"> 
          <input type="text" name="sayfa">
        </div>
      </td>
    </tr>
  </table>
  <div align="center"><a HREF="javascript:loggerlayer()"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#0066cc">Kod
    Olustur </font></b></font></a> </div>
</form>
</body>
</html>

Yukarıdaki kodda "http://sizin_sunucunuz/log_dizininiz/logger.php" kısmını içeriğindende anlaşılabileceği gibi kendi sunucunuza göre ayarlamanız gerekmekte. :)

Not #1: Yukarıdaki HTML dökümanı ve içerdiği JavaScript kodu sadece IE'de (Internet Explorer) çalışmaktadır. Diğer tarayıcılarla uyumlu bir hale getirecek arkadaşlara minnettar kalırım! Tabii ki bizlerle paylaşacaklarından da şüphem yok yazdıkları kodu! ;) Not #2: Hemen yukarıdaki HTML dökümanı ve içerdiği JavaScript kodu haricindeki diğer tüm kodlar; logger.php ve e-postanın içeriğine eklenecek layer kodu Mozilla ve IE'de (Internet Explorer) denenmiş ve problemsiz bir şekilde çalıştığı gözlemlenmiştir.

Not #3: E-postanın içeriğine ekleyeceğiniz layer kodu doğal olarak göndereceğini iletinin HTML formatında olmasını sağlamakta. Bu nedenle de gönderdiğiniz kişinin HTML Formatting yapıyor olması gerekmekte. Hotmail, Yahoo ve Outlook Express üzerinde çalışan ayrı iki POP e-posta hesabı üzerinde denenmiş ve problemsiz bir şekilde çalıştığı gözlemlenmiştir. Ayrıca Hotmail ve Yahoo e-posta sunucularının default (varsayılan ayar) olarak HTML Formatting yaptığını belirteyim! :)

Not #4: FZ'nin verdiği fikirler, logger.php'nin düzenlenmesine olan katkıları ve deneme yapabilemem için bana sunucusunda bir dizin açması nedeniyle kendisine sonsuz teşekkür ederim! :)

Not #5: Bu programı yazmama sebep olan kişiye özellikle teşekkür ederim. Şimdi arabesk geyiklere vurup "o kendini biliyor" tribine girmenin bir alemi yok ama gerçekten de işe yarar olduğunu düşündüğüm bir program ortaya çıkartmamda farkında olmayarak teşvik edici etken oldu kendisi! :)

Not #6: Not olayını biraz abarttım sanırım, can sıkıcı olduysam özür dilemeyi bir borç bilirim! ;)

(: "Bilgi paylaştıkça artar..." :)

Saygılar,
Gökhan "Crematorium" OLGUN


Not: Yazılar konusundaki yorumlarınız için lütfen Yorum Yazın bölümümüzü kullanın.

Yazar : Gökhan "Crematorium" OLGUN
Son Güncelleme : 21 Eylül 2005, Çarşamba
Sayfa Sürümü : 1
Okunma Adedi : 6,821
Son Okunma : 2017-11-22 16:07:39
Kaynaklar : http://ileriseviye.org/arasayfa.php?inode=logger.html

Hızlı Aşağı Açılır (Drop-down) MenüE-Posta Takibi
© [Site Haritası]
| Makaleler | Seyir Defteri | Kaynaklar | İndirin | İletişim |

RSS dosyasını görmek için tıklayınız. RSS dosyasını görmek için tıklayınız.XML versiyonu için tıklayınız WAP versiyonu için tıklayınız Bu site DyNA İçerik Yönetim Sistemi üzerinde çalışmaktadır.
İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa
ismail kırbaş ile web sitesi tasarimi sitemap ismail kırbaş ile web sitesi tasarimi sitemap
  Sitemizde 9 kişi çevirimiçi | Bugün =115 | Dün =262 | Bu Ay=5,399 | Günlük En Fazla=1,109 tekil ziyaretçi