PHP ile Mail, Imap, POP3, NNTP Uygulamaları
SMTP, IMAP, POP3, NNTP birbirleriyle yakından ilişkili protokollerdir.
SMPT:
SMTP(Simple Mail Transfer Protocol) mail gönderme ve almada kullanılan protokoldür ve UNIX ortamında bu iş için en yaygın kullanılan araç sendmail'dir. PHP, UNIX ortamında kullanılacak ise mail almak için aynı makinada bir sendmail sunucusunun çalışır durumda olması gerekmektedir. Mail gönderirken sendmail otomatik olarak çalıştırıldığı için sunucunun çalışır durumda olmasına gerek yoktur.
- mail fonksiyonu mail göndermek için kullanılır. Bu fonksiyonda dördüncü parametre ek SMTP header bilgisi göndermek için kullanılır. Eğer kullanılmaz ise mesajın göndereni kısmına web sunucusunun uid'i otomatik olarak konulur (Örnek: nobody@abc.def.com). Ek header bilgileri şunlar olabilir:
- From: <Gönderilen adres>
- Reply-To: <Gönderen adres>
- X-Mailer: <Maili gönderen istemci (client) program>
IMAP:
IMAP(Interet Message Access Protocol), SMTP ile mail sunucusna alınan maillere kullanıcıların uzaktan erişimini sağlayan bir protokoldür. Gelen postaların sunucu tarafında merkezi olarak tutulması, kullanıcının burada birden çok dizin açmasına izin vermesi, mesajları çok parçalı olarak işleyebilme, eşzamanlı erişim ve dizin paylaşımı gibi özellikleri ile POP3'e göre daha üstün bir protokoldür. PHP ile IMAP kullanımı kabaca şu adımları içerir:
-
Posta sunucu ile bağlantı kurulur:
- imap_open fonksiyonu, verilen posta kutusu tanımlayıcına sahibinin (kullanıcı adı ve şifresi ile) bağlanabilmesini sağlar. Bağlantı sağlanırsa posta kutusunu ifade eden bir numara (handle) döndürülür. Burada mailbox, "{<Sunucu makina adresi>/imap:<imap portu>}<posta kutusu dizini>" şeklinde bir stringdir. Örnek: {javaserver.ulakbim.gov.tr/imap:143}INBOX
- imap_reopen fonksiyonu, handle'ı verlien posta kutusu kapatılmış ise aynı HTTP oturumu içinde doğrulama yapılmaksızın yeniden bağlanılabilmesini sağlar.
-
Mesaj başlık (header) ve içerik bilgisine ulaşılabilir: IMAP, mesajları mesaj sıra numarası (sequence) ve tanımlayıcı numara (uid) olmak üzere iki tür numaralama ile ayrıştırır. Her ikisi de PHP ile mesaj bilgilerine ulaşmak için kullanılabilir. Ancak sequence kullanmak birbirinden ayrı oturumlar kullanan HTTP için çok sağlıklı değildir. Çünkü posta kutusundan bir mesaj silindiği anda sequence numaraları yeniden düzenlenir. Ancak uid değerleri değişmez.
- imap_headers fonksiyonuyla, verilen posta kutusundaki mesaj başlıkları sıra numarasına göre (sequence) sıralı bir dizi olarak alınır.
- imap_header fonksiyonu, posta kutusundaki verilen sıra numaralı mesajın ayrıntılı çözümlenmiş (parsed) header bilgisi object olarak alınır.
- imap_body fonksiyonu, posta kutusundaki verilen sıra numaralı mesaj içeriği alınır. Burada FT_UID flagı olarak üçüncü bir parametre ile çağrılırsa sıra numarası (sequence) yerine tanımlayıcı (uid) kullanır.
-
Arama ve sıralama işlemleri yapılabilir:
- imap_sort fonksiyonu, posta kutusundaki mesajların verilen kritere göre sıralanmış listesi dizi olarak alınır. Burada options kısmında SE_UID kullanılırsa dizi elemanları uid değerlerinden oluşur aksi taktirde sequence numaraları döndürülür
- imap_search fonksiyonu, posta kutusundaki mesajlar üzerinde verilen kritere göre arama yapılır. Burada da flags kısmında SE_UID kullanılırsa sequence numaraları yerine uid değerleri alınır.
POP3
POP3(Post Office Protocol) protokolü de IMAP gibi, SMTP ile mail sunucusuna alınan maillere kullanıcıların uzaktan erişimini sağlayan bir protokoldür. Ancak mesajların kullanıcılar tarafından bütün olarak download edilmesini gerektirmesi, merkezi olarak tutulmadığı için hareket halindeki kullanıcılar (roaming users) için senkronizasyon sorunları oluşturması ve eşzamanlı erişime izin vermemesi nedeniyle IMAP'ın gerisinde kalır.
PHP ile POP3 kullanımı IMAP'dan çok farklı değildir. Fakat, IMAP'ın izin verdiği bazı fonksiyonlar POP3 erişiminde kullanılamaz.
Bağlantı kurarken ilgili protokol adını ve kullanılan portu örneğin şu şekilde değiştirmek yeterli olur: {javaserver.ulakbim.gov.tr/pop3:110}INBOX
NNTP:
NNTP (Network News Transfer Protocol) protokolü, Internet üzerinde haber mesajlarının merkezi olarak sunucular üzrinde tutulup tutulup, istemcilerin bu kaynaklar üztünde sorgulama yapması, mesajları okuması ve mesaj atabilmesini sağlayan bir protokoldür.
Bağlantı kurarken ilgili protokol adını ve kullanılan portu örneğin şu şekilde değiştirmek yeterli olur: {javaserver.ulakbim.gov.tr/nntp:119}INBOX