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 parametreler 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 Argümanlarının 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 argümanları olarak iletişimi sağlayan çeşitli veri nesnelerinden oluşur. Dönüş yolu MAIL komutunun argümanı, sevk yolu RCPT komutunun, posta verisi ise DATA komutunun argümanıdır. Bu argümanlar 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) parametre almayacak şekilde belirtilmiştir. Sunucu tarafından sunulup istemci tarafından kabul edilen belli eklentilerin yokluğunda, istemcilerin böyle parametreler göndermemesi gerekir *ZORUNLU* ve sunucuların da geçersiz sözdizimine sahip oldukları gerekçesiyle bu komutları reddetmesi gerekir *ÖNERİ*.
Ayrıntılı Selamlama (
EHLO) veya Sade Selamlama (
HELO)
Bu komutlar, SMTP sunucusuna SMTP istemcisini tanıtmak için kullanılırlar. Argüman 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 parametre 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-parametresi )
ehlo-anahtar-sözcüğü = (HARF / RAKAM) *(HARF / RAKAM / "-")
; ehlo-anahtar-sözcüğü'ne bağlı olarak ehlo-parametresi
; için ilave sözdizimi
ehlo-parametresi = 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[145] bölümünde belirtilen uygulamanın basit bir uzantısıdır.
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. Argüman alanı bir dönüş yolunu içermekten başka isteğe bağlı parametreler 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 parametreleri de taşıyabilir.
Sözdizimi:
"MAIL FROM:" ("<>" / Dönüş-yolu)
[BOŞKRK Mail-Parametreler] CRLF
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. Argüman alanı bir sevk yolunu içermekten başka isteğe bağlı parametreler 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ırlar *ZORUNLU*, fakat kaynak rota belirtimini ayırmalı ve kaynak rota sağlanmamış gibi posta kutusu ile ilişkili alan adını kullanmalıdırlar *ÖNERİ*.
Benzer şekilde, röleleme konakları kaynak rotaları ayırmalı ya da yoksaymalı ve isimleri geri dönüş yoluna kopyalamamalıdırlar *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,
zarf komutları ile röleleme konağı xyz.com'dan alınan posta normal olarak,
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*:
zarf komutları ile hosta.int'e de veya,
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 parametreleri de taşıyabilir. İstemcinin, EHLO yanıtında, sunucu tarafından sunulan bir hizmet eklentisi ile ilgili olanlar dışında parametre iletmemesi gerekir *ZORUNLU*.
Sözdizimi:
"RCPT TO:" ("<Postmaster@" alan ">" / "<Postmaster>" / sevk-yolu)
[BOŞKRK Rcpt-parametreleri] CRLF
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ırlar *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.
Sözdizimi:
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ı argümansız 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ırlar *ÖNERİ*.
Sözdizimi:
Posta Kutusu Doğrulama (
VRFY komutu)
Bu komut, argümanında belirtilen bir kullanıcı veya posta kutusunu alıcının doğrulamasını ister. Eğer argüman 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:
Liste ve Üyelik Doğrulama (
EXPN komutu)
Bu komut argümanında 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:
Bu komut, sunucunun istemciye yardım bilgisi göndermesini sağlar. Bu komut bir argüman alabilir (örn, bir komut ismi) ve yanıt olarak argümana ö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 argümansız desteklemelidirler *ÖNERİ*, ancak argümanlarla birlikte de destekleyebilirler *SEÇİMLİK*.
Sözdizimi:
"HELP" [ BOŞKRK dizge ] CRLF
Eylemsizlik (
NOOP komutu)
Bu komut, hiçbir parametreyi 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 parametre dizgesi belirtilmişse sunucu bunu yoksaymalıdır *ÖNERİ*.
Sözdizimi:
"NOOP" [ BOŞKRK dizge ] CRLF
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: