Java Mail---SMTP、POP3協議-DOS下手動收發郵件演示過程
轉載請註明出處: http://blog.csdn.net/qq_26525215
本文源自
E-Mail協議簡介:
郵件伺服器,按照提供的服務型別,可以分為傳送郵件的伺服器我接收郵件的伺服器。
傳送郵件的伺服器使用傳送協議,現在常用的是SMTP協議。所以,通常發郵件的伺服器也稱為SMTP伺服器。
接收郵件的伺服器使用接收協議,現在常用的是POP3協議或IMAP協議,所以通常也被稱為POP3或IMAP伺服器。
目前經常見到的伺服器為SMTP和POP3伺服器。如大家在註冊了126的郵箱之後,它的發郵件伺服器為smtp.126.com:25,而收郵件伺服器則為pop3.126.com:110.(冒號後面的為埠號)。
當然,發郵件伺服器和收郵件伺服器也可能是同一臺主機,但埠號一定不相同。預設發郵件伺服器的埠為25,收郵件的埠為110.
注意:
QQ郵箱 POP3 和 SMTP 伺服器地址設定如下:
POP3伺服器(埠110)pop.qq.com SMTP伺服器(埠25)
smtp.qq.com SMTP伺服器需要身份驗證。
如果是設定POP3和SMTP的SSL加密方式,則埠如下:
POP3伺服器(埠995) SMTP伺服器(埠465或587)。
郵件傳送的工作圖:
郵件收/發協議:
●SMTP協議-發郵件協議
全稱為Simple Mail Transfer Protocol(簡單郵件傳輸協議),它定義了郵件客戶端軟體與SMTP伺服器之間、以及兩臺SMTP伺服器之間的通訊規則。埠一般為25.
●POP3協議-收郵件協議
全稱為Post Office Protocol(郵局協議),它定義了郵件客戶端軟體與POP3伺服器的通訊規則。埠一般為110.
●●如果是設定POP3和SMTP的SSL加密方式,則埠如下: POP3伺服器(埠995) SMTP伺服器(埠465或587)。
●IMAP協議-對POP3的擴充套件
全稱為Internet Message Access Protocal(Internet訊息訪問協議),它是對POP3協議的一種擴充套件,定義了郵件客戶端軟體與IMAP伺服器的通訊規則。
開啟SMTP和POP3的服務
win7系統中,預設下 telnet服務是關閉,得用如下方式:
1、控制面板–>程式–>開啟或關閉windows功能,選擇“telnet伺服器” 和 “telnet客戶端”框,點選確定即可。
2、控制面板–>系統安全–>管理工具–>服務–>telnet–>右擊“屬性”–>將“禁用”改為“手動”,應用,再選擇“啟動”
注意,必須先進行第一步,才能在第二步的服務中找到telnet.
Telnet 伺服器不再列入 Windows 10 客戶端或伺服器, 為功能刪除或棄用,如果要使用,請去谷歌上找第三方軟體開啟。
SMTP發郵件協議的命令
SMTP命令及格式:
Ehlo<SP><domain>
<CRLF>
ehlo命令是SMTP郵件傳送程式與SMTP郵件接收程式建立連線後必須傳送的第一條SMTP命令,引數<domain>
表示SMTP郵件傳送者的主機名。ehlo命令用於替代傳統SMTP協議中的helo命令。
<SP>
表示一個空格,<CRLF>
表示一個回車。
Auth<SP><para><CRLF>
如果SMTP郵件接收程式需要SMTP郵件傳送程式進行認證時,它會向SMTP郵件傳送程式提示它所採用的認證方式,SMTP郵件傳送程式接著應該使用這個命令迴應SMTP郵件接收程式,引數<para>
表示迴應的認證方式(login表示登入),通常是SMTP郵件接收程式先前提示的認證方式。
後面2行就是你的郵箱地址還有密碼(編碼後)。
可以用Java中的BASE64Encoder 來進行編碼
Mail<SP>From:<reverse-path><CRLF>
此命令用於指定郵件傳送者的郵箱地址,引數<reverse-path>
表示發件人的郵箱地址。
Rcpt<SP>To: <forword-path><CRLF>
此命令用於指定郵件接收者的郵箱地址,引數<forward-path>
表示接收者的郵箱地址。如果郵件要傳送給多個接收者,那麼應使用多條Rcpt<SP>
To命令來分別指定每一個接收者的郵箱地址。
Data<CRLF>
此命令用於表示SMTP郵件傳送程式準備開始傳送郵件內容,在這個命令後面傳送的所有資料都將被當作郵件內容,直至遇到“<CRLF>
.<CRLF>
”識別符號表示郵件內容結束。
也就是英文的句號
Quit<CRLF>
此命令表示要結束郵件傳送過程,SMTP郵件接收程式接收到此命令後,將關閉與SMTP郵件傳送程式的網路連線。
DOS下發郵件
準備的是sina郵箱,注意在郵箱伺服器(郵箱網站)中要把SMTP和POP3服務的開關開啟(接收方的也需要開啟)!!!
126郵箱伺服器地址:
POP3伺服器: pop3.sina.com
SMTP伺服器: smtp.sina.com
在此處,我們用SMTP伺服器: smtp.sina.com。
我們用下面的程式碼來對使用者名稱和密碼進行編碼
public static void main(String[] args) {
BASE64Encoder be = new BASE64Encoder();
String name = "*****@sina.com";
String pwd = "*********";
name = be.encode(name.getBytes());
pwd = be.encode(pwd.getBytes());
//英文可以不指定編碼
System.out.println(name);
System.out.println(pwd);
}
DOS命令如下:
telnet smtp.sina.com 25
ehlo chx
auth login
Y2h4cG9zdGJveEBzaW5hLmNvbQ==
Y2h4NjE5Njk5NjI5
mail from:<[email protected].com>
rcpt to:<chxpostbox@126.com>
data
from:<[email protected].com>
to:<chxpostbox@126.com>
subject:chx 郵件測試
hello 你好啊,我進來了。
大家好.
.
請求登入:auth login後:
輸入使用者名稱:經過base64編碼以後的。
輸入密碼,也是經過base64編碼以後的。
如果是在Dos下對QQ郵箱傳送的,可以到垃圾郵箱中去找!QQ把它歸類為垃圾郵箱了。。。。
POP3協議的命令-收郵件
命令及其使用格式
user<SP>username
<CRLF>
<SP>
代表空格,<CRLF>
代表回車
user命令是POP3客戶端程式與POP3郵件伺服器建立連線後通常傳送的第一條命令,引數username表示收件人的帳戶名稱。
pass<SP>password
<CRLF>
pass命令是在user命令成功通過後,POP3客戶端程式接著傳送的命令,它用於傳遞帳戶的密碼,引數password表示帳戶的密碼。
stat<CRLF>
stat命令用於查詢郵箱中的統計資訊,例如,郵箱中有郵件數和郵件佔用的位元組大小等。
list<SP>[msg#]
<CRLF>
list命令用於列出郵箱中的郵件資訊,引數msg#是可選引數,表示郵件的序號。當不指定引數時,POP3伺服器列出郵箱中所有的郵件資訊;當指定引數msg#時,POP3伺服器只返回該序號對應郵件的資訊。
retr<SP>msg#<CRLF>
list命令用於獲取某封郵件的內容,引數msg#表示郵件的序號。
dele<SP>msg#<CRLF>
dele命令用於在某封郵件上設定刪除標記,引數msg#表示郵件的序號。POP3伺服器執行dele命令時,只是為郵件設定了刪除標記,並沒有真正把郵件刪除掉,只有POP3客戶端程式發出quit命令後,POP3伺服器才會真正刪除所有設定了刪除標記的郵件。
rset<CRLF>
rset命令用於清除所有郵件的刪除標記。
noop<CRLF>
noop命令用於檢測POP3客戶端與POP3伺服器的連線情況。
quit<CRLF>
quit命令表示要結束郵件接收過程,POP3伺服器接收到此命令,將刪除所有設定了刪除標記的郵件,並關閉與POP3客戶端程式的網路連線
DOS下顯示郵件
telnet pop3.126.com 110
user chxpostbox
pass chx619699629
stat
list
retr 1
quit
stat //顯示總體資訊
list //列出所有信件
retr n //收取序號為n的郵件
轉載請註明出處: http://blog.csdn.net/qq_26525215
本文源自