1. 程式人生 > >Java Mail---SMTP、POP3協議-DOS下手動收發郵件演示過程

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伺服器(埠110pop.qq.com SMTP伺服器(埠25) 
smtp.qq.com SMTP伺服器需要身份驗證。
如果是設定POP3和SMTP的SSL加密方式,則埠如下:
POP3伺服器(埠995) SMTP伺服器(埠465587)。

郵件傳送的工作圖:

郵件收/發協議:

●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

本文源自