PHP ile Mail Kutusu Kontrolü

PHP ile Mail Kutusu Kontrolü

PHP kullanarak mail POP3 ya da IMAP protokolü üzerinden maillerinize ulaşıp bunları okuyabilir, silebilir, ya da başka bir yere iletelebilirsiniz. Bunun için PHP’nin IMAP protokolünü kullanmanız gerekiyor. POP3 parametlerini kullanarak fsockopen komutunu kullanırsanız büyük bir sıkıntı sizi bekliyor. O da HTML olarak gönderilen maillerin hem Türkçe karakterlerde problem yaratması hem de headerları tam olarak okuyamaması.

Sunucunuzda PHP IMAP modülünün hazır olduğundan emin olduktan sonra aşağıdaki kodlar ile mail kutunuzu işleyebilirsiniz. Burada en çok karıştırılan konu da IMAP modülü kullanıldığında POP3 maillere erişemeyeceğinin düşünülmesi. Bu doğru olmamakla beraber, IMAP modülü POP3 üzerinde çok daha geniş bir işlem yetkisi sağlıyor.

Bu kodun tam olarak yaptığı işlem, bir mail hesabından aldığı mailleri belirttiğiniz başka bir mail hesabına iletip daha sonra maili silmek.

 

<?php

//Mail bilgileri
$mail_server = “{mail.domain.com:110/pop3/notls}INBOX”; // notls sertifika hatasını ignore eder.
$mail_user = “kullaniciadi@domain.com”; // mail kullanıcı adı
$mail_pass = “abc123”; // mail şifresi

$imap = imap_open($mail_server, $mail_user, $mail_pass); // mail bağlantısını açıyoruz
// bağlantı sırasında bir hata oluşursa aşağıdaki komutu çalıştırarak hatayı görüntüleyebiliriz.
/*print_r(imap_errors());*/

$message_count = imap_num_msg($imap); // mail kutusunda kaç mail olduğunu alıyoruz

for ($i = 1; $i <= $message_count; ++$i) // her bir mail için
{
$header = imap_header($imap, $i); // mailin header bilgisini al

$mailbox = $header->from[0]->mailbox; // @ önceki kısım örnek: kullaniciadi
$host = $header->from[0]->host; // @ sonraki kısım örnek: domain.com

$subject = iconv_mime_decode($header->subject, 0, “ISO-8859-9”); // konuyu iso-8859-9 şeklinde çözerek alıyoruz
$subject = mb_convert_encoding($subject, “UTF-8”, “ISO-8859-9″); // konuyu utf-8 çeviriyoruz

$from = $mailbox.”@”.$host; // mailbox ve host birleştirerek gönderen emaili oluşturuyoruz. örnek: kullaniciadi@domain.com
$message = imap_fetchbody($imap,$i,1); // maili plain text olarak çekiyoruz.
$message = trURLtoCHAR($message); // aldığımız mailde oluşan bozuk Türkçe karakterleri düzeltiyoruz
$message = mb_convert_encoding($message, “UTF-8”, “ISO-8859-9”); // maili utf-8 çeviriyoruz

imap_delete($imap, $i); // mesajı silmek üzere işaretliyoruz

$mail_to = “digerkullaniciadi@domain.com”; // mail gönderilecek kişi
$mail_subject = “Konu”; // Mail konusu
$mail_message = “Mail icerigi ve mesaj”; // mail içeriği
$mail_header = “From: Kullanici Adi <kullaniciadi@domain.com>”; // mailin kimden gittiği
mail($mail_to, $mail_subject, $mail_message, $mail_header); // maili gönderiyoruz
} // for döngüsü bitti

imap_expunge($imap); // silmek üzere işaretlediğimiz mailleri siliyoruz
imap_close($imap); // mail bağlantısını kapatıyoruz

function trURLtoCHAR($text) // bozuk Türkçe karakterleri düzelten fonksiyon
{
$url=array( // bozuk karakterler
“=E7″,”=C7”,
“=FD”,”=DD”,
“=FC”,”=DC”,
“=F6″,”=D6”,
“=FE”,”=DE”,
“=F0″,”=D0”,
“=20”
);
$char=array( // düzgün karakterler
“ç”,”Ç”,
“ı”,”İ”,
“ü”,”Ü”,
“ö”,”Ö”,
“ş”,”Ş”,
“ğ”,”Ğ”,
“\r\n”
);

return str_replace($url,$char,$text); // bozuk Türkçe karakterleri düzeltiyoruz
}
?>

8 Yorum

  1. } // for döngüsü bitti

    üstündeki 2 tane } neyi kapatıyor onu anlayamadım

  2. Murat

    Bu konuda yazılmış türkçe dökümanı, kodlamada düzgün görünüyor
    Emeğine sağlık hocam

  3. en başta bir } hatası alıyorum. nedenini anlamadım.

  4. Peki resimleri nasıl ala biliriz hocam?

    • Hocam PHP ile uğraşmayalı çok uzun zaman oldu. O yüzden şu an için çok bilgim yok açıkçası. Yardımcı olamadığım için kusura bakmayın.

Yorum Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir