SMTP Inside Out

互聯網電子郵件如何工

你有沒有想過當你按下電子郵件程序中的發送按鈕時會發生什麼? 可能不會,我想 - 只要它有效。 不過,這正是你應該懷疑的原因。 萬一有些東西不起作用,那麼知道不起作用是很好的。 通常,這只是解決方案的一半。

當您發送電子郵件SMTP進場時。 SMTP是簡單郵件傳輸協議(RFC 5321:簡單郵件傳輸協議)中定義的簡稱。 您的郵件客戶端 使用這個乾淨而簡單的過程與SMTP服務器 交談一個地方到另一個地方獲取電子郵件

調情

您的電子郵件程序將成為SMTP客戶端 ,連接到郵件服務器的 端口 25(通常是SMTP端口 ),並且 - EHLO說。 最後,電腦只是人,重要的是它要表現出禮貌。 實際上,它並不試圖禮貌,而是使用稍後添加到SMTP中的HELO命令(SMTP命令通常由四個字符組成)。

兩種口味的HELO

EHLO是最近的一個,它使服務器通告所支持的所有附加功能(例如傳送狀態通知或傳送包含安全ASCII字符以外的消息的功能)。

並不是每個服務器都會允許這個問候語,但它需要接受一個普通的HELO,它自然會假定沒有附加功能。 不過,這兩個hello命令確實需要客戶端在** LO之後指定其域。 在實踐中,這看起來像這樣:

220 mail.domain.net ESMTP服務器
HELO
501 HELO需要域名地址
HELO本地主機
250 mail.domain.net你好本地主機[127.0.0.1],很高興認識你

(我的輸入是斜體 ,服務器輸出是黑色的;以5開頭的行表示錯誤 。)

發件人

該協議的其餘部分確實值得該屬性簡單。 如果您想發送電子郵件,則以關鍵字MAIL FROM:開頭。 接下來是發件人的電子郵件地址 ,正如發件人所建議的那樣。 不要忘記在地址周圍加括號,但是(比如)。 繼續我們的例子,我們有:

MAIL FROM:
250 sender@example.com ...發件人確定

收件人

服務器接受發件人地址後,客戶可以提供收件人地址。 此行動的命令RCPT TO:再次頗具啟發性。 我想發郵件給自己

RCPT TO:recipient@example.com
250 support@lifewireguide.com ...收件人確定(將排隊)

服務器將排隊意味著:它會將郵件保存在本地,並將其與所有其他排隊郵件一起以間隔(例如,每30分鐘一次)發送。 這種行為取決於配置,服務器也可能立即傳送郵件。

我們差不多完成了。 但是,仍然缺少的是重要的部分:實際的信息。

消息

現在“信封”已經完成,電子郵件消息的數據可以按照原樣進行。 這個“數據”由電子郵件的正文標題字段組成

啟動使服務器接受消息的狀態的命令是DATA 。 接下來是電子郵件消息的所有標題字段,然後是正文,這兩個字段僅佔用一大塊文本(或數據)。 要告訴服務器輸入已完成,單獨一行上的一個點被使用(\ r \ n。\ r \ n)。 所以我發送我的消息:

數據
輸入郵件,以“。”結尾。 在一條線上
消息ID:
日期:1997年8月17日星期日18:48:15 +0200
來自:Heinz Tschabitscher
致:Heinz Tschabitscher
主題:Summarize-Proust競賽

去天鵝的世界!

250 SAA19153消息接收供貨

是的,這意味著您可以在“收件人:”字段中聲明與電子郵件地址完全不同的名稱。 例如,您可以使用“ 收件人列表已取消”

結束

您現在可以發送盡可能多的電子郵件,只要您重複MAIL FROM:到的步驟即可 。 如果你完成了,你可以用QUIT命令退出服務器,這就是我們所做的:

放棄
221再見

我怎樣才能做到這一點?

非平凡的解決方案是通過端口25遠程登錄到您的外發郵件服務器 (您可以在您的電子郵件客戶端的帳戶設置中找到其地址)。

更簡單的方法是使用這個Java小程序 ,它試圖模仿SMTP協議並指導您完成對話。