天天看點

【Java郵件開發】3.郵件協定總結與郵件伺服器的工作原理

我們來對郵件協定進行總結,并探讨郵件伺服器的工作原理

一、郵件協定剖析

1.指令過程描述

記得上一篇總結,我們手動敲指令發郵件的時候,登入smtp伺服器的第一句話是:

ehlo emailtest3842

這是通知郵件伺服器我們即将要登入。

在第一代通信協定當中(smtp的低版本),我們使用的是helo,後來smtp更新之後,

變成了第二代協定,為了區分第一代和第二代,新版的指令變為ehlo。

輸入上面的資訊之後,伺服器一般會回複我們:

auth login plain

這就代表了smtp伺服器要求我們進行權限驗證(登入),選擇登入方式是login還是plain。

接着我們輸入:

auth login

代表我們使用login登入的方式進行授權。

然後smtp伺服器讓我們輸入賬号和密碼:

base64 username

xxxxxx

base64 password

xxxxxx

我們的郵件伺服器需要我們輸入Base64加密之後的賬号和密碼。

下面我們輸入:

mail from:<[email protected]>

表明發郵件的賬号。

smtp伺服器回複OK之類的資訊。

下面我們輸入:

rcpt to:<[email protected]>

表明收件人的賬号。

smtp伺服器回複OK之類的資訊。

然後我們輸入:

data

代表我們要編輯郵件的資訊。

接下來我們編輯郵件内容(from和to等代表的資訊,這裡可以随便填寫):

from:xxxx

to:xxxx

subject:xxxx

date:

content!!!

.

打點“.”之後就結束編輯郵件。

輸入quit就推出smtp郵件伺服器。

二、郵件伺服器的工作原理

我們使用郵件用戶端(如outlook),輸入郵件smtp伺服器資訊和pop3伺服器資訊,

之後輸入賬号密碼就可以進行郵件的收發了。此時有一個問題,當我們從用戶端

登入126的smtp伺服器的時候,是需要輸入賬号密碼的,但是sina向126的smtp伺服器

發送請求和傳遞郵件的時候,是不需要sina輸入賬号密碼的,這個時候126怎麼知道

什麼時候放開smtp伺服器?

其實每個smtp伺服器差別郵件用戶端的請求和其它smtp請求的方法是,當接受到

ehlo請求的時候,隻要判定一下後面跟着的使用者名用DNS域名解析之後的ip是不是請求方

的ip即可,如果不是,那說明是郵件用戶端的請求,就要求輸入賬号密碼進行驗證。

如果是,說明是郵件伺服器的請求,就放行。

這裡以新浪的Smtp處理伺服器為例:

【Java郵件開發】3.郵件協定總結與郵件伺服器的工作原理

差別用戶端和其它smtp伺服器的方法就是上面說的DNS解析區分。

處理用戶端的smtp伺服器的ip絕對不能注冊到DNS中。

題外話:DNS域名解析過程:

【Java郵件開發】3.郵件協定總結與郵件伺服器的工作原理

轉載請注明出處:http://blog.csdn.net/acmman/article/details/70478077