01_傳智播客張孝祥java郵件開發_課程價值與目標介紹
02_傳智播客張孝祥java郵件開發_郵件方面的基本常識
03_傳智播客張孝祥java郵件開發_手工體驗smtp和pop3協議
第3課時 關於郵件的理論以及通過cmd telnet到服務器發送和接受郵件(這一課時很重要)
其實郵件服務器就類似於郵局,發送方發到自己選擇的郵件服務器,然后郵件服務器發送到目標服務器,目標服務器接收郵件,然后目標去目標服務器接受郵件。這這個過程中必須注意,除了用戶取郵件用的是POP3協議,發送郵件到自己選擇的服務器和自己這邊的服務器轉郵件到目標服務器之間用到的協議都是SMTP協議。只有用戶主動去取郵件的時候才是POP3協議。
每個郵箱就相當於我們取信的和發信的郵局提供的郵件箱一樣。我們的每個申請的郵箱賬號,其實就是一個郵件箱,在郵件服務器上建立了一個賬號和空間,郵件會放着這個服務器給我們開的賬戶的空間里。
郵件服務器按通訊協議分為兩種類型:
SMTP服務器
POP3/IMAP服務器
發送郵件或者是將郵件轉發給另外一個郵件服務器就是用SMTP協議。
如果用戶去取郵件,使用的協議就是POP3協議
Smtp服務器端口號是:25
Pop3服務器端口號是:110
Smtp服務器登陸,首先需要先使用base64格式編碼用戶名和密碼,然后登陸服務器時輸入編碼后的用戶名與密碼給服務器驗證才會通過,而pop3服務器登陸是不需要使用base64編碼的,直接輸入原來的用戶名和密碼。
Dos命令:
>>Telnet mail.sina.com.cn:25 >>Ehlo itcast_test(賬號) //ehlo <<auth login plain >>auth login //-->選擇身份驗證方式 ---->auth login---->輸入base64位的賬號和密碼se << >>basee64 username << >>base64 password << >>Mail from:<iscast_test@sina.com> << >>Rcpt to:<iscast_test@sohu.com> << >>data From :<liliw@sohu.com> To:xx Subject:haha Date: Contetn. //郵件內容 . << . //點是結束 >>Quit
User 賬號 Pass 密碼 Stat List Retr Dele rset
第四課時 發送郵件的原理(相當重要)
一定要注意,其實在cmd中和smtp服務器交流的時候,郵件和服務器之間的關系。
在寫郵件之前,需要先定義mail from<>和rcpt to<>,這個是專門和服務器打交道,由服務器識別的。而在寫郵件的時候,郵件分兩部分,一個是郵件頭,一個是郵件內容(從‘data’表示內容開始,data之后是全部的內容,以一個‘.’ 表示郵件內容結束),內容部分的頭部分又需要再寫一個from:<>,這里面寫郵件的發件人,可以是開始的mail from也可以是另外一個郵箱名字。這個郵件頭,服務器是不檢查的,是給郵件閱讀程序看的,所以發出去之后,在客戶端郵件閱讀程序(outlook)中我們看到的發件人實際上是郵件頭上面寫的發件人,而不是登陸郵箱的發件人的郵箱。一定要注意這點。所以有的郵件中看到發件人的名字是unknown,就是因為郵件頭中沒有輸入發件人的名字。內容需要寫from, to ,subject, date, 然后才是正式的正文
其實就相當於我們自己寫了一封信,但是信上面的發信人不是寫自己的名字,而是別人的名字,冒充別人,收件人是沒辦法區分發件人的真實身份的。
如果是普通的客戶端訪問smtp服務器是需要用戶名和密碼的,而針對各個smtp服務器之間,是不需要用戶名和密碼的,否則的話,smtp服務器是不可能知道那么多smtp服務器用戶名和密碼的。
實際上sina或者是其他郵件服務器提供商(smtp server)都是分為兩塊的,也就是有兩種服務器,
一種是專門給普通用戶訪問的郵件服務器,
一種是給其他郵件服務器供應商訪問的郵件服務器。
如果是普通用戶訪問的郵件服務器,那么用戶訪問的時候就需要提供用戶名和密碼,而其他郵件服務器供應商訪問的專門的郵件服務器,是不需要用戶名密碼的。直接訪問。服務器提供商會將專門給其他郵件服務器供應商訪問的郵件服務器加入到DNS中,這樣當系統查到這個訪問的地址來自於DNS的其他郵件服務器,就會認為對方是郵件服務器,允許它不需要服務器密碼直接訪問這個郵件服務器。而專給個人客戶訪問的郵件服務器則是不能夠加入DNS的,否則其他郵件服務器訪問sina.cn時,有可能找到的是這個專用個人訪問郵件服務器,那么就會需要其他郵件服務器輸入用戶密碼,導致其他郵件服務器無法登陸,郵件服務器之間無法互相轉發郵件。
由於垃圾郵件泛濫,所以,現在網站提供的smtp服務器都要求提供身份驗證,這就要求你在客戶端軟件(outlook)中的賬戶配置的服務器選項中,發送郵件服務器欄目中選中我的服務器要求身份驗證,這樣,服務器驗證了身份才會和幫用戶發送郵件。
>>ipconf /all << >>nslookup << >>set type=mx << >>sina.com << >>exit
JavaMail API按功能分為以下三大類
創建和解析郵件內容的API:Message類是創建和解析郵件的核心API, 它的實力對象代表一封電子郵件。
發送郵件的API:Transport類是發送郵件的核心API類,它的實例對象代表實現了某個郵件接收協議的郵件發送對象,例如SMTP協議
接收郵件的API: Store類是接收郵件核心API類,它的實例對象代表實現了某個郵件接收協議的郵件接收對象,例如POP3協議
Session類:是用於定義整個應用環境信息的,以及收集客戶端與郵件服務器建立網絡連接的會話信息。如郵件服務器的主機名,端口號,采用的郵件發送和接收協議等。
其實JavaMail是分為兩部分,一部分是接口包,一部分是實現類包。Mailapi.jar其實就是一個接口包,里面是沒有實現的,只有在使用的時候,就需要實現包了,這些就是smtp.jar, pop3.jar等
生成郵件的過程中,還使用了一個第三方包,,也就是JAF(JavaBeans Activation Framework. JavaBean激活框架)是一個專用的數據處理框架,用於封裝數據,並為應用程序提供訪問的和操作數據的接口。Javamail.jar使用了JAF.不過,如果使用的是jdk6,就不需要導入jaf.jar了,因為jdk6中包括了jaf的jar包。