4.1. SMTP Komutları

4.1.1. Komut Sözdizimi ve Anlamlandırma

Posta aktarımı veya kullanıcı tarafından talep edilen posta sistemi işlevi SMTP komutlarından, SMTP komutları, <CRLF> ile sonlandırılmış karakter dizilerinden oluşur. Komutların kendileri ise ardından bağımsız değişkenler geliyorsa <BOŞKRK> ile yoksa <CRLF> ile sonlandırımış alfabetik karakterlerden oluşur. (Birlikte çalışabilirlik uğruna, SMTP alıcıları sonlandırıcı <CRLF> öncesinde boşluk karakterliğinin varlığına müsamaha göstermişlerdir.) Bir posta kutusunun yerel kısmının sözdizimi alıcı site uzlaşımlarına ve Komut Bağımsız değişkenlerinin Sözdizimi bölümünde belirtilen sözdizimine uygun olmalıdır. SMTP komutlarından aşağıda bahsedilmiştir. SMTP yanıtlarından ise SMTP Yanıtları bölümünde bahsedilmiştir.

Bir posta harekatı farklı komutların bağımsız değişkenleri olarak iletişimi sağlayan çeşitli veri nesnelerinden oluşur. Dönüş yolu MAIL komutunun bağımsız değişkeni, sevk yolu RCPT komutunun, posta verisi ise DATA komutunun bağımsız değişkenidir. Bu bağımsız değişkenler veya veri nesneleri, harekatı sonlandıran posta verisi sonu belirteci ile anlaşılan onayı aktarmalı ve saklamalıdır. Bunun için model, veri nesnelerinin her türü için ayrı birer tampon bulundurmaktır. Yani, dönüş yolu için bir tampon, sevk yolu için bir tampon ve posta verisi için bir tampon vardır. Belli tamponlara bilgi eklenmesine veya bir veya daha fazla tamponun temizlenmesine sebep olan belli komutlar vardır.

Bazı komutlar (RSET, DATA, QUIT) bağımsız değişken almayacak şekilde belirtilmiştir. Sunucu tarafından sunulup istemci tarafından kabul edilen belli eklentilerin yokluğunda, istemcilerin böyle bağımsız değişkenler göndermemesi gerekir *ZORUNLU* ve sunucuların da geçersiz sözdizimine sahip oldukları gerekçesiyle bu komutları reddetmesi gerekir *ÖNERİ*.

4.1.1.1. Ayrıntılı Selamlama (EHLO) veya Sade Selamlama (HELO)

Bu komutlar, SMTP sunucusuna SMTP istemcisini tanıtmak için kullanılırlar. Bağımsız değişken alanı, SMTP istemcisinin varsa tamamen nitelenmiş alan adından oluşur. SMTP istemci sisteminin anlamlı bir alan adına sahip olmadığı durumlarda (örn, adres özdevimli ayrılmıştır ve ters eşleme kaydı (rDNS) yoktur), istemci adresin IP kodlu adını (bkz, IP Kodlu Adlar) göndermelidir *ÖNERİ*; ek olarak istenirse istemciyi tanıtmaya yardımcı olacak bilgiler de verilebilir. SMTP sunucusu ise, SMTP istemcisine kendisini tanıtmak için, bağlantı üzerinden bu komuta yanıt olarak bir karşılama iletisi gönderir.

Bir istemci SMTP bir SMTP oturumunu EHLO komutu göndererek başlatmalıdır *ÖNERİ*. Eğer SMTP sunucusu, SMTP hizmet eklentilerini destekliyorsa karşılık olarak bir başarı, başarısızlık ya da hata belirtebilir. Eğer bir SMTP sunucusu, bu belirtimi ihlal ederek, SMTP hizmet eklentilerinin hiçbirini desteklemiyorsa bir hata yanıtı üretecektir. Eski istemci SMTP sistemleri, evvelce bahsedildiği gibi, EHLO yerine (RFC 821'de belirtildiği gibi) HELO komutunu kullanabilir *SEÇİMLİK*; (bu bakımdan) sunucuların HELO komutunu desteklemesi ve komutu gerektiği gibi yanıtlaması gerekir *ZORUNLU*. Her halükarda, bir istemci bir posta aktarımına başlamadan önce bir HELO veya EHLO komutu göndermelidir *ZORUNLU*.

Bu komutlar ve bunlara verilen, hem SMTP istemcisini hem de sunucusunu onaylayan "250 OK" yanıtı, başlangıç aşamasıdır, yani, henüz bir aktarım yoktur ve tüm aşamaların tabloları ve tamponları temizdir.

Sözdizimi:

    ehlo            = "EHLO" BOŞKRK alan CRLF
    helo            = "HELO" BOŞKRK alan CRLF

Normalde EHLO komutunun yanıtı çok satırlı bir yanıt olacaktır. Yanıtın her satırı bir anahtar sözcük ve isteğe bağlı olarak bir veya daha fazla bağımsız değişken içerir. Çok satırlı yanıtların normal sözdiziminde, bu anahtar sözcükler yanıt kodundan (250) sonra gelir ve son satır haricinde koddan sonra bir tire işareti konur; son satırda ise bir boşluk konur. Olumlu bir yanıtın sözdizimi, ABNF gösterimi ve [8]'deki uçbirim sembolleri kullanılarak şöyledir:

   ehlo-tamam-yanıtı = ( "250"    alan [ BOŞKRK ehlo-karşılama ] CRLF )
                     / ( "250-"   alan [ BOŞKRK ehlo-karşılama ] CRLF
                      *( "250-"   ehlo-satırı                CRLF )
                         "250"    BOŞKRK ehlo-satırı             CRLF )

      ehlo-karşılama = 1*(%d0-9 / %d11-12 / %d14-127)
                       ; CR veya LF içermeyen bir dizge

         ehlo-satırı = ehlo-anahtar-sözcüğü *( BOŞKRK ehlo-bağımsız değişkeni )

ehlo-anahtar-sözcüğü = (HARF / RAKAM) *(HARF / RAKAM / "-")
                       ; ehlo-anahtar-sözcüğü'ne bağlı olarak ehlo-bağımsız değişkeni
                       ; için ilave sözdizimi

    ehlo-bağımsız değişkeni = 1*(%d33-127)
                       ; <BOŞKRK> hariç herhangi bir karakter ve
                       ; tüm denetim karakterleri (US-ASCII 0-31 dahil)

EHLO anahtar sözcükleri büyük, küçük ve bunların karışımı harflerle belirtilebildiğinden, bunlar daima harf büyüklüğüne duyarsız olarak olarak ele alınmalı ve işleme sokulmalıdır *ZORUNLU*. Bu, RFC 821 ve Sözdizimsel Genel Prensipler ve Harekât Modeli[76] bölümünde belirtilen uygulamanın basit bir uzantısıdır.

4.1.1.2. Posta' (MAIL komutu)

Postanın bir veya daha fazla posta kutusuna teslimi veya başka bir sisteme aktarılması (büyük olasılıkla SMTP kullanarak) için posta verisinin bir SMTP sunucusuna teslimi başlatılırken bu komut kullanılır. Bağımsız değişken alanı bir dönüş yolunu içermekten başka isteğe bağlı bağımsız değişkenler de içerebilir. Genelde MAIL komutu hiçbir posta aktarımı yokken gönderilebilir; Komutların Sırası bölümüne bakınız.

Dönüş yolu göndericinin posta kutusundan oluşur. Tarihsel olarak, bu posta kutusu bir konak listesi ile de başlayabilirdi, fakat bu davranış artık önerilmemektedir (bkz, Kaynak Rotalar). Postalama kısır döngülerine yolaçan bir yanıt ile ilgili raporlama iletilerinin bazı türlerinde (posta teslimatı uyarıları veya teslim edememe uyarıları gibi), dönüş yolu boş olabilir (bkz, Röleleme).

Bu komut, dönüş yolu, sevk yolu ve posta verisi tamponlarını temizledikten sonra bu komuttaki dönüş yolu bilgisini dönüş yolu tamponuna yerleştirir.

Hizmet eklentileri için karşılıklı uzlaşılmışsa, MAIL komutu ayrıca, bu hizmet eklentileri ile ilgili bağımsız değişkenleri de taşıyabilir.

Sözdizimi:

  "MAIL FROM:" ("<>" / Dönüş-yolu)
                    [BOŞKRK ePosta-Bağımsız-Değişkenleri] CRLF

4.1.1.3. Alıcının Belirtilmesi (RCPT komutu)

Bu komut posta verisinin alıcılarını tek tek belirtmek için kullanılır; çok sayıda alıcı belirtilecekse, komut sayısı alıcı sayısı kadar olur. Bağımsız değişken alanı bir sevk yolunu içermekten başka isteğe bağlı bağımsız değişkenler de içerebilir.

Sevk yolu gerekli olan varış posta kutusundan oluşur. Gönderen sistemlerin, bir kaynak rota olarak bilinen konakların seçimlik listesini üretmeleri gerekir *ÖNERİ*. Alıcı sistemler kaynak rota sözdizimini bilmek zorundadır *ZORUNLU*, fakat kaynak rota belirtimini ayırmalı ve kaynak rota sağlanmamış gibi posta kutusu ile ilişkili alan adını kullanmalıdır *ÖNERİ*.

Benzer şekilde, röleleme konakları kaynak rotaları ayırmalı ya da yoksaymalı ve isimleri geri dönüş yoluna kopyalamamalıdır *ZORUNLU*. Posta nihai hedefine ulaştığında (sevk yolu sadece varış posta kutusunu içerir), SMTP sunucusu onu, kendi konak posta uzlaşımları gereğince, hedef posta kutusuna yerleştirir.

Örneğin,

MAIL FROM:<userx@y.foo.org>
    RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>

zarf komutları ile röleleme konağı xyz.com'dan alınan posta normal olarak,

MAIL FROM:<userx@y.foo.org>
    RCPT TO:<userc@d.bar.org>

zarf komutları ile doğrudan d.bar.org konağına gönderilmiş olacaktır. Kaynak Rotalar ekinde belirtildiği gibi, xyz.com ayrıca iletiyi hosta.int'e de rölelemeyi seçebilir *SEÇİMLİK*:

MAIL FROM:<userx@y.foo.org>
    RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>

zarf komutları ile hosta.int'e de veya,

MAIL FROM:<userx@y.foo.org>
    RCPT TO:<@jkl.org:userc@d.bar.org>

zarf komutları ile jkl.org'a da röleleyebilir.

Hizmet eklentileri karşılıklı uzlaşılmışsa, RCPT komutu ek olarak sunucu tarafından sunulan belli bir hizmet eklentisi ile ilgili bağımsız değişkenleri de taşıyabilir. İstemcinin, EHLO yanıtında, sunucu tarafından sunulan bir hizmet eklentisi ile ilgili olanlar dışında bağımsız değişken iletmemesi gerekir *ZORUNLU*.

Sözdizimi:

  "RCPT TO:" ("<Postmaster@" alan ">" / "<Postmaster>" / sevk-yolu)
                    [BOŞKRK Rcpt-bağımsız değişkenleri] CRLF

4.1.1.4. Posta Verisi (DATA komutu)

Alıcı DATA komutuna normalde bir 354 yanıtı gönderir ve komuttan sonrasını göndericiden yollanan veri olarak, (Satırlar bölümünde bahsedildiği gibi, CRLF ile biten) satırlar halinde ele alır. Bu komut, posta verisinin posta verisi tamponuna eklenmesini sağlar. Deneyimlerin BOŞKRK (boşluk), YSEK (yatay sekme), CR (satırbaşı), ve LF (satırsonu) dışında kontrol karakteri kullanımının sorunlara yol açacağını ve mümkün oldukça bundan kaçınılması gerektiğini *ÖNERİ* göstermesine rağmen, posta verisi 128 ASCII karakterin her birini içerebilir.

Posta verisi tek bir nokta içeren bir satırla, yani "<CRLF>.<CRLF>" karakter dizisiyle sonlanır (bkz, Şeffaflık). Bu posta verisi varlığının sona erdiğini gösterir. Bu sonlandırma dizgesindeki ilk <CRLF>'in ayrıca verinin son satırının sonunu, hatta eğer veri yoksa, DATA komutunun sonunu belirttiğine dikkat ediniz. İletinin sonuna boş bir satır eklenmesine yolaçacak ek bir <CRLF> kullanılmamalıdır *ZORUNLU*. Bu kuralın tek istisnası, ilk çıkış SMTP göndericisine aktarılan ileti gövdesinin <CRLF> ile bitmeyen bir sonuncu satır içermesi durumudur; bu durumda ilk çıkış SMTP sistemi ya geçersiz sayarak iletiyi reddetmeli *ZORUNLU* ya da alan SMTP sunucusu "veri sonu" durumunu arayacağından iletiye eksik <CRLF>'i kendi eklemelidir *ZORUNLU* (ikisinden biri zorunlu).

Bazı UNIX sistemlerinde uyumsuz davranışa bir taviz olarak, çözümlediğinden fazla birlikte çalışabilirlik sorunlarına sebep olduğu kanıtlanmış sadece <LF> ile biten satırların kabul edilmesi özelinde, dayanıklılığı arttırmak/mükemmelleştirmek adına yapılıyor olarak sunulsa bile, SMTP sunucu sistemleri bunu yapmamalıdır *ZORUNLU*. Özellikle, "<LF>.<LF>" dizgesi (çıplak, satırbaşı karakterleri olmaksızın satırsonu karakterleri arasında nokta) posta verisinin sonunu belirten <CRLF>.<CRLF> dizgesinin eşdeğeri olarak ele alınmamalıdır *ZORUNLU*.

Posta verisi sonu belirtecinin alınması sunucunun saklanan posta aktarım bilgisini işleme koymasını gerektirir. Bu işlem, dönüş yolu, sevk yolu ve posta verisi tamponlarındaki bilgilerin toplanmasını da kapsar ve komutun işi bittiğinde bu tamponlar temizlenir. İşlem başarıyla tamamlanmışsa, alıcı bir tamam yanıtı göndermelidir *ZORUNLU*. Aksi takdirde, alıcı bir başarısızlık yanıtı göndermelidir *ZORUNLU*. SMTP modeli bu noktada kısmi başarısızlıklara izin vermez: ya ileti teslim edilmek üzere sunucu tarafından kabul edilip bir olumlu yanıt verilir ya da kabul edilmez ve bir başarısızlık yanıtı gönderilir. Posta verisi sonu alındıktan sonra bir olumlu tamamdır yanıtı gönderilmesiyle, alıcı iletinin tüm sorumluluğunu almış olur (bkz, Güvenilir Teslimat ve Eposta Yanıtları). Bundan sonra tespit edilen hatalar, İzleme Bilgisi bölümünde açıklandığı gibi, bir posta iletisinde raporlanmalıdır *ZORUNLU*.

SMTP sunucusu rölelemek veya yerine teslim etmek için kabul ettiğinde, posta verisinin üst kısmına bir izleme kaydı ekler (ayrıca, "Received" -alındı- satırı veya "zaman damgası satırı" olarak da bilinir). Bu izleme kaydında, iletiyi gönderen ve alan konakların kimliği ile iletinin alındığı tarih ve saat belirtilir. Rölelenen iletilerin birden fazla zaman damgası satırı olur. Bu satırların oluşturulması sözdizimleriyle birlikte İzleme Bilgisi bölümünde ayrıntılı olarak belirtilmiştir.

DATA komutunun işlemlerinden ayrıca Posta Aktarım Harekâtı bölümünde de bahsedilmiştir.

Sözdizimi:

    "DATA" CRLF

4.1.1.5. Sıfırlama (RSET komutu)

Bu komut o an ki posta harekatının ister istemez duracağını belirtir. Saklanmış olan gönderici, alıcılar ve posta verisi iptal edilip tüm tamponlar ve durum tabloları temizlenmelidir *ZORUNLU*. Alıcı bağımsız değişkeniz bir RSET komutuna bir "250 OK" yanıtı göndermelidir *ZORUNLU*. Sıfırlama komutu istemci tarafından herhangi bir anda gönderilebilir. Oturumda EHLO komutundan hemen önce veya sonra ve posta verisi sonu belirtecinden sonra veya bir QUIT komutundan hemen önce gönderilmesi halinde etki bakımından bir NOOP komutuna eşdeğerdir (etkisizlik anlamında). Bir SMTP sunucusu aldığı bir RSET komutunun sonucu olarak bağlantıyı kapatmamalıdır *ZORUNLU*; Bu eylem QUIT komutuna ayrılmıştır (bkz, Çıkış (QUIT komutu)).

EHLO komutu sunucu tarafından yerine getirilecek bazı ek işlemler ve yanıtlar gerektirdiğinden, normal olarak RSET komutu, biçimsel anlamsallığı aynı olmasına rağmen bile, EHLO komutunu yeniden göndermekten daha verimli olacaktır.

Bu belirtimin amacının aksine, bir SMTP sunucusunun, temel TCP bağlantısının kapanması veya sıfırlanmasının belirtilerini aldığı bazı durumlar vardır. Posta sisteminin dayanıklılığını korumak için SMTP sunucuları bu duruma hazır olmalı *ÖNERİ* ve bağlantı kaybolmadan önce bir QUIT komutu almış gibi davranmalıdır *ÖNERİ*.

Sözdizimi:

    "RSET" CRLF

4.1.1.6. Posta Kutusu Doğrulama (VRFY komutu)

Bu komut, bağımsız değişkeninde belirtilen bir kullanıcı veya posta kutusunu alıcının doğrulamasını ister. Eğer bağımsız değişken bir kullanıcı ismi ise bilgi, Adres Hatalarını Ayıklama Komutları bölümünde belirtilen şekilde döndürülür.

Bu komutun dönüş yolu, sevk yolu veya posta verisi tamponu üzerinde bir etkisi yoktur.

Sözdizimi:

    "VRFY" BOŞKRK dizge CRLF

4.1.1.7. Liste ve Üyelik Doğrulama (EXPN komutu)

Bu komut bağımsız değişkeninde belirtilen bir posta listesinin doğrulanmasını ister ve eğer böyleyse, liste üyeliğinin döndürülmesini talep eder. Eğer komut başarılıysa, Adres Hatalarını Ayıklama Komutları bölümünde açıklanan bilgiyi içeren bir yanıt döndürülür. Bu yanıt bir (listenin tek bir üyesi olması durumu) veya daha fazla satır içerecektir.

Bu komutun dönüş yolu, sevk yolu veya posta verisi tamponu üzerinde bir etkisi yoktur ve her zaman gönderilebilir.

Sözdizimi:

    "EXPN" BOŞKRK dizge CRLF

4.1.1.8. Yardım (HELP komutu)

Bu komut, sunucunun istemciye yardım bilgisi göndermesini sağlar. Bu komut bir bağımsız değişken alabilir (örn, bir komut ismi) ve yanıt olarak bağımsız değişkene özgü bilgi döndürebilir *SEÇİMLİK*.

Bu komutun dönüş yolu, sevk yolu veya posta verisi tamponu üzerinde bir etkisi yoktur ve her zaman gönderilebilir.

SMTP sunucuları HELP komutunu bağımsız değişkeniz desteklemelidir *ÖNERİ*, ancak bağımsız değişkenler ile birlikte de destekleyebilir *SEÇİMLİK*.

Sözdizimi:

    "HELP" [ BOŞKRK dizge ] CRLF

4.1.1.9. Eylemsizlik (NOOP komutu)

Bu komut, hiçbir bağımsız değişkeni ya da daha önce girilmiş hiçbir komutu etkilemez. Alıcının OK yanıtı göndermesi dışında hiçbir faaliyet belirtmez.

Bu komutun dönüş yolu, sevk yolu veya posta verisi tamponu üzerinde bir etkisi yoktur ve her zaman gönderilebilir. Bir bağımsız değişken dizgesi belirtilmişse sunucu bunu yoksaymalıdır *ÖNERİ*.

Sözdizimi:

    "NOOP" [ BOŞKRK dizge ] CRLF

4.1.1.10. Çıkış (QUIT komutu)

Bu komut, alıcının OK yanıtını göndermesi ve ardından da aktarım kanalını kapatması *ZORUNLU* gerektiğini belirtir.

Alıcı aktarım kanalını, QUIT komutu alınana ve yanıtlanana kadar kasten kapatmamalıdır (bir hata oluşmuş olsa bile) *ZORUNLU*. Gönderen ise QUIT komutunu gönderip yanıtı almadan aktarım kanalını kasten kapatmamalıdır (daha önceki bir komuta bir hata yanıtı olsa bile) *ZORUNLU*. Eğer bağlantı, daha önce bahsedilmiş olan bozukluklar ya da sistem veya ağ hataları yüzünden vaktinden önce kapatılmışsa, sunucu askıda bekleyen herhangi bir hareketi iptal etmeli *ZORUNLU*, fakat daha önce tamamlanmış olan bir hareketi geri almamalı *ZORUNLU* ve genellikle komut ya da hareket işlemdeymiş de o sırada geçici bir hata alınmışmış gibi davranmalıdır *ZORUNLU* (örneğin, bir 4yz yanıtı).

QUIT komutu her zaman gönderilebilir.

Sözdizimi:

    "QUIT" CRLF

4.1.2. Komut Bağımsız değişkenlerinin Sözdizimi

Yukarıda sözü edilen komutların bağımsız değişken alanlarının sözdizimleri (uygulanabildiği yerlerde [8]'de belirtilen sözdizimleri kullanılarak) aşağıda verilmiştir. Aşağıda verilen bazı gösterimler, sadece Kaynak Rotalar bölümünde anlatılan kaynak rotaları ile birarada kullanılır. HARF, RAKAM, BOŞKRK, CR, LF, CRLF gibi karakterlerden bu belgede söz edilmemiştir; bunlar, "çekirdek" sözdizimi olarak [8 (6. bölüm)]'de ve ileti biçimi sözdizimi olarak [32]'de tanımlanmıştır.

    Dönüş-Yolu = Yol
    Sevk-Yolu  = Yol
    Yol = "<" [ A-d-l ":" ] Posta-kutusu ">"
    A-d-l = Alan-da *( "," A-d-l )
          ; Bu biçime dikkat, "kaynak rota" da denir ve
          ; kabul edilmesi *ZORUNLU*, üretilmemesi *ÖNERİ*
          ; ve yoksayılması *SEÇİMLİK* gerekir.
    Alan-da = "@" alan
    Mail-bağımsız değişkenleri = esmtp-param *(BOŞKRK esmtp-param)
    Rcpt-bağımsız değişkenleri = esmtp-param *(BOŞKRK esmtp-param)

    esmtp-param     = esmtp-anah-klm ["=" esmtp-değeri]
    esmtp-anah-klm  = (HARF / RAKAM) *(HARF / RAKAM / "-")
    esmtp-değeri    = 1*(%d33-60 / %d62-127)
          ; "=" hariç herhangi bir KARakter, BOŞKRK (boşluk)
          ; ve denetim karakterleri
    Anah-klm = Hrt-dizge
    Bağımsız-değişken  = Atom
    Alan     = (alt-alan 1*("." alt-alan)) / IP-kodlu-ad
    Alt-alan = Harf-rakam [Hrt-dizge]

    IP-kodlu-ad = "["  IPv4-kodlu-ad  /
                       IPv6-kodlu-ad  /
                       Genel-kodlu-ad "]"
          ; bkz, IP Kodlu Adlar

    Posta-kutusu = Yerel-kısım "@" Alan

    Yerel-kısım  = Noktalı-dizge / Tırnaklı-dizge
          ; harf büyüklüğüne duyarlılık *SEÇİMLİK*

    Noktalı-dizge = Atom *("." Atom)

    Atom = 1*birmetin

    Tırnaklı-dizge = ÇTIRNAK *tdizge ÇTIRNAK

    Dizge = Atom / Tırnaklı-dizge

Yerel-kısım için yukarıdaki tanım, birlikte çalışabilirliğin en yüksek derecede olabilmesi için görece serbest olduğu sürece posta almayı uman bir konak Yerel-kısım'ları Tırnaklı-dizge biçimini gerektiren veya harf büyüklüğüne duyarlı olmayı gerektiren posta kutuları tanımlamaktan kaçınmalıdır *ÖNERİ*. Yerel-kısımların üretilmesini ve karşılaştırılmasını gerektiren her amaç (posta kutularının isimlerine özgü olmak gibi) için, tırnaklı tüm biçimler eşdeğer olarak ele alınmalı *ZORUNLU* ve gönderen sistem olası en az tırnaklama kullanan biçimde aktarmalıdır *ÖNERİ*.

Sistemler, posta kutularını, ASCII olmayan karakterlerin (yüksek bitleri 1 olan sekizliler) veya ASCII "denetim karakterleri"nin (onluk değerleri 0-31 ve 127 olan karakterler) SMTP'de kullanılmasını gerektirecek şekilde tanımlamamalıdır *ZORUNLU*. Bu karakterler MAIL ve RCPT komutları ile posta kutusu ismi gerektiren diğer komutlarda kullanılmamalıdır *ZORUNLU*.

Tersbölü "\" karakterinin, kendinden sonra gelen karakterin harfiyen yorumlanmasını (normal yorumu yerine) belirtmek üzere kullanılması bakımından bir önceleme karakteri oluşuna dikkat ediniz. Örneğin, "Joe\,Smith", dördüncü karakteri virgül olan dokuz karakterlik bir kullanıcı alanı belirtir.

Uygulamalarda ve isimlendirmede DNS'nin (örn, temel DNS belgesi RFC 1035'in [22] 2.3.1. bölümüne bakınız) uzun süredir devam eden tutucu kullanımıyla tutarlılığı ve birlikte çalışabilirliği yükseltmek için, harfler, rakamlar ve tire işareti dışındaki karakterler SMTP istemcileri ve sunucularının alan adı yaftalarında görünmemelidir *ZORUNLU*. Özellikle, altçizgi karakterine izin verilmemiştir. Geçersiz karakterlerden oluşan bir komut alan her SMTP sunucusu, reddi için başka bir sebep yoksa, bu komutu bir 501 yanıtı ile reddetmelidir *ZORUNLU*.

4.1.3. IP Kodlu Adlar

Bazan, bir konak, alan adı sistemi tarafından bilinmez ve iletişim engellenir (özellikle, bir hatayı bildirme ve giderme iletişiminde). Bu engeli aşmak için, bir alan isminin yerine kullanılmak üzere adresin özel kodlanmış bir biçimine izin verilir. IPv4 adresler için bu biçim, bir Genel Ağ adresini (IPv4) [123.255.37.2] örneğindeki gibi, köşeli ayraç içine alınmış, birbirlerinden noktalarla ayrılmış, sıralı, dört küçük, sekiz bitlik bayta sığabilen onluk tamsayılar biçiminde kullanılır. En sonunda standartlaşabilen IPv6 ve diğer adres biçimleri için biçim, IPv6 standartlarının [17] bir parçası olarak belirtilen biçimde, bir ikinokta üstüste ve adresin kendisi olarak adres sözdizimini tanımlayan standartlaşmış bir "yafta"dan oluşur.

Özellikle:

    IPv4-kodlu-ad  = Snum 3("." Snum)
    IPv6-kodlu-ad  = "IPv6:" IPv6-adrs
    Genel-kodlu-ad = Standardize-yafta ":" 1*tdizge
    Standardize-yafta  = Hrt-dizge
          ; Standartlaşma aşamalarındaki bir RFC'de belirtilmiş *ZORUNLU*
          ; ve IANA ile kayıt altına alınmış olmalıdır *ZORUNLU*.

    Snum = 1*3RAKAM  ; 0 ile 255 arasındaki onluk bir tamsayı gösterimi
    Harf-rakam = HARF / RAKAM
    Hrt-dizge  = *( HARF / RAKAM / "-" ) Harf-rakam

    IPv6-adrs   = IPv6-tam / IPv6-kısmi / IPv6v4-tam / IPv6v4-kısmi
    IPv6-onaltı = 1*4ONALTILIKRAKAM
    IPv6-tam    = IPv6-onaltı 7(":" IPv6-onaltı)
    IPv6-kısmi  = [IPv6-onaltı *5(":" IPv6-onaltı)] "::" [IPv6-onaltı *5(":"
                   IPv6-onaltı)]
          ; "::" ile en az 2 tane 16 bitlik sıfır grubu belirtilir.
          ; "::"ye ek olarak 6 gruptan fazlası yoktur.
    IPv6v4-tam   =  IPv6-onaltı  5(":" IPv6-onaltı)  ":"  IPv4-kodlu-ad
    IPv6v4-kısmi = [IPv6-onaltı *3(":" IPv6-onaltı)] "::"
                   [IPv6-onaltı *3(":" IPv6-onaltı)  ":"] IPv4-kodlu-ad
          ; "::" ile en az 2 tane 16 bitlik sıfır grubu belirtilir.
          ; "::"ye ek olarak 4 gruptan fazlası yoktur ve
          ; IPv4-kodlu-ad bulunabilir.

4.1.4. Komutların Sırası

Hangi komutun hangi sırada kullanılacağına ilişkin sınırlamalar vardır.

Posta aktarımını içerecek bir oturum önce EHLO komutu kullanarak ilklendirilmelidir *ZORUNLU*. Posta aktarımı yapılmayacaksa bir SMTP sunucusu bu ilklendirme olmaksızın komut kabul edebilmelidir *ÖNERİ* (VRFY veya EXPN gibi).

İstemci tarafından oturum sırasında bir EHLO komutu gönderilebilir. Oturum başlangıcından sonra gönderilmişse, SMTP sunucusu tüm tamponları temizlemeli ve bir RSET komutu alınmışçasına aşamayı sıfırlamalıdır. Başka bir deyişle, RSET'in hemen ardından EHLO kullanımı gereksizdir ama lüzumsuz komutların çalıştırılmasının başarıma maliyeti yanında zararsızdır.

Eğer EHLO komutu SMTP sunucusu tarafından kabul edilebilir değilse, 501, 500 veya 502 başarısızlık yanıtlarından hangisi uygunsa o gönderilmelidir *ZORUNLU*. SMTP sunucusu bu yanıtlar aktarılıncaya kadar EHLO alınmadan önceki durumunda kalmalıdır *ZORUNLU*.

SMTP istemcisi, eğer mümkünse, EHLO komutundaki alan bağımsız değişkeninin kendi konağı için geçerli bir asıl konak adı (bir CNAME veya MX ismi değil) içerdiğinden emin olmalıdır *ZORUNLU*. Bu mümkün değilse (örneğin, istemcinin adresi özdevimli atanmıştır ve istemci belirgin bir isme sahip değildir), alan ismini bir IP kodlu adla ikame etmeli *ÖNERİ* ve istemciyi tanıtmaya yardımcı olacak ek bilgileri de sağlamış olmalıdır.

SMTP sunucusu, EHLO komutundaki alan adı bağımsız değişkeninin istemcinin IP adresine tekabül edip etmediğini doğrulatabilir *SEÇİMLİK*. Ancak, doğrulama başarısız olursa, sunucu bu sebeple bir iletiyi reddetmemelidir *ZORUNLU*; doğrulama bilgisi başarısızlığı sadece oturum açma ve izleme gecikmelerinden kaynaklanmış olabilir.

NOOP, HELP, EXPN, VRFY ve RSET komutları oturum sırasında veya önceden oturumu ilklendirmeksizin herhangi bir anda kullanılabilir. SMTP sunucuları bunları evvelce bir EHLO komutu alınmamış olsa bile normal olarak (yani, bir 503 kodu döndürmeksizin) işleme almalı *ÖNERİ*; istemciler ise bu komutları göndermeden önce EHLO ile bir oturum açmalıdır *ÖNERİ*.

Eğer bu kurallara uyulursa, RFC 821'deki bir örnekteki, bir EXPN komutuna "550 erişiminize izin verilmedi" yanıtının verilmesi, EXPN komutunun öncesinde bir EHLO olmadıkça veya erişim yasağı istemcinin IP adresine veya diğer kimlik kanıtlama/saptama mekanizmalarından kaynaklanmadıkça yanlış olacaktır.

MAIL komutu (veya artık atıl olan SEND, SOML ve SAML komutları) bir posta aktarımı başlatır. Başlatıldığında, bir posta aktarımı, sırasıyla, bir aktarım başlatma komutu, bir veya daha fazla RCPT komutu ve bir DATA komutundan oluşur. Bir posta aktarımı RSET (veya yeni bir EHLO) komutu ile terkedilebilir. Bir oturumda birden fazla posta aktarımı yapılabildiği gibi hiç posta aktarımı da yapılmayabilir. MAIL komutu (veya artık atıl olan SEND, SOML ve SAML komutları) zaten açık olan bir posta aktarımında gönderilmemelidir *ZORUNLU*, yani, sadece şu durumlarda gönderilebilir: başlatılmış bir posta aktarımı yoksa veya aktarım başarılı bir DATA komutuyla önceden tamamlanmışsa ya da evvelce bir RSET ile oturum terkedilmişse.

Eğer aktarım başlatma komutunun bağımsız değişkeni kabul edilebilir değilse, bir 501 başarısızlık yanıtı döndürülmeli *ZORUNLU* ve SMTP sunucusu aynı durumda kalmalıdır *ZORUNLU*. Bir aktarımdaki komutlar sunucu tarafından işlenemeyecek derecede sırasızsa, bir 503 başarısızlık yanıtı döndürülmeli *ZORUNLU* ve SMTP sunucusu aynı durumda kalmalıdır *ZORUNLU*.

Bir oturumdaki son komut QUIT komutu olmalıdır *ZORUNLU*. QUIT komutu oturum sırasında herhangi bir başka zaman kullanılamaz, fakat bir oturum açma komutu gönderilmiş veya alınmış olmasa bile, SMTP istemcisi tarafından bağlatının kapatılmasını istemek için kullanılması gerekir *ÖNERİ*.

4.1.5. Özel Kullanımlı Komutlar

Eklentilerin Tanımlanması ve Kayda Geçirilmesi bölümünde belirtildiği gibi, "X" ile başlayan komutlar istemci (gönderen) ve sunucu (alan) SMTP sistemleri arasında karşılıklı uzlaşılarak kullanılabilir. Böyle bir komutu tanımayan bir SMTP sunucusunun komutu, "500 Komut tanınmıyor" ile yanıtlaması beklenir. Eklentili bir SMTP sunucusu EHLO komutunun yanıtında bu özel komutlarla ilgili özellik isimlerini listeleyebilir *SEÇİMLİK*.

SMTP sistemlerince gönderilip kabul edilen "X" ile başlamayan komutlar Eklentilerin Tanımlanması ve Kayda Geçirilmesi bölümündeki gereksinimlere uymalıdır *ZORUNLU*.



[76] Ç.N. - Bu bağ özgün metinde 2.4.1 numaralı bölümü göstermektedir. http://www.mhonarc.org/archive/html/ietf-smtp/2002-07/msg00053.html adresindeki iletide belgenin yazarı bu atıfların aslında 6.3 numaralı bölümü göstermesi gerektiğini belirtmektedir. Ancak aynı listeye 3 yıl sonra gönderilen başka bir iletide özellikle bu bağın 2.4 numaralı bölümü göstermesi gerektiği belirtilmektedir. (6.3 numaralı bölümde harf büyüklüklerinden bahis yoktur.) Buradaki bağ bu saptamaya göre düzeltilmiştir.