SMTP internette posta teslimatı için kullanılan protokolün ismidir. Protokolün ayrıntılı açıklamasını RFC 2821'de bulabilirsiniz. Ayrıca, Dave Crocker'ın İnternet Postalarının Mimarisi'ne bakışını da okumanızı öneririm.
Posta teslimatları bağlanan konak (istemci) ile bağlanılan konak (sunucu) arasındaki SMTP işlemleri ile yapılır.
Tipik bir SMTP aktarımında, istemci EHLO, MAIL FROM:, RCPT TO: ve DATA gibi komutlar gönderir. Sunucunuz her komuta 3 rakamlık bir sayısal kod (komutun kabul edildiğini belirmek için 2
xx, geçici bir sorun ya da kısıtlayıcı bir durum için 4 xx, kesin ve mutlak başarısızlık halinde 5 xx) ve bunu izleyen insanların anlayabileceği bir açıklama ile yanıt verir. Bu kodların tamamı RFC 2821'de açıklanmıştır.
SMTP aktarımında eniyi durum senaryosu genel olarak birbirini izleyen şu adımlardan oluşur:
|İstemci||Sunucu|
Sunucuya bir TCP bağlantısı kurar.
SMTP (veya halefi olan ESMTP) diyaloğuna hazır olduğunu belirtmek için 220 koduyla başlayan bir karşılama iletisi gönderir:
Bir HELO (artık atıl) ya da EHLO ile başlayan ve kendi Nitelikli Alan Adını içeren bir selamlaşma komutu ile kendini tanıtır:
Bir 250 yanıtı ile bu selamı kabul eder. Eğer istemci selamlaşma komutunun gelişmiş sürümünü (EHLO) kullanmışsa, sunucunuz onun çok satırlı yanıtları işleme yeterliliğinde olduğunu anlar ve normal olarak kendi yeteneklerini belirten satırları gönderir:
Bu yanıt PIPELINING yetisini içeriyorsa, istemci bu noktadan sonra herbiri için ayrı ayrı yanıt beklemeksizin bir çok komutu bir kerede gönderir.
Zarf Göndericisini belirterek yeni bir posta aktarımı başlatır:
Göndericinin kabul edildiğini belirten bir 250 yanıtı gönderir.
İletinin Zarf Alıcılarını bir defada liste halinde yollar:
Her komuta o alıcı için teslimatın kabul mü edildiğine (2xx), geçici bir sorun mu oluştuğuna (4xx) yoksa red mi edildiğine (5xx) dair bir yanıt döndürür.
İletiyi göndermeye hazır olduğunu belirten bir DATA komutu gönderir.
Komutun geçici olarak kabul edildiğini belirten 354 yanıtını gönderir.
RFC 2822 uyumlu başlık satırları (From:, To:, Subject:, Date:, Message-ID: gibi) ile başlayan iletiyi aktarmaya başlar. Başlık ve gövde bir boş satırla ayrılır. İletinin sonunda ileti sonunu belirten ve tek bir nokta içeren ek bir satır göndererek ileti aktarımını bitirir.
İletinin kabul edildiğin belirten 250 yanıtını gönderir.
Eğer teslim edilecek başka iletiler de varsa, bir MAIL FROM: komutu gönderir. Aksi takdirde, QUIT der ya da yaygın bir durum olarak basitçe bağlantıyı keser.
Bağlantıyı keser.