PHP ile Mail Kutusu Kontrolü
Tarih: : 20 Haz, 2012 Kategori: PHP, Programlama | 8 yorum
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 çeviriyoruzimap_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ü bittiimap_expunge($imap); // silmek üzere işaretlediğimiz mailleri siliyoruz
imap_close($imap); // mail bağlantısını kapatıyoruzfunction 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
}
?>
} // for döngüsü bitti
üstündeki 2 tane } neyi kapatıyor onu anlayamadım
Teşekkürler, orada gözden kaçmış. Yazıyı düzenledim.
Bu konuda yazılmış türkçe dökümanı, kodlamada düzgün görünüyor
Emeğine sağlık hocam
Teşekkürler. :)
en başta bir } hatası alıyorum. nedenini anlamadım.
Parantezler kaymış / eksik / fazla olabilir.
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.