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:
-
1
yz
Ö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.
-
2
yz
Tamamlama Olumlu yanıtı -
İstenen eylem başarıyla tamamlanmıştır. Yeni bir istek başlatılabilir.
-
3
yz
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. -
4
yz
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
4
yz
ya da5
yz
(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ıtlar4
yz
yanıtlarıdır, şeklindedir. -
5
yz
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:
-
x
0
y
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.
-
x
1
y
Bilgi: -
Bunlar yardım veya durum bilgisi isteği gibi bilgi isteklerine yanıtlardır.
-
x
2
y
Bağlantılar: -
Bunlar aktarım kanalına atıfta bulunan yanıtlardır.
-
x
3
y
Belirsiz.x
4
y
Belirsiz. -
x
5
y
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
veyaEXPN
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
veyaEXPN
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 2
yz
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 (5
yz
) 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 (5
yz
) 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İ*.