Ⅰ linux 下 mail,mailx 和 sendmail 的區別
通常的做法都是,關閉本機的sendmail服務,修改/etc/mail.rc,增加一下類似兩行,指定外部的smtp伺服器地址、帳號密碼等。
# vi /etc/mail.rc
set [email protected] smtp=smtp.qq.com
set smtp-auth-user=demo smtp-auth-password=ithf smtp-auth=login
然後通過命令來發送郵件
echo hello word | mail -s "demo title" [email protected]
可是發現在RHEL6運行是沒有問題,在RHEL5下,mail命令始終是調用本地的sendmail服務來發送郵件的。到底RHEL6和RHEL5下的mail和mailx又有著什麼關系呢?
RHEL6下
mail 鏈接到 mailx 命令,mailx版本為12.4
# rpm -qa|grep mailx
mailx-12.4-6.el6.x86_64
# ll /bin/mail*
lrwxrwxrwx. 1 root root 5 7月 22 2011 /bin/mail -> mailx
-rwxr-xr-x. 1 root root 390424 2月 16 2010 /bin/mailx
# mail -V
12.4 7/29/08
RHEL5下,則發現了一些不同
mailx 鏈接到 mail 命令,mailx版本為8.1
# rpm -qa|grep mailx
mailx-8.1.1-44.2.2
# ll /bin/mail*
-rwxr-xr-x 1 root mail 84856 Jun 6 2007 /bin/mail
lrwxrwxrwx 1 root root 4 Apr 12 18:03 /bin/mailx -> mail
# mail -V 此處運行就會出錯,沒有-V這個參數
也就是說,在RHEL6\5下,運行mail 和mailx,實際上都是一個命令,而mail版本不同,導致了RHEL5下mail命令無法調用外部SMTP伺服器。
安裝mailx新版本可解決此問題。
Ⅱ linux使用mail命令-- -f指定發件人時出錯
把發件人地址加上-r,放在收件人地址的前面
mail -s "hello world" -r [email protected] [email protected] < a.txt
Ⅲ Linux中關於mail的指令
mail
使用許可權:所有使用者
使用方式:mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...]
說明:
mail 不僅只是一個指令, mail 還是一個電子郵件程序,不過利用 mail 來讀信的人應該很少吧!對於系統管理者來說 mail 就很有用,因為管理者可以用 mail 寫成 script ,定期寄一些備忘錄提醒系統的使用者。
參數:
i 忽略 tty 的中斷訊號。 (interrupt)
I 強迫設成互動模式。 (Interactive)
v 列印出訊息,例如送信的地點、狀態等等。 (verbose)
n 不讀入 mail.rc 設定檔。
s 郵件標題。
c cc 郵件地址。
b bcc 郵件地址。
範例:
將信件送給一個或以上的電子郵件地址,由於沒有加入其他的選項,使用者必須輸入標題與信件的內容等。而 user2 沒有主機位置,就會送給郵件伺服器的 user2 使用者。
mail [email protected]
mail [email protected] user2
Ⅳ 郵件傳輸協議的SMTP模型
SMTP設計基於以下通信模型:針對用戶的郵件請求,發送SMTP建立與接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。
一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收到全部郵件後會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答。
SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者不在同一個傳送服務下時,通過中繼SMTP伺服器傳送。為了能夠對SMTP伺服器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。
MAIL命令參數是回復路徑,它指定郵件從何處來;而RCPT命令的參數是轉發路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返迴路徑(它用於發生錯誤時返回郵件)。
當同一個消息要發往不同的接收者時,SMTP遇到了向不同接收者發送同一份數據的復製品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一個數字代碼。在下面,例子中可以看到哪些使用實際的命令和應答。完整的命令和應答在第四節。
命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏感的。這樣SMTP實現中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。
命令與應答由ASCII字母表組成,當傳送服務提供8位位元組傳送通道,每7位字元正確傳送,而最高位被填充為0。當指定一般的命令或應答格式後,參數會由一些類似於語言的字元串表示出來,如或,這里尖括弧表示這是一種類似於語言的變數。
Ⅳ linux mail命令用法
假設你寫好的文本是mail.txt,發給一樓那位叫orbit687的朋友,主題為hello。格式如下:
mail -s hello orbit687 < mail.txt
Ⅵ SMTP是什麼意思
簡單郵件傳輸協議(SMTP)的目標是可靠高效地傳送郵件,它獨立於傳送子系統而且僅要求一條可以保證傳送數據單元順序的通道。附錄A,B,C和D描述了不同傳送服務下SMTP的使用。在名詞表中還定義了本文檔中使用的術語。
SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了進程間通信環境(IPCE),此環境可以包括一個網路,幾個網路或一個網路的子網。理解到傳送系統(或IPCE)不是一對一的是很重要的。進程可能直接和其它進程通過已知的IPCE通信。郵件是一個應用程序或進程間通信。郵件可以通過連接在不同IPCE上的進程跨網路進行郵件傳送。更特別的是,郵件可以通過不同網路上的主機接力式傳送。
是網際網路電子郵件系統首要的應用 層協議。它使用由TCP提供的可靠的數據傳輸服務把郵件消息從發信人的郵件伺服器傳送到收信人的郵件伺服器。跟大多數應用層協議一樣,SMTP也存在兩個 端:在發信人的郵件伺服器上執行的客戶端和在收信人的郵件伺服器上執行的伺服器端。SMTP的客戶端和伺服器端同時運行在每個郵件伺服器上。當一個郵件服 務器在向其他郵件伺服器發送郵件消息時,它是作為SMTP客戶在運行。當一個郵件伺服器從其他郵件伺服器接收郵件消息時,它是作為SMTP伺服器在運行。
SMTP協議與人們用於面對面交互的禮儀之間有許多相似之處。首先,運行在發送端郵件伺服器主機上的SMTP客戶,發起建立一個到運行在接收端郵件服務 器主機上的SMTP伺服器埠號25之間的TCP連接。如果接收郵件伺服器當前不在工作,SMTP客戶就等待一段時間後再嘗試建立該連接。這個連接建立之 後,SMTP客戶和伺服器先執行一些應用層握手操作。就像人們在轉手東西之前往往先自我介紹那樣,SMTP客戶和伺服器也在傳送信息之前先自我介紹一下。 在這個SMTP握手階段,SMTP客戶向伺服器分別指出發信人和收信人的電子郵件地址。彼此自我介紹完畢之後,客戶發出郵件消息。SMTP可以指望由 TCP提供的可靠數據傳輸服務把該消息無錯地傳送到伺服器。如果客戶還有其他郵件消息需發送到同一個伺服器,它就在同一個TCP連接上重復上述過程;否 則,它就指示TCP關閉該連接。[1]
編輯本段2. SMTP模型
SMTP設計基於以下通信模型:針對用戶的郵件請求,發送SMTP建立與接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。
一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果
SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收到全部郵件後會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答。
SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者不在同一個傳送服務下時,通過中繼SMTP伺服器傳送。為了能夠對SMTP伺服器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。
MAIL命令參數是回復路徑,它指定郵件從何處來;而RCPT命令的參數是轉發路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返迴路徑(它用於發生錯誤時返回郵件)。
當同一個消息要發往不同的接收者時,SMTP遇到了向不同接收者發送同一份數據的復製品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一個數字代碼。在下面,例子中可以看到哪些使用實際的命令和應答。完整的命令和應答在第四節。
命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶名大小寫是敏感的。這樣SMTP實現中就將用戶郵箱名稱保留成初始時的樣子,主機名稱對大小寫不敏感。
命令與應答由ASCⅡ字母表組成,當傳送服務提供8位位元組傳送通道,每7位字元正確傳送,而最高位被填充為0。當指定一般的命令或應答格式後,參數會由一些類似於語言的字元串表示出來,如"<string>"或"<reverse-path>",這里尖括弧表示這是一種類似於語言的變數。
編輯本段3. SMTP過程
本節提供了SMTP中的一些過程。頭一個說明的是基本發送過程(定義為發送操作)。下來描述向前傳送郵件,確認郵箱名稱和擴展郵件列表,發送到終端和打開關閉交換。在本節的最後是對中斷,郵件域的說明。本節的例子只是一部分命令和應答的序列,完整的例子見附錄F。
3.1. MAIL
在SMTP發送操作中有三步,操作由MAIL命令開始給出發送者標識。一系列或更多的RCPT命令緊跟其後,給出了接收者信息,然後是DATA命令列出發送的郵件內容,最後郵件內容指示符確認操作。
過程中的第一步是MAIL命令,<reverse-path >;包括源郵箱。
MAIL <SP> FROM:<reverse-path><CRLF>
此命令告訴接收者新的發送操作已經開始,請復位所有狀態表和緩沖區。它給出反向路徑以進行錯誤信息返回。如果請求被接收,接收方返回一個250 OK應答。<reverse-path>;中不止包括了郵箱,它包括了主機和源郵箱的反向路由,其中的第一個主機就是發送此命令的主機。
過程中的第二步是發送RCPT命令。
RCPT <SP> TO:<forward-path> <CRLF>
此命令給出向前路徑標識接收者,如果命令被接收,接收方返回一個
250 OK應答,並存儲向前路徑。如果接收者未知,接收方會返回一個550 Failure應答。此過程可能會重復若干次。
<forward-path>;不僅包括郵件,它是主機和目的郵箱的路由表,在其中的第一個主機就是接收命令的主機。過程中的第三步是發送DATA命令。
DATA <CRLF>
如果命令被接收,接收方返回一個354 Intermediate應答,並認定以下的各行都是信件內容。當信件結尾收到並存儲後,接收者發送一個250 OK應答。因為郵件是在傳送通道上發送,因此必須指明郵件內容結尾,以便應答對話可以重新開始。SMTP通過在最後一行僅發送一個句號來表示郵件內容的結束,在接收方,一個對用戶透明的過程將此符號過濾掉,以不影響正常的數據。
注意:郵件內容包括如下提示:Date,Subject,To,Cc,From。
郵件內容指示符確認郵件操作並告知接收者可以存儲和再發送數據了。如果此命令被接收,接收方返回一個250 OK應答。DATA命令僅在郵件操作未完成或源無效的情況下失敗。
上面所述的過程是一個發送操作。這些命令只能以上面的順序使用。下例表示了在一個發送操作中這些命令的使用。
SMTP過程例子 此例是在Alpha..ARPA主機的Smith發送郵件給Beta..ARPA主機的Jones,Green和Brown的,這里假定主機Alpha與主機Beta直接相連。
S: MAIL FROM:<[email protected]>
R: 250 OK
S: RCPT TO:<[email protected]>
R: 250 OK
S: RCPT TO:<[email protected]>
R: 550 No such user here
S: RCPT TO:<[email protected]>
R: 250 OK
S: DATA
R: 354 Start mail input; end with<CRLF>.<CRLF>
S: Blah blah blah...
S: ...等等
S: <CRLF>.<CRLF>
R: 250 OK
此信被前兩個人接收,而第三個人在此主機上沒有郵箱。
3.2. 轉發
下面是一些<forward-path>;中目的地址不正確的,但接收者知道正確的目的地址的例子。在這些例子中,下列應答之一(251,551)應該允許發送方與獲得正確地址。
251:用戶不在本地;將向前發送到<forward-path>;。
這個應答意味著,接收方SMTP知道用戶的郵箱在另外的主機上,而且意味著將在未來使用正確的轉向路徑。請注意,主機或者用戶,或者它們兩者是不同的。接收方負責傳送消息。
551 :用戶非本地,請嘗試<forward-path>
這個應答意味著接收SMTP知道用戶的郵箱在另外的主機上,並意味著使用了正確的轉發路徑。注意請注意,主機或者用戶,或者它們兩者是不同的。接收方拒絕接收此用戶的信件,發送者必須根據提供的信息重新發送或者向原發送者返回錯誤信息。下例顯示了這些響應的應用。
轉發的例子
S: RCPT TO:<[email protected]>
R: 251 User not local; will forward to<[email protected]>
或者
S: RCPT TO:<[email protected]>
R: 551 User not local; please try<[email protected]>
3.3. 確認和擴展
SMTP提供了另外的確認用戶名和擴展郵件列表的功能。這些功能由VREF和EXPN命令完成,它們都以字元串為參數。對於VREF命令,字元串參數指的是用戶名,對此命令的響應要包括用戶的命名和用戶的郵箱。對於EXPN命令,字元串參數指的是郵件列表,對此命令的響應多於一個,它們要包括所有列表中用戶的命名和他們的郵箱。
「用戶名」是一個多餘的項目,它是故意被加上的。如果主機採用VREF命令和EXPN命令,最後本地郵箱必須提供用戶名使它被主機確認。如果主機選擇由另外的字元串作為用戶名,也是允許的。
在一些主機中,郵箱列表和一個郵箱的代名有一點不清楚,因為一般的數據結構可能包括兩種類型的入口。如果要發出對郵件列表的確認,應該給出確定響應。在接收到這個消息後,主機將把郵件傳送到列表上所有的地址上去,如果沒有接收到確定響應,就會報告錯誤。例如,
"550 That is a mail list,not a user name"。如果請求用於擴展一個用戶名,可能通過返回包括一個名字的列表來形成確定響應,如果沒有接收到確定響應,就會報告錯誤。(例如,"550 That is a user name,not a mailing list")。
在多個響應的情況下(通常是對於EXPN而言的),每個應答指定一個郵箱。在模糊請求的情況下,例如"VRFY Smith",這里兩個Smith的響應必須是"553 User ambiguous"。
確認用戶名的情況如下例所示:例3:
確認用戶名
S: VRFY Smith
R: 250 Fred Smith<[email protected]>
或者
S: VRFY Smith
R: 251 User not local; will forward to<[email protected]>
或者
S: VRFY Jones
R: 550 String does not match anything.
或者
S: VRFY Jones
R: 551 User not local; please try<Jones@USC-ISIQ.,ARPA>
或者
S: VRFY Gourzenkyinplatz
R: 553 User ambiguous.
郵箱列表要求多個響應的情況如下例所示:
S: EXPN Example-People
R: 250-Jon Postel <[email protected]>
R: 250-Fred Fonebone <[email protected]>
R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.,ARPA>
R: 250-Quincy Smith<@USC-ISIF..ARPA:[email protected]>
R: 250-<[email protected]>
R: 250 <[email protected]>
或者
S: EXPN Executive-Washroom-List
R: 550 Access Denied to You.
VERF和EXPN命令的字元串命令參數因為具體實現的不同而不能再加以限制了。在一些系統上,EXPN命令的參數可能是一個包含郵件列表的文件名,但是在Internet上有許多不同的文件結構。
VRFY和EXPN命令在最小實現中並不包括,當它們實現時,它們也不要求被在傳送間實現。
編輯本段3.4. 發送信件和獲得信件
SMTP的主要目的是將郵件發送到用戶的郵箱中。由一些主機提供的類似的功能是把郵件送至用戶的終端(如果用戶正打開終端)。將郵件送到用戶的郵箱中稱為發送信件(mailing);而送至用戶終端則稱之為獲得信件
(sending)。因為在一些主機上,這兩者的實現十分類似,所以它們同時
被放入了SMTP中。然而,獲得信件命令在SMTP的最小實現中是沒有的。用戶應該具有控制向終端上寫信息的能力。大部分主機允許用戶接受或者拒絕類似的信息。
下面三個命令被定義來支持獲得信件。它們被用於郵件命令而不是MAIL
命令,指示接收SMTP這種操作的特殊意義:
SEND <SP> FROM:<reverse-path><CRLF>
SEND命令要求郵件內容直接傳送到用戶終端。如果用戶未打開終端(或
者未接收終端信息),450響應將返回一個RCPT命令。如果信息被成功發送,此操作成功。
SOML <SP> FROM:<reverse-path><CRLF>;
Send或者MaiL命令要求將郵件內容直接發送到用戶的終端上(如果用戶在終端上)。如果用戶不在終端上,郵件內容直接進入郵箱。如果郵件被發送到用戶終端或者用戶信箱,發送操作成功。
SAML <SP> FROM:<reverse-path><CRLF>
Send和MaiL命令要求郵件內容直接發送到用戶終端上(如果用戶在終端上)。不管怎麼樣,信件都會進入信箱。如果信件進入信箱,發送操作成功。
用於MAIL命令的響應和這些命令的響應相同。
編輯本段3.5. 打開和關閉
當打開傳送通道時,要交換一些信息以確定雙方的身份。以下的命令是
用於打開和關閉的:
HELO <SP> <domain> <CRLF>
QUIT <CRLF>
在HELLO命令中,主機自己發送命令,此命令可以被解釋為:「你好,
我是XX」。
打開聯結的例子
R: 220 BBN-UNⅨ..ARPA Simple Mail Transfer ServiceReady
S: HELO USC-ISIF..ARPA
R: 250 BBN-UNⅨ..ARPA
關閉聯結的例子
S: QUIT
R: 221 BBN-UNⅨ..ARPA Service closing transmissionchannel
編輯本段3.6. 轉發
轉發路徑可能是如下格式:"@ONE,@TWO:JOE@THREE",在這里,ONE,TWO
和THREE是主機。這種格式用於強調地址和路徑的區別。郵箱是絕對地址,路徑是關於如何到達的信息。這兩個概念不應該被混淆。
概念上,轉發路徑的元素被移動到回復路徑作為從一個SMTP伺服器到另一個SMTP伺服器的信息。回復路徑是一個反向數據源路徑,例如從當前信息的位置到發起者的位置。當一個SMTP伺服器從轉發路徑中刪除自己的標記並將它插入到回復路徑中時,它必須使用它發送環境能夠理解的名稱來進行,以防它的名稱在不同的環境中被理解為不同的名字。
如果當SMTP接收到信息的轉發路徑的第一個元素不是此SMTP的標記時,此元素不從轉發路徑中刪除,而被用來決定下一個應該發送到的SMTP伺服器。在任何情況下,SMTP都將自己的標記加入反向路徑中。
使用源路徑時,接收SMTP接收轉發的郵件並發送到另一接收SMTP伺服器上。接收伺服器可以接受或拒絕轉發本地用戶的郵件。接收SMTP通過將它自己的標記從轉發路徑移至回復路徑的開始處來改變命令參數。這時,接收SMTP變成了發送SMTP,也就建立了到下一個轉發路徑中SMTP的通道,然後,它向這個SMTP發送郵件。
在回復路徑上的頭一個主機應是發送SMTP命令的主機,在轉發路徑上第一個主機應是接收SMTP命令的主機。
注意:轉發路徑和回復路徑出現在SMTP命令和應答中,但不一定要出現在信
息中。也就是說,沒有必須要這樣的路徑特別這種格式出現在信息頭的"To:","From:"和"CC:"等域中。
如果SMTP伺服器接受了轉發任務,但後來它發現因為轉發路徑不正確或者其它原理無法發送郵件,它必須建立一"undeliverable mail"信號,將此信號送到此信的發主者那裡。
此信號必須是從此主機的SMTP服務上發出的,當然了,此伺服器不應該再報告出錯信息的錯誤。一種阻止這種出錯報告循環的情況是在信號的郵件命令的回復路徑上置空。在傳送此信息時,允許將回復路徑也置為空。一個MAIL命令後的回復路徑為空表現為如下形式:
MAIL FROM:<>
下例中顯示了不可傳送的郵件信息。此信息是對從HOSTW上的JOE發出的郵件經過在HOSTX需要經過HOSTZ到達HOSTY時出錯的回應。我們看到的例子是在HOSTX和HOSTY之間發生的。
不可傳送郵件信息的例子
S: MAIL FROM:<>
R: 250 ok
S: RCPT TO:<@HOSTX..ARPA:[email protected]>
R: 250 ok
S: DATA
R: 354 send the mail data,end with .
S: Date: 23 Oct 81 11:22:33
S: From: [email protected]
S: To: JOE@HOSTW,.ARPA
S: Subject: Mail System Problem
S: Sorry JOE,your message to [email protected] lost.
S: HOSTZ..ARPA said this:
S: "550 No Such User"
S: .
R: 250 ok
編輯本段常見問題
⒈ SMTP是什麼?有什麼作用?答: SMTP是Simple Mail Transfer Protocol的縮寫,即簡單郵件傳輸協議,是一種提供有效可靠傳送電子郵件的協議,用於在兩台郵件伺服器間交換郵件.
⒉ 郵件伺服器間郵件傳輸使用了TCP協議,為何郵件有時還會丟失?
答: 郵件伺服器之間的SMTP協議使用TCP連接,可以保證郵件准確無誤地在郵件伺服器之間傳輸. 但由於郵件伺服器本身的故障,例如郵件空間不足等,會導致郵件無法完成傳輸而導致丟失.
⒊ 發件人用戶代理為何不直接將郵件發送給收件人的用戶代理,而是通過郵件伺服器來傳輸?
答: 因為用戶電腦性能的限制,無法運行收發郵件的程序,並且無法不間斷地運行並連接到互聯網上. 因此只能將信件暫時存放在郵件伺服器中,用戶需要時就可以去下載信件.
Ⅶ linux mail 命令問題
1、本地需要啟動postfix或者sendmail
2、cat mail.txt |mail -s test [email protected]
3、可以以附件方式發送
uuencode a.txt a.txt |mail [email protected]
Ⅷ 郵件傳輸協議的SMTP命令
SMTP命令定義了郵件傳輸或由用戶定義的系統功能。它的命令是由結束的字元串。而在帶有參數的情況下,命令本身由和參數分開,如果未帶參數可以直接和連接。郵箱的語法格式必須和接收站點的格式一致。下面討論SMTP命令和應答。
發送郵件操作涉及到不同的數據對象,它們由不同的參數相互連接。回復路徑就是MAIL命令的參數,而轉發路徑則是RCPT命令的參數,郵件日期是DATA命令的參數。這些參數或者數據對象必須跟在命令後。這種模式也就要求有不同的緩沖區來存儲這些對象,也就是說,有一個回復路徑緩沖區,一個轉發路徑緩沖區,一個郵件內容緩沖區。特定的命令產生自己的緩沖區,或使一個或多個緩沖的內容被清除。 此命令用於確定郵件內容的唯一接收者;多個接收者將由多個此命令指定。轉發路徑中包括一個可選的主機和一個必須的目的郵箱。當出現主機列表時,這就是一個源路徑,它指明郵件必須向列表中的上一個主機發送。如果接收SMTP未實現郵件的傳遞發送,就會返回如未知本地用戶(550)的信息給用戶。
當郵件被傳遞發送時,傳遞主機必須將自己的名稱由轉發路徑的開始處移至回復路徑的結束處。當郵件最終到達目的地時,接收SMTP將以它的主機郵件格式自己的名稱插入目標郵件中。例如,由傳遞主機A接收的帶有如下參數的郵件時,
FROM:
TO:<@HOSTA. ARPA,@HOSTB .ARPA:[email protected]>
將會變成如下形式:
FROM:<@HOSTA. ARPA:[email protected]>
TO:<@HOSTB .ARPA:[email protected]>.
此命令導致它的轉發路徑參數加入轉發路徑緩沖區中。
DATA (DATA)
接收者將跟在命令後的行作為郵件內容。此命令導致此命令後的郵件內容加入郵件內容緩沖區。郵件內容可以包括所有128個ASCII碼字元。郵件內容由只包括一個句號的行結束,也就是如下的字元序列:.,它指示了郵件的結束。
郵件內容的結束指示要求接收者處理保存的郵件內容。此過程將回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區的內容全部清空。如果操作成功,接收者必須返回OK應答;如果失敗也必須返回失敗應答。
當接收SMTP收到一條信息時,無論是用作轉發還是此郵件已經到達目的地,它都必須在郵件內容的開始處加上時間戳這一行,這一行指示了接收到郵件主機和發出此郵件主機的標識,以及接收到郵件內容的時間和日期。轉發的信件將有多行這樣的時間戳。當接收SMTP作最後一站的傳送時,它將返迴路徑信息行插入郵件中。此行包括了發送命令中的的信息。在這里,最後一站的傳送的意思是郵件將被送到目的用戶手中,但在一些情況下,郵件可能需要更進一步的加工並由另外的郵件系統傳送。
可能在返迴路徑中的郵箱與實際發送的郵件不一致,這個情況可能發生在需要傳送一個特定的錯誤處理信箱而不是信件發送者那裡。上面所述說明了,最後的郵件內容由一個返迴路徑行,和在其後的一個或多個時間戳行構成。這些行後面是郵件內容的頭和體信息。
當處理後面的郵件數據指示部分成功時就需要特定的說明。這種情況可能發生在發送SMTP發現當郵件需要傳送給多個用戶時,只能夠成功地向其中的一部分發送信息這種情況下。在這種情況下,必須對DATA命令發送OK應答,而接收SMTP組織並發送一個「不可傳遞郵件」信息到信息的發送者。在此信息中或者發送一個不成功接收者的列表,或者每次發送一個不成接收者,而發送多次。所有不可傳遞郵件信息由MAIL命令發送。
返迴路徑和接收時間戳例子
Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:[email protected]>
Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST
Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST
Date: 27 Oct 81 15:01:01 PST
From: [email protected]
Subject: Improved Mailing System Installed
To: [email protected]
This is to inform you that ... 此命令用於開始一個郵件操作將郵件內容傳送到一個或多個終端上,並傳送到郵箱中。如果接收者終端打開,郵件內容將被傳送到接收者的終端上和接收者的郵箱中。參數域包括回復路徑,如果成功地將信息送到郵箱中此命令成功。
回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列表上第一個主機是最後經手的主機)。此表用於返回非傳遞信號到發送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。 此命令指定接收方要麼發送OK應答並改變角色為發送SMTP,要麼發送拒絕信息並保持自己的角色。如果程序A是發送SMTP,它發出TURN命令後接收到OK(250)應答,它就變成了接收SMTP。程序A就進入初始狀態,好像通信信道剛打開一樣,這時它發送220准備好服務信號。如果程序B是接收SMTP,它發出TURN命令後接收到OK(250)應答,它就變成了發送SMTP。程序A就進入初始狀態,好像通信信道剛打開一樣,這時它准備接收220准備好服務信號。
若要拒絕改變角色,接收方可以發送502應答。
對於這些命令的順序有一定的限制。對話的第一個命令必須是HELLO命令,此命令在此後的會話中也可以使用。如果HELLO命令的參數不可接受,必須由返回一個501失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態下。 NOOP,HELP,EXPN和VRFY命令可以在會話的任何時候使用。MAIL,SEND,SOML或SAML命令開始一個郵件操作。一旦開始了以後就要發送RCPT和DATA命令。郵件操作可以由RSET命令終止。在一個會話中可以有一個或多個操作。
如果在操作開始參數不可接受,必須返回501失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態下。如果操作中的命令順序出錯,必須返回503失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態下。 會話的最後一個命令必須是QUIT命令。此命令在會話的其它時間不能使用。
Ⅸ linux 如何在命令行下面發送郵件
linux系統默認開啟發送郵件功能,但只能linux用戶間發送郵件,不能發送外部郵件。
方法:
1. 查看sendmail進程是否開啟。你在shell輸入 ps -aux | grep 'sendmail'
2. 使用mail命令發送郵件,例如發送給root用戶
mail -s 'send mail' root 按回車鍵
3. 輸入郵件內容
4. 按ctrl+d發送,按ctrl+c退出
5. 切換到root用戶,你就可以看到一封郵件,郵件存放在/var/mail/root文件里
mail命令用法:mail -s '郵件標題' 用戶名
你可以搜索mail命令
Ⅹ 請問在Linux中怎樣利用mail命令給外網的計算機發送郵件
mail -v -s "mail name" ****@***** < tmp.txt
指定一個文本為mail內容,添加-v參數,方便了解是否出錯。
==
你的情況可以查看一下日誌,看那兒出錯了。