第8章 電子郵件的發(fā)送和接收_第1頁
第8章 電子郵件的發(fā)送和接收_第2頁
第8章 電子郵件的發(fā)送和接收_第3頁
第8章 電子郵件的發(fā)送和接收_第4頁
第8章 電子郵件的發(fā)送和接收_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Java網(wǎng)絡程序設計第8章 電子郵件的發(fā)送和接收 “跨越長城,我們可以達到世界的任何角落?!边@是1987年9月20日從8北京向海外發(fā)出的中國第一封電子郵件發(fā)。 至今,電子郵件在我們日常生活中的作用越來越重要。電子郵件有諸多優(yōu)點,不同的電子郵件服務商之間互聯(lián)互通,可以減少會議和電話的數(shù)量,能留下決策的書面記錄,還能讓處于不同時區(qū)的人更加方便地聯(lián)系。例如,美國和中國之間的通信用電子郵件就很方便,如果用即時通信因為時差顛倒的問題,很難同時在線。 現(xiàn)在,人們大量地使用電子郵件,因為它發(fā)送起來十分容易。 本章介紹電子郵件的發(fā)送與接收。8.1 E-mail協(xié)議簡介 郵件服務器按照提供的服務類型,可以分為發(fā)

2、送郵件服務器(簡稱發(fā)送服務器)和接收郵件服務器(簡稱接收服務器)。 發(fā)送郵件服務器使用郵件發(fā)送協(xié)議,現(xiàn)在常用的是SMTP,所以通常發(fā)送郵件服務器也稱為SMTP服務器; 接收郵件服務器使用接收郵件協(xié)議,常用的有POP3協(xié)議和IMAP協(xié)議,所以通常接收郵件服務器也稱為POP3服務器或IMAP服務器。8.1 E-mail協(xié)議簡介8.1.1 SMTP簡單郵件傳輸協(xié)議 SMTP(Simple Mail Transfer Protocol),即簡單郵件傳輸協(xié)議,是Internet傳送E-mail的基本協(xié)議,也是TCP/IP協(xié)議組的成員。 SMTP協(xié)議解決郵件系統(tǒng)如何通過一條鏈路,把郵件從一臺機器傳送到另一

3、臺機器上的問題。 SMTP協(xié)議的特點是具有良好的可伸縮性,這也是它成功的關鍵。它既適用于廣域網(wǎng),也適用于局域網(wǎng)。8.1.1 SMTP簡單郵件傳輸協(xié)議 SMTP工作在兩種情況下,一種是電子郵件從客戶機傳輸?shù)椒掌鳎涣硪环N是從一個服務器傳輸?shù)搅硪粋€服務器 SMTP是個請求/響應協(xié)議,它監(jiān)聽25號端口,用于接收用戶的Mail請求,并與遠端Mail服務器建立SMTP連接。 SMTP通常有發(fā)送SMTP和接收SMTP兩種工作模式。 它的具體工作方式為: 當發(fā)送SMTP接收到用戶的郵件請求后,首先判斷此郵件是否為本地郵件,若是,則直接投送到用戶的郵箱; 否則:8.1.1 SMTP簡單郵件傳輸協(xié)議 向DNS查

4、詢遠端郵件服務器的記錄,并建立與遠端接收SMTP之間的一個雙向傳送通道,此后, SMTP命令由發(fā)送SMTP發(fā)出,由接收SMTP接收,而應答則反向傳送。如下圖所示8.1.1 SMTP簡單郵件傳輸協(xié)議 一旦傳送通道建立, SMTP發(fā)送者發(fā)送MAIL命令指明郵件發(fā)送者 如果SMTP接收者可以接收郵件,則返回OK應答。 SMTP發(fā)送者再發(fā)出RCPT命令確認是否接收到。 如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發(fā)出拒絕接收應答(但不中止整個郵件操作) 雙方將如此操作多次。 當接收者收到全部郵件后,會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答8.1.1 SMTP簡單郵件傳

5、輸協(xié)議 SMTP協(xié)議由于非常簡單,使得它得到了廣泛的運用,在Internet上能夠發(fā)送郵件的服務器幾乎都支持SMTP協(xié)議。8.1.2 POP3郵局協(xié)議 POP(POP,Post Office Protocol)用于電子郵件的接收,它使用TCP的110端口。 POP3(Post Office Protocol 3),即郵局協(xié)議第3版,是 Internet接收郵件的基本協(xié)議,也是TCP/IP協(xié)議組的成員。 RFC1939描述了POP3協(xié)議,網(wǎng)址為“/rfc/rfc1939.txt”。 POP3既允許接收服務器向郵件用戶發(fā)送郵件,也可以接收來自SMTP服務器的郵件

6、。 郵件客戶端軟件會與POP3服務器交互,下載由POP3服務器接收到的郵件。8.1.2 POP3郵局協(xié)議 POP3協(xié)議有三種狀態(tài),認可狀態(tài),處理狀態(tài),和更新狀態(tài)。 當客戶機與服務器建立聯(lián)系時,一旦客戶機提供了自己身份并成功確認,即由認可狀態(tài)轉入處理狀態(tài),在完成相應的操作后客戶機發(fā)出quit命令,則進入更新狀態(tài),更新之后最后重返認可狀態(tài)。如下圖 。8.1.2 POP3郵局協(xié)議 基于POP3協(xié)議的郵件系統(tǒng)能提供快速、經(jīng)濟和方便的郵件接收服務,深受用戶的青睞。8.1.3 接收郵件的新協(xié)議IMAP IMAP(Internet Message Access Protocol),即互聯(lián)網(wǎng)消息訪問協(xié)議,是一

7、種功能比POP3更強大的新的接收郵件協(xié)議。 目前最新的IMAP協(xié)議版本為IMAP4,RFC2060描述了IMAP4,網(wǎng)址為“/rfc/rfc2060.txt”。 IMAP4與POP3協(xié)議一樣提供了方便的下載郵件服務,允許用戶在脫機狀態(tài)下閱讀已經(jīng)下載到本地硬盤的郵件。但IMAP4的功能遠遠不只這些,它還具有以下功能:8.1.3 接收郵件的新協(xié)議IMAP 摘要瀏覽郵件的功能; 選擇性下載附件的功能; 鼓勵用戶把郵件一直存儲在郵件服務器上; 允許用戶把遠程郵件服務器上的郵箱作為信息存儲工具。 IMAP的監(jiān)聽端口143。8.1.4 MIME簡介 MIME(Multi

8、purpose Internet Mail Extensions,多用途Internet郵件擴充標準)不是郵件傳輸協(xié)議,而是對郵件格式所作的規(guī)范。 RFC2045、RFC2046和RFC2047對MIME作了描述。 MIME是對RFC822的擴充,RFC822規(guī)定了內容只包括采用ASCII編碼的純文本的郵件的格式,而MIME允許在郵件中包含附件。8.2 JavaMail API簡介 SUN公司制定了JavaMail API,它封裝了按照各種郵件通信協(xié)議,如IMAP、POP3和SMTP,與郵件服務器通信的細節(jié),為Java應用程序提供了收發(fā)電子郵件的公共接口,參見圖8.2 JavaMail API

9、簡介 JavaMail API主要位于javax.mail包和ernet中,下圖為其中主要類的類框圖。表示郵件會表示郵件會話話表示接收表示接收郵件服務郵件服務器上的注器上的注冊用戶的冊用戶的存儲空間存儲空間,通過,通過getFolder()方法,方法,可以訪問可以訪問用戶的特用戶的特定郵件夾定郵件夾表示郵件表示郵件夾夾通過指定的通過指定的郵件發(fā)送服郵件發(fā)送服務器來發(fā)送務器來發(fā)送郵件郵件電子郵件電子郵件郵件地址郵件地址8.3 發(fā)送電子郵件發(fā)送電子郵件8.3.1 電子郵件的工作原理電子郵件的工作原理 電子郵件與普通郵件有類似的地方,發(fā)信者要注明收件人的姓名與地址,發(fā)送方

10、服務器把郵件傳送到收件方服務器,收件方服務器再把郵件發(fā)送到收件人的郵箱中,如圖所示: 使用過桌面郵件客戶端的人都知道,關聯(lián)一個郵件賬戶,需要設置它的SMTP郵件發(fā)送服務器和POP3郵件接收服務器,如下圖所示:8.3 發(fā)送電子郵件發(fā)送電子郵件8.3.2 發(fā)送電子郵件例 1.發(fā)送郵件基本信息類8.3 發(fā)送電子郵件發(fā)送電子郵件 import java.util.Properties; public class MailSenderInfo /發(fā)送郵件服務器的IP地址和端口private String mailServerHost;private String mailServerPort;/郵件發(fā)送

11、者的地址private String fromAddress;/郵件接收者的地址private String toAddress;8.3 發(fā)送電子郵件發(fā)送電子郵件/郵件發(fā)送服務器的用戶名和密碼private String userName;private String password;/是否需要身份驗證private boolean validate = false;/郵件主題private String subject;/郵件的文本內容private String content;/郵件附件的文件名private String attachFileName;8.3 發(fā)送電子郵件發(fā)送電子郵件

12、 public Properties getProperties()Properties p = new Properties();p.put(mail.smtp.host, this.mailServerHost);p.put(mail.smtp.port, this.mailServerPort);p.put(mail.smtp.auth, validate?true:false);return p; 8.3 發(fā)送電子郵件發(fā)送電子郵件public String getMailServerHost() return mailServerHost;public void setMailServ

13、erHost(String mailServerHost) this.mailServerHost = mailServerHost;public String getMailServerPort() return mailServerPort;8.3 發(fā)送電子郵件發(fā)送電子郵件 public void setMailServerPort(String mailServerPort) this.mailServerPort = mailServerPort; public String getFromAddress() return fromAddress; public void setFro

14、mAddress(String fromAddress) this.fromAddress = fromAddress; 8.3 發(fā)送電子郵件發(fā)送電子郵件public String getToAddress() return toAddress;public void setToAddress(String toAddress) this.toAddress = toAddress;public String getUserName() return userName;8.3 發(fā)送電子郵件發(fā)送電子郵件public void setUserName(String userName) this.u

15、serName = userName;public String getPassword() return password;public void setPassword(String password) this.password = password;8.3 發(fā)送電子郵件發(fā)送電子郵件public boolean isValidate() return validate;public void setValidate(boolean validate) this.validate = validate;public String getSubject() return subject;8.

16、3 發(fā)送電子郵件發(fā)送電子郵件public void setSubject(String subject) this.subject = subject;public String getContent() return content;public void setContent(String content) this.content = content;8.3 發(fā)送電子郵件發(fā)送電子郵件public String getAttachFileName() return attachFileName;public void setAttachFileName(String attachFileN

17、ame) this.attachFileName = attachFileName;8.3 發(fā)送電子郵件發(fā)送電子郵件 2. 對電子郵件的認證類: import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator String userName = null;String password = null;8.3 發(fā)送電子郵件發(fā)送電子郵件 public MyAuthenticator(String username

18、,String password)this.userName = username;this.password = password; protected PasswordAuthentication getPasswordAuthentication()return new PasswordAuthentication (userName,password); 8.3 發(fā)送電子郵件發(fā)送電子郵件 3. 電子郵件發(fā)送者的類: import java.util.Date; import java.util.Properties; import javax.mail.Address; import

19、javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import ernet.InternetAddress; import ernet.MimeMessage;8.3 發(fā)送電子郵件發(fā)送電子郵件 public class SimpleMailSender /* * 以文本格式發(fā)送郵件 * param mailInfo 待發(fā)送的郵件的信息 */public boole

20、an sendTextMail(MailSenderInfo mailInfo)/MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();8.3 發(fā)送電子郵件發(fā)送電子郵件if(mailInfo.isValidate()/如果需要身份驗證,則創(chuàng)建一個密碼驗證器authenticator = new MyAuthenticator (mailInfo.getUserName(),mailInfo.getPassword(); /根據(jù)郵件會話屬性和密碼驗證器構造一個發(fā)送郵件的sessionSessi

21、on sendMailSession = Session.getDefaultInstance(pro, authenticator);8.3 發(fā)送電子郵件發(fā)送電子郵件 try/根據(jù)session創(chuàng)建一個郵件消息Message mailMessage = new MimeMessage (sendMailSession);Address from = new InternetAddress (mailInfo.getFromAddress();/設置郵件發(fā)送者的地址mailMessage.setFrom(from);/創(chuàng)建郵件接收者地址,并設置到郵件消息中Address to = new InternetAddress (mailInfo.getToAddress();8.3 發(fā)送電子郵件發(fā)送電子郵件mailMessage.setRecipient(Message.RecipientType.TO, to);/設置郵件消息的主題mailMessage.setSubject(mailInfo.getSubject();/設置郵件消息發(fā)送時間mailMessage.setSentDate(new Date();/設置郵件消息的主要內容String mailContent

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論