4.2. SMTP Yanıtları

SMTP komutlarının yanıtları, posta aktarım işlemindeki isteklerin ve eylemlerin eşzamanlanmasının temini ve SMTP istemcisinin SMTP sunucusunun durumunu daima bilmesini garantilemek için kullanılırlar. Her komutun sadece ve sadece bir yanıt üretmesi gerekir *ZORUNLU*.

Komut-yanıt dizilimlerinin ayrıntıları Komutların ve Yanıtların Sıralanışı bölümünde açıklanmıştır.

Bir SMTP yanıtı bu belgede aksi belirtilmiş olmadıkça, üç rakamlı bir sayıyı (üç tane sayısal karakter olarak aktarılır) izleyen bir metinden oluşur. Sayı bilgisayar tarafından geçilecek durumu saptamak için, metin ise insan kullanıcılar içindir. 3 rakam, SMTP istemcisinin metni incelemeksizin kullanıcıya mı aktaracağı yoksa iptal mi edeceğine karar verebilmesine yetecek kadar kodlanmış bilgiyi içerir. İstisnalara bu belgenin çeşitli yerlerinde dikkat çekilmiştir. Kısmen, 220, 221, 251, 421 ve 551 yanıt kodları, makineler tarafından çözümlenip yorumlanması gereken ileti metinleriyle ilgilidir. Genel durumda ise, metin alıcıya bağımlı ve bağlama bağımlı olabilir, bu yüzden her yanıt kodu için metnin değişmesi sözkonusu olabilir. Yanıt kodları teorisinin açıklaması Yanıt Kodlarının Önemleri ve Kuram bölümünde verilmiştir. Biçimsel olarak bir yanıt bir dizilim olarak tanımlanmıştır: üç rakamlık bir kod, <BOŞKRK>, metnin bir satırı ve <CRLF> ya da çok satırlı bir yanıt (Yanıt Kodlarının Önemleri ve Kuram bölümünde tanımlandığı gibi). Bu belirtimle çelişerek metin bazan gönderilmediğinden, metni almayan istemciler kodu tek başına (bir boşluk karakteri içersin içermesin) işlemeye hazırlıklı olmalıdır *ÖNERİ*. Sadece EHLO, EXPN ve HELP komutlarının normal koşullarda çok satırlı yanıtlarla sonuçlanması beklenirse de, çok satırlı yanıtlara her komutta izin verilmektedir.

ABNF gösterimiyle sunucunun yanıtları:

    Karşılama = "220 " Alan [ BOŞKRK metin ] CRLF
 Yanıt-satırı =  Yanıt-kodu [ BOŞKRK metin ] CRLF

sadece 220 yanıtının göründüğü "Karşılama" iletisi ile sunucu, bağlantının kendine düşen parçasını açtığını duyurmuş olur.

Bir SMTP sunucusu sadece bu belgede listelenen yanıt kodlarını göndermeli *ÖNERİ* ve uygun düştükçe örneklerde gösterilen metinleri kullanmalıdır *ÖNERİ*.

Bir SMTP istemcisi eylemini metne bakarak değil sadece yanıt koduna bakarak saptamalıdır *ZORUNLU* ("adres değişikliği" için olan 251 ve 551 ile gerekliyse 220, 221 ve 421 yanıtları hariç); genel durumda, hiç metin bulunmaması halini de içererek her metin kabul edilebilmelidir *ZORUNLU*(göndericiler çıplak kodlar göndermemelidir *ÖNERİ* dense de). Yanıt kodundan sonra gelen boşluk metnin parçası olarak kabul edilir. Mümkün olduğunca, bir alıcı SMTP sistemi yanıt kodunun ilk rakamını (önem belirteci) sınamalıdır *ÖNERİ*.

Aşağıda bulunan kodların listesi kalıcıymış gibi yorumlanmamalıdır *ZORUNLU*. Yanıtın metinsel kısmındaki tamamlayıcı bilginin tercih edilmesiyle birlikte yeni kodların eklenmesi nadir ve önemli bir etkinlik olduğu sürece, yeni standartların ya da standartlaşma aşamalarındaki belirtimlerin sonucu olarak yeni kodlar eklenebilir. Sonuç olarak, bir gönderici SMTP sistemi bu belgede belirtilmemiş kodlarla çalışmaya hazırlıklı olmalı *ZORUNLU* ve sadece ilk rakamı yorumlayarak gereğini yapmalıdır *ZORUNLU*.

4.2.1. Yanıt Kodlarının Önemleri ve Kuram

Yanıtın üç rakamının her birinin özel bir önemi vardır. İlk rakam yanıtın iyi mi, kötü mü yoksa eksik mi olduğunu belli eder. Aşırı karmaşıklaşmamış veya beklenmedik bir kod alan bir SMTP istemcisi bu ilk rakamı inceleyerek yapacağı eylemi (planlı işlem, yeniden yapma, kısıntı, vb. gibi) saptayabilecektir. Ne çeşit hata oluştuğunu (posta sistemi hatası, komut sözdizimi hatası, vb. gibi) yaklaşık olarak bilmek isteyen bir SMTP istemcisi, ikinci rakamı inceleyebilir. Üçüncü rakam ve mevcut olabilecek bütünleyici her bilgi, bilginin eniyi derecelenmesi için ayrılmıştır.

Yanıt kodunun ilk rakamı için beş değer vardır:

1yz Ön Hazırlık Olumlu yanıtı

Komutun kabul edilmiş olduğunu ama istenen eylemin askıda tutulduğunu, bu yanıttaki bilginin doğrulanmasının bekletildiğini belirtir. SMTP istemcisi eylemin sürdürüleceğini mi yoksa bırakılacağını mı belirten başka bir komut göndermelidir. Bilgi: Eklentisiz SMTP'nin yanıtın bu türüne izin veren komutları yoktur ve dolayısıyla devam veya terk komutlarına da sahip değildir.

2yz Tamamlama Olumlu yanıtı

İstenen eylem başarıyla tamamlanmıştır. Yeni bir istek başlatılabilir.

3yz Araişlem Olumlu yanıtı

Komut kabul edilmiştir, fakat istenen eylem askıya alınmış olup bu bilginin alındısı bekletilmektedir. SMTP istemcisi bu bilgiyi belirten başka bir komut göndermelidir. Bu yanıt sıralı komut gruplarında (örn, DATA) kullanılır.

4yz Geçici Tamamlama Olumsuz yanıtı

Komut kabul edilmemiş ve istenen eylem gerçekleşmemiştir. Ancak, hata durumu geçicidir ve eylem yeniden talep edilebilir. Gönderici (varsa) komut sırasının başına dönmelidir. "Geçici" için bir anlam atamak, her iki tarafın da (alıcı ve gönderici SMTP sistemleri) yorumda hemfikir olması gerektiğinde zordur. Bu kapsamdaki her yanıt farklı bir zaman değerine sahip olabilir, fakat SMTP sunucusu tekrar denemesi için teşvik edilir. Bir yanıtın 4yz ya da 5yz (aşağıya bakınız) sınıfına girip girmediğini saptamanın ana kuralı, gönderici veya alıcının özelliklerinde veya komut biçiminde değişiklik yapmaksızın yinelenebilirse başarılı olma şansı varsa (yani, komut aynen yinelenir ve alıcı yeni bir gerçeklenim ortaya koymaz), bu yanıtlar 4yz yanıtlarıdır, şeklindedir.

5yz Kalıcı Tamamlama Olumsuz yanıtı

Komut kabul edilmemiş ve istenen eylem gerçekleşmemiştir. SMTP istemcisi aynı isteği (aynı sırayla) yinelemekten vazgeçirilir. Hatta bazı "kalıcı" hata durumları doğrulanabilir, böylece insan kullanıcı, SMTP istemcisinden, gelecekteki bir anda doğrudan bir eylemin sonucu olarak komut sırasını yeniden başlatmasını isteyebilir (örneğin, yazılışta veya kullanıcının hesap bilgilerinde değişiklik olduğunda).

İkinci rakam yanıtları belli sınıflara kodlar:

x0y Sözdizimi:

Bu yanıtlar, başka bir işlevsel sınıfla örtüşmeyen sözdizimsel olarak yanlış komutlar, gerçeklenmemiş ya da gereksiz komutlar ve sözdizimi hataları ile ilgilidir.

x1y Bilgi:

Bunlar yardım veya durum bilgisi isteği gibi bilgi isteklerine yanıtlardır.

x2y Bağlantılar:

Bunlar aktarım kanalına atıfta bulunan yanıtlardır.

x3y Belirsiz.
x4y Belirsiz.

x5y Posta sistemi:

Bu yanıtlar alıcı posta sisteminin istenen aktarımla veya başka bir posta sistemi eylemiyle karşı karşıya kaldığı durumu belirtir.

Üçüncü rakam, ikincisi tarafından belirtilen sınıflamalara daha hassas dereceleme sağlar. Yanıtların listesi bunu en iyi gösteren yerdir. Her yanıt metni zorunludan ziyade önerileni belirtir ve hatta ilişkilendirildiği komuta göre değişebilir. Diğer taraftan, yanıt kodları kesinlikle bu bölümdeki belirtimleri takip etmelidir. Alıcı gerçeklenimleri, burada açıklanandan azcık farklı durumlarda zaten tanımlanmış olanlara uyum sağlamaktansa yeni kodlar uydurmamalıdır.

Örneğin, başarılı çalışması SMTP istemcisine yeni bir bilgi sunmayan NOOP gibi bir komut bir 250 yanıtı döndürecektir. Bir komut siteye özgü olmayan gerçeklenmemiş bir eylemi talep ettiğinde yanıt 502 olur. Gerçeklenmiş bir komuttan gerçeklenmemiş bir bağımsız değişken ile istekte bulunmanın cezası ise 504 yanıtıdır.

Yanıt metni tek bir satırdan daha uzun olabilir; bu gibi durumlarda, SMTP istemcisinin metnin tamamın elde etmek için nereye kadar okuyacağını belirtecek şekilde ileti metni imlenmelidir. Bu, çok satırlı bir yanıt belirten özel bir biçimi gerektirir.

Çok satırlı yanıt biçimi, son satır dışında bütün satırlar yanıt koduyle başlar, ardına bir tireden (eksi işareti diye de bilinir) sonra satır metni eklenir. Son satırda ise tire işaretinin yerini <BOŞKRK> (boşluk) alır ve metin isteğe bağlıdır. Satırların tamamı <CRLF> ile biter. Yukarıda da dikkat çekildiği gibi, sunucular, ardında bir metin bulunmasa bile <BOŞKRK> göndermelidir *ÖNERİ*, fakat istemcilerin bunun yokluğuna karşı hazırlıklı olması gerekir *ZORUNLU*.

Örneğin:

    123-ilk satir
    123-ikinci satir
    123-234 metin sayiyla basliyor
    123 son satir

Çoğu durumda SMTP istemcisi basitçe yanıt kodundan sonra <BOŞKRK> veya <CRLF> gelen satırı aramaya ihtiyaç duyar ve öncesindeki tüm satırları yoksayar. Sadece birkaç durumda, yanıt metninde istemci için önemli bilgi vardır. İstemci bu durumları o anki bağlamdan tespit etme konusunda yetkin olmalıdır.

4.2.2. İşlev Gruplarına göre Yanıt Kodları

  500 Sözdizimi hatası, komut tanınmıyor
      (Komut satırı çok uzun gibi hataları içerebilir)
  501 Bağımsız değişken ya da bağımsız değişkenlerde sözdizimi hatası
  502 Komut gerçeklenmedi (bkz, 502 Yanıt Kodu)
  503 Komutların sırası hatalı
  504 Komut bağımsız değişkeni gerçeklenmedi
  211 Sistem durumu veya sistem yardımı yanıtı
  214 Yardım iletisi
      (Kullanım bilgisi veya standartdışı bir komutun anlamı;
      bu yanıt sadece insan kullanıcılar için yararlıdır.)
  220 <alan> Hizmete hazır
  221 <alan> Hizmet, aktarım kanalını kapatıyor
  421 <alan> Hizmete uygun değil, aktarım kanalı kapanıyor
      (Hizmet kapatılmakta olduğunu biliyorsa bu yanıt herhangi bir
       komuta verilebilir.)
  250 İstenen posta eylemi başarıyla tamamlanmıştır
  251 Kullanıcı yerel kullanıcı değil; <sevk-yolu> adresine sevkedilecek
      (bkz, Adres Düzeltmek veya Güncellemek için Yönlendirme)
  252 VRFY için kullanıcı doğrulanamıyor, ama ileti kabul edilecek ve
      teslim edilmeye çalışılacaktır
      (bkz, VRFY veya EXPN için Başarılı Yanıtın Anlamı)
  450 İstenen posta eylemi yerine getirilemedi: posta kutusu elverişli değil
      (örn, posta kutusu meşgul)
  550 İstenen eylem yerine getirilemedi: posta kutusu elverişli değil
      (örn, posta kutusu bulunamadı, erişilemedi veya
       kurallar gereği komut reddedildi)
  451 İstenen eylem tamamlanmadı: işlem sırasında hata
  551 Kullanıcı yerel kullanıcı değil; lütfen <sevk-yolu> adresini deneyin
      (bkz, Adres Düzeltmek veya Güncellemek için Yönlendirme)
  452 İstenen eylem yerine getirilemedi: sistem kaynakları yetersiz
  552 İstenen posta eylemi yerine getirilemedi: saklama alanı yetmiyor
  553 İstenen eylem yerine getirilemedi: posta kutusu ismine izin yok
      (örn, posta kutusu isminde sözdizimi hatası)
  354 Posta girdisini başlat ve <CRLF>.<CRLF> ile bitir
  554 Aktarım başarısız oldu (Veya, bir bağlantı açılış yanıtında:
      "Burada öyle bir SMTP hizmeti verilmiyor")

4.2.3. Numara Sırasıyla Yanıt Kodları

  211 Sistem durumu veya sistem yardımı yanıtı
  214 Yardım iletisi
      (Kullanım bilgisi veya standartdışı bir komutun anlamı;
      bu yanıt sadece insan kullanıcılar için yararlıdır.)
  220 <alan> Hizmete hazır
  221 <alan> Hizmet, aktarım kanalını kapatıyor
  250 İstenen posta eylemi başarıyla tamamlanmıştır
  251 Kullanıcı yerel kullanıcı değil; <sevk-yolu> adresine sevkedilecek
      (bkz, Adres Düzeltmek veya Güncellemek için Yönlendirme)
  252 VRFY için kullanıcı doğrulanamıyor, ama ileti kabul edilecek ve
      teslim edilmeye çalışılacaktır
      (bkz, VRFY veya EXPN için Başarılı Yanıtın Anlamı)
  354 Posta girdisini başlat ve <CRLF>.<CRLF> ile bitir
  421 <alan> Hizmete uygun değil, aktarım kanalı kapanıyor
      (Hizmet kapatılmakta olduğunu biliyorsa bu yanıt herhangi bir
       komuta verilebilir.)
  450 İstenen posta eylemi yerine getirilemedi: posta kutusu elverişli değil
      (örn, posta kutusu meşgul)
  451 İstenen eylem tamamlanmadı: işlem sırasında hata
  452 Talep edilen faaliyet alınamadı: yetersiz bellek alanı
  500 Sözdizimi hatası, komut tanınmıyor
      (Komut satırı çok uzun gibi hataları içerebilir)
  501 Bağımsız değişken ya da bağımsız değişkenlerde sözdizimi hatası
  502 Komut gerçeklenmedi (bkz, 502 Yanıt Kodu)
  503 Komutların sırası hatalı
  504 Komut bağımsız değişkeni gerçeklenmedi
  550 İstenen eylem yerine getirilemedi: posta kutusu elverişli değil
      (örn, posta kutusu bulunamadı, erişilemedi veya
       kurallar gereği komut reddedildi)
  551 Kullanıcı yerel kullanıcı değil; lütfen <sevk-yolu> adresini deneyin
      (bkz, Adres Düzeltmek veya Güncellemek için Yönlendirme)
  552 İstenen posta eylemi yerine getirilemedi: saklama alanı yetmiyor
  553 İstenen eylem yerine getirilemedi: posta kutusu ismine izin yok
      (örn, posta kutusu isminde sözdizimi hatası)
  554 Aktarım başarısız oldu (Veya, bir bağlantı açılış yanıtında:
      "Burada öyle bir SMTP hizmeti verilmiyor")

4.2.4. 502 Yanıt Kodu

502 yanıt kodu (Komut gerçeklenmedi) diğer kodlara tercih edildiğinde *ÖNERİ*, sorular yükselir. 502 yanıt kodu, komutun aslında SMTP sunucusu tarafından tanındığı ama gerçeklenmediği durumda kullanılmalıdır *ÖNERİ*. Eğer komut tanınmıyorsa 500 yanıt kodu döndürülmelidir *ÖNERİ*. Eklentili SMTP sistemleri EHLO yanıtında yeteneklerini listelerken 502 (veya 500) döndürecekleri yetenekleri belirtmemelidir *ZORUNLU*.

4.2.5. <CRLF>.<CRLF>'in Ardından DATA Komutuna Yanıt

Bir SMTP sunucusu DATA komutu <CRLF>.<CRLF> ile tamamlandıktan sonra bir 2yz Tamamlama Olumlu yanıtı geri döndürdüğünde şu sorumlulukları almış olur:

  • iletinin teslimatı (alıcı posta kutusu mevcutsa) veya

  • eğer geçici durumlar yüzünden (gecikerek) ileti teslim etmeye çalışacaksa, Yanıt Stratejileri bölümünde belirtilen zaman aralıklarıyla makul sayıda yineleyerek iletinin teslimatı

  • iletinin teslimat çalışması kalıcı durumlar yüzünden başarısız olursa veya geçici durumlar yüzünden yinelenen teslimat çabası başarısız olursa, özgün ileti göndericisine uygun bir uyarı iletisinin gönderilmesi (SMTP MAIL komutundaki adresi kullanarak).

Bir SMTP sunucusu DATA komutu <CRLF>.<CRLF> ile tamamlandıktan sonra bir kalıcı hata durumu (5yz) kodu geri döndürdüğünde, iletiyi teslim etmek için bir daha teşebbüste bulunmamalıdır *ZORUNLU*. İletinin teslimatı SMTP istemcisinin sorumluluğundadır ve bunu ya kullanıcıya geri döndürür ya da teslim etmeye çalışmak üzere yeniden kuyruğa alır (bkz, Gönderme Stratejisi).

İletinin kaynaklandığı kullanıcı, geçici hata durumundan dolayı bir dönüşü (posta iletisi veya başka bir şekilde) tıpkı kalıcı başarısızlıkta olduğu gibi teslimatın yapılamayışının bir belirtisi olarak yorumlayabilmelidir *ÖNERİ*. Yani, istemci SMTP sistemi bu durumları başarıyla ele alabiliyorsa, kullanıcı böyle bir yanıt almayacaktır.

Bir SMTP sunucusu DATA komutu <CRLF>.<CRLF> ile tamamlandıktan sonra bir kalıcı hata durumu (5yz) kodu geri döndürdüğünde, iletiyi teslim etmek için bir daha teşebbüste bulunmamalıdır *ZORUNLU*. Geçici hata durumu kodlarındaki gibi iletinin teslimatı yine SMTP istemcisinin sorumluluğundadır, fakat kullanıcı iletiyi inceleyip müdahale etmeden teslimatı tekrar aynı sunucuya yapmaya çalışmamalıdır *ÖNERİ*.