POSTA AKTARIM PROTOKOLÜ
Network Working Group
S. Sluizer
Request for Comments: 772
J. Postel
ISI
Eylül 1980
ÖNSÖZ
Bu, bu protokolün ilk taslağıdır ve yorumlar kesinlikle talep edilmektedir.
GİRİŞ
Posta Aktarım Protokolü’nün (MTP) amacı, postayı güvenilir ve verimli bir şekilde aktarmaktır.
Bu belge, ARPA Internet Protocol Handbook içinde açıklanan aşağıdaki protokollerin bilindiğini varsayar. Okuyucu, File Transfer Protocol’ün bazı bölümleriyle güçlü benzerlikler olduğunu fark edecektir; bunun bir nedeni, bilgisayar postasının ARPA Network üzerindeki ilk uygulamasının FTP’nin bir özelliği olarak gerçekleştirilmiş olmasıdır.
- ARPANET Host-to-Host Protocol [Network Control Protocol] (NCP)
- Transmission Control Protocol (TCP)
- TELNET Protocol (TELNET)
- File Transfer Protocol (FTP)
TARTIŞMA
Bu bölümde, terminoloji ve MTP modeli ele alınmaktadır. Bu bölümde tanımlanan terimler yalnızca MTP içinde özel anlam taşıyanlardır. Terminolojinin bir kısmı MTP modeline oldukça özgüdür; bazı okuyucular terminolojiyi incelerken MTP modeli bölümüne bakmak isteyebilir.
TERMİNOLOJİ
ASCII
ARPA Internet Protocol Handbook içinde tanımlanan ASCII karakter kümesi. MTP’de ASCII karakterleri sekiz bitlik bir kod kümesinin alt yarısı olarak tanımlanır (yani en anlamlı bit sıfırdır) ve NVT-ASCII olarak adlandırılır.
kontrol bağlantısı
Bir sender-MTP ile bir receiver-MTP arasında komutların, yanıtların ve posta metninin değişimi için kullanılan TCP tam çift yönlü iletişim yolu veya iki adet NCP tek yönlü iletişim yolu. Kontrol bağlantısı TELNET Protocol’e göre çalışır.
veri modu
Posta, kontrol bağlantısı üzerinden bir oktet akışı olarak iletilir. (FTP terminolojisinde buna stream mode denir.)
veri yapısı
Postanın iç yapısı, kesintisiz bir veri oktetleri dizisi olarak kabul edilir. (FTP terminolojisinde buna file-structure denir.)
veri gösterimi
Tüm verilerin (yani postanın) iç gösterimi NVT-ASCII biçimindedir.
host
Posta kutularının bulunduğu ağlar arası ortamda yer alan bir bilgisayar.
MTP komutları
sender-MTP’den receiver-MTP’ye akan kontrol bilgilerini oluşturan komutlar kümesi.
posta
Keyfi uzunlukta bilgisayar verilerinden oluşan sıralı bir küme olup RFC 733’te (ARPA Network Text Messages Format Standardı) belirlenen standarda uygundur.
posta kutusu (mailbox)
Posta gönderilecek kullanıcıyı tanımlayan bir karakter dizisi (adres). Posta kutusu genellikle host ve kullanıcı tanımlarından oluşur. Standart posta kutusu adlandırma kuralı "user@host" olarak tanımlanır. Ayrıca postanın saklandığı "kapsayıcıyı" da ifade eder.
NVT
TELNET Protocol içinde tanımlanan Network Virtual Terminal.
oktet
MTP’de baytlar oktet (8 bit) olarak kabul edilir. Bu, verilerin bir host içinde saklandığı bayt boyutuyla mutlaka aynı olmak zorunda değildir.
yanıt (reply)
Yanıt, bir MTP komutuna karşılık olarak receiver’dan sender’a kontrol bağlantısı üzerinden gönderilen bir onaydır (olumlu veya olumsuz). Bir yanıtın genel biçimi, bir tamamlanma kodu (hata kodları dahil) ve ardından gelen bir metin dizisinden oluşur. Kodlar programlar tarafından kullanılmak içindir ve metin genellikle insan kullanıcılar için tasarlanmıştır.
receiver-MTP süreci
Bir sender-MTP süreciyle iş birliği içinde posta aktaran bir süreç. sender-MTP’den gelen bağlantıyı kendi port/socket L üzerinde "dinler" ve TELNET Protocol kullanarak bir kontrol bağlantısı kurar. sender-MTP’den MTP komutlarını alır, yanıtlar gönderir ve posta aktarımını yönetir.
sender-MTP süreci
Bir receiver-MTP süreciyle iş birliği içinde posta aktaran bir süreç. Kullanıcı arayüzü komut/yanıt diyaloğunda yerel bir dil kullanılabilir. sender-MTP, kontrol bağlantısını kendi port/socket U üzerinden receiver-MTP sürecine başlatır. MTP komutlarını başlatır, yanıtları alır ve posta aktarımını yönetir.
kullanıcı
Posta aktarım hizmeti almak isteyen bir insan (veya bir insan adına çalışan bir süreç). Ayrıca bilgisayar postasının alıcısı.
MTP MODELİ
Yukarıdaki tanımlar göz önünde bulundurularak, bir MTP hizmeti için aşağıdaki model (Şekil 1’de gösterilmiştir) diyagram olarak gösterilebilir.
------------ ------------
| | | | --------
| | MTP | |<-->| User |
| Receiver-|Commands/Replies| Sender- | --------
-------- | MTP |<-------------->| MTP | --------
| Mail |<-->| | Mail | |<-->| Mail |
|System| | | | | |System|
-------- ------------ ------------ --------
Receiver-MTP Sender-MTP
MTP Kullanım Modeli
Şekil 1
Şekil 1’de açıklanan modelde sender-MTP, TELNET Protocol’ü izleyen TCP/NCP kontrol bağlantısını başlatır. Kullanıcının başlatmasıyla, standart MTP komutları sender-MTP tarafından üretilir ve kontrol bağlantısı üzerinden receiver-MTP’ye iletilir. Komutlara yanıt olarak standart yanıtlar kontrol bağlantısı üzerinden receiver-MTP’den sender-MTP’ye gönderilir. Buna ek olarak posta da kontrol bağlantısı üzerinden gönderilir.
POSTA AKTARIM İŞLEVLERİ
Kontrol bağlantısı, gerçekleştirilecek işlevleri tanımlayan komutların aktarımı, komutlara verilen yanıtlar ve postanın gerçek aktarımı için kullanılır. Posta yalnızca kontrol bağlantısı üzerinden aktarılır.
sender-MTP’den receiver-MTP’ye iletişim kanalı, sender’dan standart bir receiver port/socket noktasına kurulan bir TCP/NCP kontrol bağlantısı ile sağlanır. sender-MTP, MTP komutlarını göndermekten, alınan yanıtları yorumlamaktan ve postayı göndermekten sorumludur; receiver-MTP ise komutları yorumlar, yanıtlar gönderir ve postayı alır.
POSTA GÖSTERİMİ VE SAKLAMA
Posta, gönderen host içindeki bir depolama aygıtından alıcı host içindeki bir depolama aygıtına aktarılır. İki sistemdeki veri saklama gösterimleri farklı olduğundan, posta üzerinde bazı dönüşümlerin yapılması gerekebilir. Örneğin, NVT-ASCII farklı sistemlerde farklı veri saklama gösterimlerine sahiptir. PDP-10 sistemleri genellikle NVT-ASCII’yi 36 bitlik bir kelime içinde sola hizalanmış beş adet 7 bitlik ASCII karakter olarak saklar. 360 sistemleri NVT-ASCII’yi 32 bitlik bir kelime içinde dört adet 8 bitlik EBCDIC kodu olarak saklar. Multics ise NVT-ASCII’yi 36 bitlik bir kelime içinde dört adet 9 bitlik karakter olarak saklar.
Basitlik amacıyla tüm veriler MTP içinde NVT-ASCII olarak gösterilmelidir. Bu, gönderici ve alıcı hostlar farklı olsa bile metin iletimi sırasında karakterlerin standart NVT-ASCII gösterimine dönüştürülmesi gerektiği anlamına gelir. Gönderici, veriyi kendi iç karakter gösteriminden standart 8 bitlik NVT-ASCII gösterimine dönüştürür (bkz. TELNET spesifikasyonu). Alıcı ise veriyi standart biçimden kendi iç biçimine dönüştürür. Bu standarda uygun olarak bir metin satırının sonunu belirtmek için
MTP’de posta herhangi bir iç yapıya sahip değildir ve kesintisiz bir veri oktetleri dizisi olarak kabul edilir.
HATA KURTARMA VE YENİDEN BAŞLATMA
Veri aktarımı sırasında kaybolan veya bozulmuş bitleri tespit etmeye yönelik bir düzenleme yoktur; bu düzeydeki hata kontrolü TCP/NCP tarafından gerçekleştirilir. Buna ek olarak, göndericileri büyük sistem arızalarına (bir host, bir MTP süreci veya temel ağın arızalanması dahil) karşı koruyacak bir yeniden başlatma prosedürü de sağlanmamıştır.
MTP KOMUTLARI
KOMUT ANLAMBİLİMİ
MTP komutları, kullanıcının talep ettiği posta aktarımı veya posta sistemi işlevini tanımlar. Posta kutularının sözdizimi, alıcı sitenin kurallarına uygun olmalıdır (standart varsayılanlar uygulanabilir). Bir MTP aktarım komutuna yanıt olarak posta her zaman kontrol bağlantısı üzerinden aktarılacaktır.
Mail Transfer Protocol, kontrol bağlantısı üzerindeki tüm iletişimler için TELNET Protocol spesifikasyonlarını izler. TELNET iletişimi için kullanılan dil müzakere edilen bir seçenek olabilse de, "TELNET dili" ve karşılık gelen "TELNET satır sonu kodu" sırasıyla NVT-ASCII ve
MTP komutları
MTP komutları aşağıda ele alınmıştır. Bu bölümde bazı komutların açıklamasında olası yanıtlar açıkça verilmiştir. MTP yanıtları bir sonraki bölümde ele alınacaktır.
MAIL (MAIL)
Bu komut sender-MTP’nin kontrol bağlantısı üzerinden posta göndermesine olanak tanır. Argüman alanı bir gönderici ve isteğe bağlı bir yol dizisi içerir. Yol dizisi mevcutsa, isteğe bağlı bir host listesi ve bir hedef posta kutusundan oluşur. Host listesi mevcutsa bu kaynak yönlendirme bilgisidir ve postanın listedeki ilk hosta iletilmesi gerektiğini belirtir. Bu komut satırının ardından receiver, sonraki tüm karakterleri göndericiden gelen posta metni olarak kabul eder. Posta metni "CRLF.CRLF" karakter dizisi ile sonlandırılır.
Posta yol dizisi boyunca iletildikçe, her iletici host kendisini listeden çıkarmalıdır. Posta nihai hedefine ulaştığında (yol dizisi yalnızca bir — muhtemelen boş — hedef posta kutusu içerdiğinde), receiver bunu kendi host posta kurallarına göre hedef posta kutusuna yerleştirir. Eğer ikinci argüman alanı boşsa (bir veya daha fazla boşluk) ya da boş (
MAIL RECIPIENT SCHEME QUESTION (MRSQ)
Bu MTP komutu, aynı host üzerindeki birden fazla kullanıcıya posta iletimi için kullanılacak şemayı seçmek amacıyla kullanılır. Şemalar, alıcıların önce listelenmesi veya postanın önce gönderilmesi şeklindedir.
MAIL RECIPIENT (MRCP)
Bu komut, tek bir host üzerindeki birden fazla kullanıcıya posta iletimi sırasında bireysel alıcıları tanımlamak için kullanılır.
HELP (HELP)
Bu komut, receiver’ın uygulama durumuna ilişkin yararlı bilgileri kontrol bağlantısı üzerinden göndermesine neden olur. Komut bir argüman alabilir (örneğin herhangi bir komut adı) ve yanıt olarak daha özel bilgiler döndürebilir. Yanıt türü 211 veya 214’tür.
QUIT (QUIT)
Bu komut receiver’ın kontrol bağlantısını kapatması gerektiğini belirtir.
NOOP (NOOP)
Bu komut herhangi bir parametreyi veya daha önce girilmiş komutları etkilemez. Receiver’ın yalnızca bir OK yanıtı göndermesi dışında herhangi bir işlem yapılmadığını belirtir.
KOMUT SÖZDİZİMİ
Komutlar (ve işlevleri ile anlamları) kontrol bağlantısı üzerinden iletilen TELNET NVT-ASCII dizileridir. Komutların işlevleri ve anlamları MTP Komutları bölümünde açıklanmıştır. Yanıt dizileri Komut ve Yanıtların Sıralanması bölümünde ele alınmıştır. Komutların kullanımını gösteren senaryolar Tipik MTP Senaryoları bölümünde verilmiştir. Komut sözdizimi bu bölümde belirtilmiştir.
Komutlar bir komut kodu ile başlar ve ardından bir argüman alanı gelir. Komut kodları dört alfabetik karakterden oluşur. Büyük ve küçük harfler aynı kabul edilir. Dolayısıyla aşağıdakilerin herhangi biri mail komutunu temsil edebilir:
Aynı durum, RECIPIENT first için R veya r gibi parametre değerlerini temsil eden semboller için de geçerlidir. Komut kodları ile argüman alanları bir veya daha fazla boşluk ile ayrılır.
Argüman alanı,
Sözdizimi aşağıda NVT-ASCII biçiminde verilmiştir. Argüman alanındaki tüm karakterler ASCII karakterleridir. Köşeli parantezler isteğe bağlı bir argüman alanını gösterir. Seçenek kullanılmazsa uygun varsayılan değer geçerli kabul edilir.
Aşağıdakiler MTP komutlarıdır:
MAIL <SP> FROM:<sender> [<SP> TO:<path>] <CRLF>
MRSQ [<SP> <scheme>] <CRLF>
MRCP <SP> TO:<path> <CRLF>
HELP [<SP> <string>] <CRLF>
QUIT <CRLF>
NOOP <CRLF>
Yukarıdaki argüman alanlarının sözdizimi (uygun yerlerde BNF gösterimi kullanılarak) aşağıda verilmiştir. "..." gösterimi bir alanın bir veya daha fazla kez tekrarlanabileceğini belirtir.
<sender> ::= "<" <mailbox> ">"
<path> ::= "<" ["@" <host> "," ...] <mailbox> ">"
<scheme> ::= "R" | "T" | "?"
<string> ::= <char> | <char><string>
<mailbox> ::= <user> "@" <host>
<host> ::= <string>
<user> ::= <string>
<char> ::= <CR> ve <LF> hariç 128 ASCII karakterinden herhangi biri
KONTROL İŞLEVLERİ
Çoğu zaman paylaşımlı sistem, bir terminal kullanıcısının kontrolden çıkmış bir sürecin kontrolünü yeniden ele almasına izin veren mekanizmalar sağlar. Yerel olarak kullanıldığında bu sistemler, normal karakterler veya özel "bant dışı" sinyaller olsun, kullanıcı tarafından sağlanan tüm sinyallere erişebilir.
Terminaller ağa bağlanarak sisteme bağlandığında sistem tüm kullanıcı sinyallerine mutlaka erişemez; ağın akış kontrol mekanizmaları bu tür sinyallerin başka bir yerde, örneğin kullanıcının hostunda arabelleğe alınmasına neden olabilir.
Bu soruna karşı TELNET "Synch" mekanizması kullanılır. Bir Synch sinyali, TELNET komutu DATA MARK (DM) ile birlikte kullanılan bir TCP Urgent veya bir NCP Interrupt bildiriminden oluşur. TELNET bağlantısına uygulanan akış kontrolüne tabi olmayan bu bildirim, onu alan süreç tarafından veri akışının özel şekilde ele alınmasını başlatmak için kullanılır.
Bu modda veri akışı hemen TELNET Interrupt Process (IP) komutu için taranır. (TELNET IP komutunun kullanılmasının gerekçesi, mevcut bir sunucu TELNET modülünün MTP’nin "altında" çalışabilmesine izin vermektir. Eğer bu kod doğrudan MTP içinde uygulanmış olsaydı IP komutu gereksiz olurdu.)
TELNET komutu DM, veri akışı içindeki eşzamanlama işaretidir ve herhangi bir özel sinyalin zaten gerçekleştiğini ve alıcının veri akışının normal işlenmesine dönebileceğini gösterir. Bu mekanizmanın daha kapsamlı anlaşılması için Internet Protocol Handbook içindeki TELNET Protocol Specification bölümüne bakınız.
Bu mekanizmanın etkisi, Synch gönderen ile alıcısı arasında (DM’ye kadar) tüm karakterlerin atılmasıdır. Dolayısıyla kontrol bağlantısındaki tüm karakterler TELNET komutu DM alınana kadar yok sayılır. Tam dizi aşağıda gösterilmiştir. Her dikey çizgi (|) veri oktetleri arasındaki sınırı temsil eder; IAC ise TELNET komut kodu Interpret As Command anlamına gelir.
Old New
-+-+-+-+-+-----+---+--+---+--+-
...|M|A|I|L| ... |IAC|IP|IAC|DM|...
-+-+-+-+-+-----+---+--+---+--+-
MTP YANITLARI
Mail Transfer Protocol komutlarına verilen yanıtlar, posta aktarımı sürecinde isteklerin ve eylemlerin senkronizasyonunu sağlamak ve gönderen-MTP'nin alıcının durumunu her zaman bilmesini garanti etmek amacıyla tasarlanmıştır.
Her komut en az bir yanıt üretmelidir, ancak birden fazla da olabilir. İkinci durumda, çoklu yanıtlar kolayca ayırt edilebilir olmalıdır. Ayrıca bazı komutların aşağıdaki gibi sıralı olarak gerçekleşmesi gerekir:
- MRSQ T → MAIL → MRCP
- MRSQ R → MRCP → MAIL
Bu dizilere verilen yanıtlar, tüm önceki komutlar başarılı olmuşsa bir ara durumun varlığını gösterir. Dizinin herhangi bir noktasında meydana gelen bir başarısızlık, tüm dizinin baştan tekrarlanmasını gerektirir.
Komut-yanıt dizisinin ayrıntıları Durum Diyagramları bölümünde açık biçimde açıklanmıştır.
Bir MTP yanıtı, üç basamaklı bir sayıdan (üç alfanümerik karakter olarak iletilir) ve ardından gelen bir metinden oluşur. Bu sayı, otomatalar tarafından bir sonraki girilecek durumu belirlemek için kullanılmak üzere tasarlanmıştır; metin ise insan kullanıcıya yöneliktir. Üç basamağın yeterli miktarda kodlanmış bilgi içermesi amaçlanır; böylece gönderen-MTP'nin metni incelemesine gerek kalmaz ve metni uygun olduğunda ya atabilir ya da kullanıcıya iletebilir. Özellikle metin alıcıya bağlı olabilir; bu nedenle her yanıt kodu için farklı metinler bulunması olasıdır.
Biçimsel olarak bir yanıt şu diziden oluşur: üç basamaklı kod, boşluk
Bazen metin tek bir satırdan daha uzundur; bu durumlarda gönderen-MTP'nin yanıtı okumayı ne zaman durduracağını bilmesi için tam metin köşeli biçimde sınırlandırılmalıdır. Bu, çok satırlı bir yanıtı belirtmek için özel bir ilk satır biçimi ve bitişini belirtmek için son satırda başka bir biçim gerektirir. Her iki satır da işlem durumunu gösteren uygun yanıt kodunu içerir.
Bu nedenle çok satırlı yanıtların biçimi şöyledir: ilk satır tam olarak gerekli yanıt kodu ile başlar, hemen ardından bir tire "-" (eksi olarak da bilinir) gelir ve sonra metin bulunur. Son satır aynı kod ile başlar, hemen ardından boşluk
Örnek:
123-İlk satır
İkinci satır
234 Sayılarla başlayan bir satır
123 Son satır
Gönderen-MTP'nin yapması gereken tek şey, bir satırın başında aynı yanıt kodunun
Bu düzen, yanıt bilgileri için standart sistem rutinlerinin kullanılmasına ve "yapay" ilk ve son satırların eklenmesine olanak tanır. Nadir durumlarda bu rutinler herhangi bir satırın başında üç basamak ve bir boşluk oluşturabiliyorsa, her metin satırının başı boşluk gibi nötr bir metinle kaydırılmalıdır.
Bu düzen, çok satırlı yanıtların iç içe geçmeyeceğini varsayar. Genel olarak yanıt iç içeliği yalnızca başka bir yanıtı kesebilen rastgele sistem mesajları (aynı zamanda kendiliğinden yanıtlar olarak da adlandırılır) dışında gerçekleşmez.
Sistem mesajları (yani alıcı-MTP tarafından işlenmeyenler) yanıt kodu taşımayacaktır ve komut–yanıt dizisinin herhangi bir yerinde ortaya çıkabilir. Bunlar yalnızca insan kullanıcı için bilgi olduğundan gönderen-MTP tarafından yok sayılabilir.
Yanıtın üç basamağının her biri özel bir anlam taşır. Bu, gönderen-MTP tarafından çok basitten çok gelişmişe kadar uzanan bir yanıt aralığına izin vermek amacıyla tasarlanmıştır.
- İlk basamak, yanıtın iyi, kötü veya eksik olup olmadığını belirtir.
- İkinci basamak, yanıt kategorisini gösterir.
- Üçüncü basamak, anlamın daha ayrıntılı bir derecelendirmesini sağlar.
Yanıt Kodunun İlk Basamağı
İlk basamak için beş değer vardır:
1yz — Olumlu Ön Yanıt
İstenen işlem başlatılıyor; yeni bir komutla devam etmeden önce başka bir yanıt beklenmelidir. Tamamlama yanıtı gelmeden gönderen-MTP'nin başka bir komut göndermesi protokol ihlali olur. Ancak alıcı-MTP süreçleri, önceki bir komut yürütülürken gelen komutları sıraya koymalıdır.
2yz — Olumlu Tamamlama Yanıtı
İstenen işlem başarıyla tamamlanmıştır. Yeni bir istek başlatılabilir.
3yz — Olumlu Ara Yanıt
Komut kabul edilmiştir, ancak istenen işlem daha fazla bilgi alınana kadar bekletilmektedir. Gönderen-MTP bu bilgiyi belirten başka bir komut göndermelidir. Bu yanıt, komut dizisi gruplarında kullanılır.
4yz — Geçici Olumsuz Tamamlama Yanıtı
Komut kabul edilmemiştir ve istenen işlem gerçekleşmemiştir. Ancak hata durumu geçicidir ve işlem yeniden talep edilebilir. Gönderen, varsa komut dizisinin başlangıcına dönmelidir.
İki farklı sitenin (alıcı ve gönderen MTP'ler) yorum konusunda anlaşması gerektiğinden "geçici" kavramına kesin bir anlam vermek zordur. Bu kategorideki her yanıt farklı bir zaman değerine sahip olabilir, ancak gönderen-MTP'nin yeniden denemesi teşvik edilir.
Bir yanıtın 4yz mi yoksa 5yz kategorisine mi girdiğini belirlemek için pratik bir kural şudur: komut biçiminde veya gönderen ya da alıcının özelliklerinde herhangi bir değişiklik yapılmadan tekrarlanabiliyorsa yanıt 4yz kategorisindedir.
5yz — Kalıcı Olumsuz Tamamlama Yanıtı
Komut kabul edilmemiştir ve istenen işlem gerçekleşmemiştir. Gönderen-MTP'nin aynı isteği (aynı sırayla) tekrar etmesi önerilmez.
Bazı "kalıcı" hata durumları bile düzeltilebilir; bu nedenle insan kullanıcı daha sonra gönderen-MTP'ye komut dizisini yeniden başlatmasını söyleyebilir (örneğin yazım hatası düzeltildikten veya dizin durumu değiştirildikten sonra).
Yanıt Kodunun İkinci Basamağı
İkinci basamak yanıtları belirli kategorilere kodlar:
x0z — Sözdizimi
Sözdizimi hatalarına, herhangi bir işlevsel kategoriye uymayan sözdizimsel olarak doğru komutlara ve uygulanmamış ya da gereksiz komutlara ilişkin yanıtlar.x1z — Bilgi
Durum veya yardım gibi bilgi taleplerine verilen yanıtlar.x2z — Bağlantılar
Kontrol bağlantısına ilişkin yanıtlar.x3z — Henüz belirtilmemiş
x4z — Henüz belirtilmemiş
x5z — Posta sistemi
İstenen aktarım veya başka bir posta sistemi işlemiyle ilgili olarak alıcı posta sisteminin durumunu gösteren yanıtlar.
Üçüncü basamak, ikinci basamak tarafından belirtilen her kategori içinde anlamın daha ayrıntılı bir derecelendirmesini sağlar. Aşağıdaki yanıt listesi bunu göstermektedir. Her yanıt metni zorunlu değil öneri niteliğindedir ve ilgili komuta bağlı olarak değişebilir. Ancak yanıt kodları bu bölümdeki özelliklere kesin olarak uymalıdır.
Alıcı uygulamaları, burada açıklanan durumlardan biraz farklı durumlar için yeni kodlar geliştirmemeli; bunun yerine zaten tanımlanmış kodları uyarlamalıdır.
Başarılı yürütülmesi gönderen-MTP'ye yeni bir bilgi sağlamayan NOOP gibi bir komut 200 yanıtı döndürür. Komut uygulanmamış ve siteye özgü olmayan bir eylem talep ettiğinde yanıt 502 olur. Bunun daha ayrıntılı bir biçimi, uygulanmış bir komutun uygulanmamış bir parametre talep ettiği durumda verilen 504 yanıtıdır.
İŞLEV GRUPLARINA GÖRE YANIT KODLARI
200 Komut tamam
500 Sözdizimi hatası, komut tanınmadı
[Bu, komut satırının çok uzun olması gibi hataları da içerebilir]
501 Parametrelerde veya argümanlarda sözdizimi hatası
502 Komut uygulanmamış
503 Hatalı komut sırası
211 Sistem durumu veya sistem yardım yanıtı
214 Yardım mesajı
[Alıcının nasıl kullanılacağı veya belirli bir standart dışı
komutun anlamı hakkında bilgi; bu yanıt yalnızca insan
kullanıcı için yararlıdır]
215 <scheme> tercih edilen şemadır
120 <host> Hizmet nnn dakika içinde hazır
220 <host> Hizmet yeni kullanıcı için hazır
221 <host> Hizmet kontrol bağlantısını kapatıyor
421 <host> Hizmet kullanılamıyor, kontrol bağlantısı kapatılıyor
[Hizmetin kapanması gerektiğini bildiği durumlarda bu
herhangi bir komuta verilen yanıt olabilir]
Yanıt Kodları
- 151 Kullanıcı yerel değil;
@ adresine yönlendirilecek - 152 Kullanıcı bilinmiyor; posta operatör tarafından iletilecek
- 250 İstenen posta işlemi tamam, başarılı
- 450 İstenen posta işlemi yapılmadı: posta kutusu kullanılamıyor
[Örn., posta kutusu meşgul] - 550 İstenen işlem yapılmadı: posta kutusu kullanılamıyor
[Örn., posta kutusu bulunamadı, erişim yok] - 451 İstenen işlem iptal edildi: işleme sırasında yerel hata
- 452 İstenen işlem yapılmadı: yetersiz sistem depolama alanı
- 552 İstenen posta işlemi iptal edildi: depolama kotası aşıldı
[Mevcut posta kutusu konumu için] - 553 İstenen işlem yapılmadı: posta kutusu adı izin verilmiyor
- 354 Posta girişi başlat;
. ile bitir
Yanıt Kodlarının Sayısal Sıraya Göre Listesi
- 120
Hizmet nnn dakika içinde hazır - 151 Kullanıcı yerel değil;
@ adresine yönlendirilecek - 152 Kullanıcı bilinmiyor; posta operatör tarafından iletilecek
- 200 Komut tamam
- 211 Sistem durumu veya sistem yardım yanıtı
- 214 Yardım mesajı
[Alıcının nasıl kullanılacağı veya belirli bir standart dışı komutun anlamı hakkında bilgi; bu yanıt yalnızca insan kullanıcı için yararlıdır] - 215
tercih edilen şemadır - 220
Hizmet yeni kullanıcı için hazır - 221
Hizmet kontrol bağlantısını kapatıyor - 250 İstenen posta işlemi tamam, başarılı
- 354 Posta girişi başlat;
. ile bitir - 421
Hizmet kullanılamıyor, kontrol bağlantısı kapatılıyor
[Hizmetin kapanması gerektiğini bildiği durumlarda bu herhangi bir komuta verilen yanıt olabilir] - 450 İstenen posta işlemi yapılmadı: posta kutusu kullanılamıyor
[Örn., posta kutusu meşgul] - 451 İstenen işlem iptal edildi: işleme sırasında yerel hata
- 452 İstenen işlem yapılmadı: yetersiz sistem depolama alanı
- 500 Sözdizimi hatası, komut tanınmadı
[Bu, komut satırının çok uzun olması gibi hataları da içerebilir] - 501 Parametrelerde veya argümanlarda sözdizimi hatası
- 502 Komut uygulanmamış
- 503 Hatalı komut sırası
- 550 İstenen işlem yapılmadı: posta kutusu kullanılamıyor
[Örn., posta kutusu bulunamadı, erişim yok] - 552 İstenen posta işlemi iptal edildi: depolama kotası aşıldı
[Mevcut posta kutusu konumu için] - 553 İstenen işlem yapılmadı: posta kutusu adı izin verilmiyor
Posta Aktarımının Tartışılması
Posta iletmek için temel komut MAIL komutudur. Bu komut iletilen verilerin alıcının posta kutusuna girilmesine neden olur.
MAIL <SP> "FROM:" <sender> [<SP> "TO:" <path>] <CRLF>
<sender> bir posta kutusudur ve <path> kaynak yönlendirme listesi ile hedef posta kutusunu içeren host listesidir. Kabul edilirse 354 yanıtı döndürür ve bundan sonra gelen tüm satırları mesaj metni olarak kabul eder. Yalnızca bir nokta içeren bir satır ile sonlandırılır; bunun üzerine 250 tamamlama yanıtı verilir. Çeşitli hatalar oluşabilir.
Bir alıcının posta kutusu o alıcıda bulunmayan bir kullanıcı için posta kabul ettiğini belirtmek amacıyla kullanabileceği iki olası ön yanıt vardır.
151 Kullanıcı yerel değil; @ adresine yönlendirilecek
Bu yanıt, alıcının kullanıcının posta kutusunun başka bir host üzerinde olduğunu bildiğini ve postayı o hosta iletme sorumluluğunu üstleneceğini gösterir. Örneğin BBN'de (veya ISI'de) birden fazla host vardır. Her birinin hostlar üzerindeki birçok kullanıcıyı içeren bir listesi bulunur. Her host, listesindeki herhangi bir kullanıcı için posta kabul edebilir ve bunu doğru hosta iletebilir.
152 Kullanıcı bilinmiyor; posta operatör tarafından iletilecek
Bu yanıt, hostun kullanıcı adını tanımadığını ancak postayı kabul edeceğini ve operatörün iletimi deneyeceğini belirtir. Kullanıcı adı yanlış yazılmışsa bu yararlı olabilir, ancak posta gerçekten teslim edilemez durumdaysa sorun çıkarabilir.
Operatör aracılığıyla yönlendirme kabul edilemezse veya kullanıcı postayı doğrudan alıcının gerçek hostuna göndermeyi tercih ediyorsa, bu ön yanıtların biri alındığında iletişim sonlandırılabilir.
Bir mesajın metninin aynı anda birden fazla alıcıya gönderilmesine olanak sağlayan iki MTP komutu vardır; bu tür bir mesaj iletimi, aynı metni bir sitedeki her ek alıcı için tekrar tekrar göndermekten çok daha verimlidir. Bir yöntemde önce tüm alıcılar belirtilir, ardından metin gönderilir. Diğerinde sıralama tersidir; önce metin gönderilir, ardından alıcılar belirtilir. Her iki yöntem de gereklidir çünkü tek başına hiçbiri tüm sistemler için en uygun değildir; bu durum daha sonra açıklanacaktır.
Belirli bir yöntemi seçmek için MRSQ komutu kullanılır; yöntem seçildikten sonra alıcıları belirtmek için MRCP komutları verilir; metni sağlamak için ise MAIL komutu kullanılır.
Şema Seçimi: MRSQ
MRSQ, gönderen-MTP'nin MRSQ/MRCP uygulamasını test etmesini, belirli bir şema seçmesini, durumunu sıfırlamasını ve hatta temel düzeyde bir müzakere yapmasını sağlayan araçtır.
MRSQ [<SP> <scheme>] <CRLF>
<scheme> tek karakterdir. Aşağıdakiler tanımlanmıştır:
- R — Önce alıcılar. Bu uygulanmamışsa T uygulanmış olmalıdır.
- T — Önce metin. Bu uygulanmamışsa R uygulanmış olmalıdır.
- ? — Tercih talebi. Bu her zaman uygulanmış olmalıdır.
Argüman olmaması, hiçbir şemanın seçilmediği anlamına gelir (varsayılan durum).
Olası yanıtlar şunlardır:
- 200 Tamam, belirtilen şemayı kullanacağız
- 215
Tercih ettiğim şema budur - 501 MRSQ'yu anlıyorum ancak bu şemayı kullanamam
- 5xx Komut tanınmadı veya uygulanmamış
MRSQ'nun üç yönü vardır.
Birincisi, argümansız bir MRSQ her zaman 200 yanıtı döndürmeli ve hiçbir şemanın seçilmediği varsayılan durumu geri yüklemelidir. Başka herhangi bir yanıt, MRSQ'nun ve dolayısıyla MRCP'nin anlaşılmadığı veya doğru şekilde gerçekleştirilemediği anlamına gelir.
İkincisi, <scheme> olarak "?" kullanılması alıcı MTP'den 215 yanıtı döndürmesini ister; bu yanıtta alıcı "tercih edilen" bir şema belirtir. Bu yanıtın biçimi şöyledir:
215 <SP> <scheme> [<SP> <arbitrary text>] <CRLF>
Başka herhangi bir yanıt (örneğin 4xx veya 5xx), MRSQ ve MRCP'nin uygulanmadığı anlamına gelir; çünkü MRSQ uygulanmışsa "?" her zaman uygulanmış olmalıdır.
MRSQ hakkında üçüncü önemli nokta, her zaman tüm şemaları başlangıç durumuna sıfırlama yan etkisine sahip olmasıdır. Bu sıfırlama, verilecek yanıt ne olursa olsun yapılmalıdır — 200, 215 veya 501. Bir sıfırlama için gerekli eylemler, her şemanın nasıl çalıştığı tartışılırken açıklanacaktır.
Mesaj Metni Belirtimi: MAIL
Hangi şema (varsa) seçilmiş olursa olsun, "TO" argümanı boş olmayan bir MAIL komutu öncekiyle tamamen aynı şekilde davranır; MRSQ/MRCP komutlarının buna etkisi yoktur. Bununla birlikte normal bir MAIL komutu, MRSQ ile aynı yan etkiye sahiptir; mevcut şemayı başlangıç durumuna sıfırlar.
Bu "TO" argümanı null olduğunda (örn., MAIL FROM:<X@Y> <CRLF>) seçilen belirli şema önem kazanır. Bir hata üretmek yerine (çoğu alıcının şu anda yaptığı gibi), alıcı bu "null" belirtimi için ileti metnini kabul edecektir. Bununla ne yapılacağı hangi şemanın etkin olduğuna bağlıdır ve Şema Mekaniği bölümünde açıklanacaktır.
Alıcı Belirtimi: MRCP
Alıcı adlarını (yani posta kutularını) belirtmek ve her ad için bir onay (veya ret) almak amacıyla aşağıdaki komut kullanılır:
MRCP <SP> TO:<path> <CRLF>
Şema yoksa yanıt:
- 503 Henüz şema belirtilmedi; MRSQ kullan
T şeması için yanıtlar MAIL için olanlarla aynıdır.
R şeması için yanıtlar (önce alıcılar):
- 200 Tamam, ad saklandı
- 452 Alıcı tablosu dolu, bu ad saklanmadı
- 553 Alıcı adı reddedildi
- 4xx Geçici hata, bu adı daha sonra tekrar dene
- 5xx Kalıcı hata, gönderene bildir
Henüz hiçbir şema seçilmemişse bu komutun kullanımı hatadır; MRCP kullanılacaksa önceden bir MRSQ <scheme> verilmiş olmalıdır.
Şema Mekaniği: MRSQ R (Önce Alıcılar)
Önce alıcılar şemasında, MRCP alıcı adlarını belirtmek için kullanılır ve MTP alıcısı bu adları bir liste veya tabloda saklar. Normalde her MRCP için yanıt ya kabul anlamına gelen 200 ya da bir 4xx/5xx ret kodu olacaktır.
Tüm 5xx kodları kalıcı retlerdir (örn., kullanıcı bilinmiyor) ve insan kullanıcıya bildirilmelidir; buna karşılık 4xx kodları genellikle daha sonra giderilebilecek geçici bir hatayı gösterir. 452 dışında hiçbir 4xx/5xx yanıtı önceki veya sonraki MRCP komutlarını etkilemez; 452 ise zaten saklanmış alıcılara bir ileti gönderilmedikçe veya bir sıfırlama yapılmadıkça başka MRCP komutlarının başarılı olmayacağını belirtir.
Saklanan alıcılara ileti metni göndermek, "TO" argümanı olmadan bir MAIL komutu verilerek yapılır:
MAIL <SP> <sender> <CRLF>
İleti metninin iletimi normal MAIL ile tamamen aynıdır. İletimin sonunda gelen olumlu bir onay, iletinin MRCP ile hatırlanan tüm alıcılara gönderildiği anlamına gelir. Bir başarısızlık kodu ise bunun belirtilen bu alıcıların tamamı için başarısız olduğu şeklinde değerlendirilmesi gerektiğini gösterir.
Yanıtın anlamı ne olursa olsun, saklanan tüm alıcı adları temizlenir ve unutulur—sistem başlangıç durumuna sıfırlanır. Bu temizleme işlemi, MRSQ kullanımının sıfırlama yan etkisi olarak da gerçekleşmelidir.
Bir MRCP için verilen 452 yanıtı, o anda saklanmış alıcılara iletiyi belirtmek için MAIL kullanılarak ve ardından daha fazla MRCP ile başka bir MAIL gönderilerek ele alınabilir; gerekirse bu işlem tekrarlanır. Örneğin bir alıcı yalnızca 10 isim için yer sağlayabiliyorsa, 50 alıcılı bir ileti beş kez gönderilir ve her seferinde 10 farklı alıcıya iletilir.
Bir gönderici, herhangi bir başarılı MRCP verilmeden önce ileti metni belirtmeye çalışırsa ("TO" argümanı olmayan MAIL), bu durum normal bir MAIL komutunun null alıcıyla kullanılmasıyla tamamen aynı şekilde ele alınmalıdır; bazı alıcılar 550 Null recipient gibi bir hata döndürebilir.
MRSQ R kullanılarak yapılan bir posta aktarımı için Ek A'daki örneğe bakınız.
Şema Mekaniği: MRSQ T (Önce Metin)
Önce metin şemasında, "TO" argümanı olmayan MAIL komutu ileti metnini belirtmek için kullanılır ve alıcı bu metni saklar. Ardından gelen MRCP komutları, saklanan ileti metni kullanılması ve ek metin aktarımı olmaması dışında, MAIL komutlarıymış gibi değerlendirilir.
Saklanan ileti metni, bir sonraki MAIL veya MRSQ komutuna kadar unutulmaz; bu komutlar ya yeni metinle değiştirecek ya da tamamen temizleyecektir. MRSQ komutunun herhangi bir kullanımı saklanan metni temizleyerek bu şemayı sıfırlar; aynı durum null olmayan bir argümana sahip herhangi bir MAIL komutunda da gerçekleşir.
Herhangi bir ileti metni saklanmadan önce bir MRCP görülürse, gönderici fiilen boş bir ileti göndermeye çalışıyordur; bazı alıcılar buna izin verebilir, bazıları ise bir hata kodu döndürebilir.
MRSQ T kullanılarak yapılan bir posta aktarımı için Ek B'deki örneğe bakınız.
Neden İki Şema Var?
Çünkü tek bir şema tüm sistemler için en uygun değildir.
MRSQ R, her şeyin saklanıp ardından eşzamanlı olarak postalanması nedeniyle daha çok bir toplu posta gönderimine izin verir. Bu, MTP alıcısının postayı doğrudan yazmadığı fakat merkezi bir posta hizmeti arka plan sürecine teslim ettiği ITS gibi sistemler için yararlıdır. Tek bir teslim işlemiyle ilişkilendirilen bilgi (örn., alıcılar) ne kadar fazla olursa posta o kadar verimli biçimde iletilebilir.
Buna karşılık MRSQ T, postayı doğrudan ve alıcı başına artımlı şekilde teslim eden alıcı-MTP'ler için uygundur. Bu şemada her alıcı için ayrı bir başarı veya başarısızlık yanıt kodu döndürülür; bu kodlar disk tahsis sınırları veya posta kutusu erişim çakışmaları gibi etkenlere bağlı olabilir.
Bu alıcı-MTP'ler MRSQ R'nin toplu posta yaklaşımını taklit etmeye çalışsaydı, MAIL için verilen bir başarı yanıtının gerçekten belirtilen tüm alıcılara teslim edildiği anlamına geldiğinden emin olmak zorunda kalırlardı—yalnızca bazılarına değil.
Notlar
Bu komutlar MTP'nin asgari uygulamasında zorunlu olmadığından, MRSQ veya MRCP komutlarının hiçbirini tanımayan sitelerle başa çıkmaya hazır olmak gerekir.
MRSQveMRSQ ?, herhangi bir şemanın uygulanıp uygulanmadığını belirlemek için açıkça test olarak tasarlanmıştır. MRCP bir test olarak tasarlanmamıştır ve "uygulanmamış" türünden bir başarısızlık yanıtı "Henüz şema seçilmedi" veya hatta "Alıcı bilinmiyor" ile karıştırılabilir.MRSQ ?komutuna verilen olumlu bir yanıtta alıcının tercih ettiği şemanın varsayılan durum (yani çoklu alıcı şemalarının hiçbiri) olduğunu belirtmenin bir yolu yoktur. Bunun gerekçesi, durum böyle olsaydı MRSQ/MRCP uygulamasının anlamsız olacağı ve yanıtın dolayısıyla olumsuz olacağıdır.
Mail Transfer Protocol (RFC 772)
Bildirimsel Belirtimler
Asgari Uygulama
Gereksiz hata mesajları olmadan MTP'nin çalışabilir olmasını sağlamak için tüm alıcılar için aşağıdaki asgari uygulama gereklidir:
Komutlar
- QUIT
- NOOP
FTP açısından aktarım parametrelerinin değerleri şu şekilde olmalıdır:
- TYPE — ASCII
- MODE — STREAM
- STRU — FILE-STRUCTURE
Tüm ana bilgisayarlar posta aktarımı için yukarıdaki değerleri kullanmalıdır.
Bağlantılar
Alıcı-MTP, Port L üzerinde "dinleme" yapacaktır. Gönderici-MTP TCP/NCP kontrol bağlantısını başlatacaktır. Kontrol bağlantısı TCP altında tam çift yönlü bir bağlantıdan oluşur; NCP altında ise iki tek yönlü bağlantıdır.
Alıcı ve gönderici MTP'ler, ARPA Internet Protocol Handbook içinde belirtilen TELNET Protokolü kurallarını izlemelidir. Alıcıların komut satırlarının düzenlenmesini sağlama zorunluluğu yoktur ve bunun gönderici ana bilgisayarda yapılmasını belirtebilirler.
Kontrol bağlantısı, tüm aktarımlar ve yanıtlar tamamlandıktan sonra göndericinin isteği üzerine alıcı tarafından kapatılacaktır.
Komut ve Yanıtların Sıralanması
Gönderici ile alıcı arasındaki iletişim dönüşümlü bir diyalog olarak tasarlanmıştır. Buna göre gönderici bir MTP komutu verir ve alıcı birincil bir istem yanıtıyla cevap verir. Gönderici, daha fazla komut göndermeden önce bu ilk birincil başarı veya başarısızlık yanıtını beklemelidir.
Bazı komutlar göndericinin beklemesi gereken ikinci bir yanıt gerektirir. Bu yanıtlar örneğin posta aktarımının ilerlemesi veya tamamlanması hakkında bilgi verebilir. Bunlar posta aktarım komutlarına verilen ikincil yanıtlardır.
Önemli bir bilgilendirme yanıtı grubu bağlantı selamlamalarıdır. Normal koşullarda bir alıcı bağlantı kurulduğunda 220 yanıtı, "girdi bekleniyor" mesajını gönderir. Gönderici herhangi bir komut göndermeden önce bu selamlama mesajını beklemelidir.
Alıcı girdiyi hemen kabul edemiyorsa, derhal bir 120 "beklenen gecikme" yanıtı göndermeli ve hazır olduğunda bir 220 yanıtı göndermelidir. Böylece gönderici gecikme olduğunda bağlantıyı kesmemesi gerektiğini bilir.
Not: Tüm selamlama türü yanıtların resmi adı, yanıt kodundan sonra gelen ilk kelime olarak sunucu ana bilgisayarın adıdır.
Aşağıdaki tablo her komut için alternatif başarı ve başarısızlık yanıtlarını listeler. Bunlara kesinlikle uyulmalıdır; bir alıcı yanıtlardaki metni değiştirebilir, ancak kod numaralarının ve belirli komut-yanıt dizisinin ima ettiği anlam ve eylem değiştirilemez.
Komut–Yanıt Dizileri
Bu bölümde komut-yanıt dizisi sunulmaktadır. Her komut olası yanıtlarıyla birlikte listelenmiştir; komut grupları birlikte verilmiştir.
Ön yanıtlar önce listelenir (ve onları izleyen yanıtlar altlarında girintili olarak verilir), ardından olumlu ve olumsuz tamamlanma yanıtları ve son olarak ara yanıtlar ile dizide kalan komutlar gösterilir.
421 yanıtı (hizmet mevcut değil, kontrol bağlantısı kapatılıyor) MTP alıcısı kapanması gerektiğini bildiği herhangi bir noktada verilebilir.
Bu liste, daha sonra ayrı olarak sunulacak olan durum diyagramlarının temelini oluşturur.
Bağlantı Kurulumu
- 120
- 220
- 220
- 421
Posta İşlemi Komutları
- 151, 152
- 354
- 250
- 451, 552
- 354
- 354
- 250
- 451, 552
- 450, 550, 452, 553
- 500, 501, 502, 421
MRSQ
- 200, 215
- 500, 501, 502, 421
MRCP
- 151, 152
- 200
- 200
- 450, 550, 452, 553
- 500, 501, 502, 503, 421
QUIT
- 221
Bilgilendirme Komutları
HELP
- 211, 214
- 500, 501, 502, 421
Çeşitli Komutlar
NOOP
- 200
- 500, 421
Durum Diyagramları
Burada oldukça basit düşünülmüş bir MTP uygulaması için durum diyagramları sunulmaktadır. Yalnızca yanıt kodlarının ilk basamağı kullanılır. Her MTP komut grubu için bir durum diyagramı vardır.
Komut gruplamaları, her komut için bir model oluşturulup ardından yapısal olarak aynı modele sahip komutların birlikte toplanmasıyla belirlenmiştir.
Her komut için üç olası sonuç vardır:
- Başarı (S)
- Başarısızlık (F)
- Hata (E)
Aşağıdaki durum diyagramlarında "başlangıç" için B sembolünü ve "yanıt bekle" için W sembolünü kullanıyoruz.
Çoğu MTP Komutu İçin Diyagram
1,3 +---+
----------->| E |
| +---+
|
+---+ cmd +---+ 2 +---+
| B |---------->| W |---------->| S |
+---+ +---+ +---+
|
| 4,5 +---+
----------->| F |
+---+
Bu diyagram şu komutları modeller:
- HELP
- MRCP
- MRSQ
- NOOP
- QUIT
MAIL Komut Diyagramı
---- 1
| |
+---+ cmd -->+---+ 2 +---+
| B |---------->| W |---------->| E |
+---+ +---+ -->+---+
| | |
3 | | 4,5 |
-------------- ------ |
| | | +---+
| ------------->| S |
| | 1,3 | | +---+
| 2| --------
| | | |
V | | |
+---+ text +---+ 4,5 ----->+---+
| |---------->| W |---------->| F |
+---+ +---+ +---+
Buradaki "text", göndericiden alıcıya gönderilen ve son satır gönderilene kadar hiçbir yanıt beklenmeyen bir satırlar dizisidir. Son satır yalnızca tek bir nokta karakterinden oluşmalıdır.
Genelleştirilmiş Komut–Yanıt Diyagramı
------------------------------------
| |
Begin | |
| V |
| +---+ cmd +---+ 2 +---+ |
-->| |------->| |---------->| | |
| | | W | | S |-----|
-->| | -->| |----- | | |
| +---+ | +---+ 4,5 | +---+ |
| | | | | | |
| | | 1| |3 | +---+ |
| | | | | | | | |
| | ---- | ---->| F |-----
| | | | |
| | | +---+
-------------------
|
|
V
End
Bağlantı Kurulumu
MTP kontrol bağlantısı, alıcı süreç portu/soketi L ile gönderici süreç portu/soketi U arasında TCP/NCP aracılığıyla kurulur.
Bu protokole hizmet portu/soketi 57 (71 sekizlik) atanmıştır; yani L = 57.
Ek A
MRSQ R Örneği (Önce Alıcılar)
Bu, MRSQ R kullanımına bir örnektir. Öncelikle gönderici, alıcının gerçekten MRSQ uygulayıp uygulamadığını belirlemelidir.
S: MRSQ <CRLF>
R: 200 OK, no scheme selected
Null argümanlı bir MRSQ uygulanmışsa her zaman 200 döndürür ve varsayılan "şema"yı seçer; yani hiçbirini. Eğer MRSQ uygulanmamış olsaydı 4xx veya 5xx kodu dönerdi.
S: MRSQ R <CRLF>
R: 200 OK, using that scheme
Her şey yolunda; şimdi alıcılar belirtilebilir.
S: MRCP TO:<Foo@Y> <CRLF>
R: 200 OK
S: MRCP TO:<Raboof@Y> <CRLF>
R: 553 No such user here
S: MRCP TO:<bar@Y> <CRLF>
R: 200 OK
S: MRCP TO:<@Y,@X,fubar@Z> <CRLF>
R: 200 OK
"Raboof" için başarısızlık oluşmasının "Foo" ve "bar" için posta saklanmasını veya "X" ana bilgisayarı üzerinden "fubar@Z" adresine iletilecek postayı etkilemediğine dikkat edin.
Şimdi ileti metni, "TO" argümanı olmayan bir MAIL komutu verilerek sağlanır.
S: MAIL FROM:<waldo@A><CRLF>
R: 354 Type mail, ended by <CRLF>.<CRLF>
S: Blah blah blah blah....etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 Mail sent
Posta metni artık "Foo" ve "bar" adreslerine gönderilmiş ve ayrıca "fubar@Z" adresine iletilmek üzere yönlendirilmiştir.
Ek B
MRSQ T Örneği (Önce Metin)
Alıcının MRSQ uyguladığını doğrulamak için önceki örnekle aynı ileti kullanılır.
S: MRSQ ? <CRLF>
R: 215 T Text first, please
MRSQ gerçekten uygulanmıştır ve alıcı "T" tercih ettiğini belirtir; ancak bu, göndericinin başka bir şey denemesini engellemez.
S: MRSQ R <CRLF>
R: 501 Sorry, I really can't do that
Alıcı "R" şemasını da anlayabiliyor olabilir, ancak genel olarak tercih edilen şemayı kullanmak en iyisidir; çünkü alıcı kendi sitesi için hangisinin daha verimli olduğunu bilir.
S: MRSQ T <CRLF>
R: 200 OK, using that scheme
Artık "T" şeması seçilmiştir ve ileti metni "TO" argümanı olmayan bir mail komutu verilerek gönderilir.
S: MAIL FROM:<WALDO@A><CRLF>
R: 354 Type mail, ended by <CRLF>.<CRLF>
S: Blah blah blah blah....etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 Mail stored
Artık alıcılar belirtilebilir.
S: MRCP TO:<Foo@Y> <CRLF>
R: 250 Stored mail sent
S: MRCP TO:<Raboof@Y> <CRLF>
R: 553 No such user here
S: MRCP TO:<bar@Y> <CRLF>
R: 250 Stored mail sent
S: MRCP TO:<@Y,@X,fubar@Z> <CRLF>
R: 200 OK
Metin artık "Y" ana bilgisayarındaki "Foo" ve "bar" adreslerine gönderilmiş ve "X" ana bilgisayarı üzerinden "fubar@Z" adresine iletilecek şekilde yönlendirilmiştir ve hâlâ saklı durumdadır.
Yeni bir ileti başka bir MAIL/MRCP dizisi ile gönderilebilir, ancak dikkatli bir gönderici aşağıdaki alışverişi kullanarak durumu sıfırlardı.
S: MRSQ ? <CRLF>
R: 215 T Önce metin, lütfen
Bu, yürürlükte olan düzeni değiştirmeden durumu sıfırlar.