-
- 素材大小:
- 1 MB
- 素材授權(quán):
- 免費(fèi)下載
- 素材格式:
- .ppt
- 素材上傳:
- lipeier
- 上傳時(shí)間:
- 2020-01-03
- 素材編號(hào):
- 248815
- 素材類別:
- 課件PPT
-
素材預(yù)覽
這是javamail ppt,包括了JavaMail基礎(chǔ)知識(shí),發(fā)送簡(jiǎn)單郵件,發(fā)送SMTP身份認(rèn)證的郵件,接收郵件,郵件附件的處理等內(nèi)容,歡迎點(diǎn)擊下載。
javamail ppt是由紅軟PPT免費(fèi)下載網(wǎng)推薦的一款課件PPT類型的PowerPoint.
第八章 Java Mail 編程 常見(jiàn)電子郵件協(xié)議 SMTP (Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議) POP(Post Office Protocol,郵局協(xié)議) IMAP(Internet Message Access Protocol,Internet 消息訪問(wèn)協(xié)議) MIME(Multipurpose Internet Mail Extensions,多用途Internet 郵件擴(kuò)展標(biāo)準(zhǔn))不是郵件傳輸協(xié)議,它只定義了需要傳輸?shù)南、附件及其他類型?shù)據(jù)的格式。 Java Mail體系可以分為三層: 抽象層 Internet 郵件實(shí)現(xiàn)層 協(xié)議實(shí)現(xiàn)層 Java Mail抽象層:該層定義了用于郵件處理功能的抽象類、接口和抽象方法,所有的郵件系統(tǒng)都支持這些功能,它獨(dú)立于供應(yīng)商和協(xié)議消息。抽象層位于Java Mail 頂級(jí)包(即javax.mail)內(nèi)。 Internet 郵件實(shí)現(xiàn)層:該層實(shí)現(xiàn)了部分抽象層元素,它遵循Internet 標(biāo)準(zhǔn)―RFC822和MIME。Internet 郵件實(shí)現(xiàn)層所定義的類和接口大多位于javax.mail.internet 包內(nèi)。 協(xié)議實(shí)現(xiàn)層:該層由服務(wù)提供商實(shí)現(xiàn)對(duì)特定協(xié)議的支持,如SMTP、POP、IMAP 和NNTP。Sun 為開(kāi)發(fā)者提供了很完備的一組協(xié)議的支持。 核心Java Mail API 可以分為兩部分,一部分由七個(gè)主要對(duì)象組成:Session、Message、Address、Authenticator、Transport、Store 和Folder,利用這些對(duì)象可以完成包括發(fā)送消息、檢索消息、刪除消息、認(rèn)證、回復(fù)消息、轉(zhuǎn)發(fā)消息、管理附件、處理基于HTML 文件格式的消息及搜索或過(guò)濾郵件列表等任務(wù) 核心Java Mail API 的另一部分的主要接口和類包括Part、Message、Bodypart、Multipart、MimePart、MimeMessage、MimiBodypart 和MimeMultipart,可以用這些類和接口完成電子郵件的閱讀、撰寫等任務(wù)。 程序8-2:SendMail.java(片斷) try{ Properties props = new Properties(); Session sendMailSession; Store store; Transport transport; sendMailSession = Session.getInstance(props, null); props.put("mail.smtp.host", host); Message newMessage = new MimeMessage(sendMailSession); newMessage.setFrom(new InternetAddress(request.getParameter("from"))); newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress ( request.getParameter ("to"))); newMessage.setSubject(request.getParameter("subject")); newMessage.setSentDate(new Date()); newMessage.setText(request.getParameter("text")); Transport.send(newMessage); ////顯示發(fā)送成功的提示 out.println(" the Email send sucess!"); Java Mail API 的中文問(wèn)題。 如果開(kāi)發(fā)者使用setSubject()方法直接設(shè)定中文的主題或者使用setText()方法直接指定中文內(nèi)容,那么在使用Outlook 等客戶端軟件查看郵件時(shí)客戶有可能看到的將是一團(tuán)亂碼。 解決方案?只需要指定郵件主題和郵件正文的字符集為“ISO-8859-1” 即可。 為了防止惡意用戶利用SMTP 服務(wù)器進(jìn)行發(fā)送垃圾郵件等破壞活動(dòng),SMTP 服務(wù)器一般需要身份驗(yàn)證。只有通過(guò)了身份驗(yàn)證的用戶才有權(quán)利利用SMTP 服務(wù)器發(fā)送郵件。 javaMail 用類javax.mail.Authenticator來(lái)進(jìn)行用戶認(rèn)證。驗(yàn)證信息需要通過(guò)Session 傳給郵件服務(wù)器,所以Session 對(duì)象的getInstance 有以下的變形 static Session getInstance(Properties prop,Authenticator auth); static Session getDefaultInstance(Properties prop,Authenticator auth); 其中的Authenticator 負(fù)責(zé)密碼校驗(yàn)。如果不需要驗(yàn)證身份,就用null 做第二個(gè)參數(shù),或者直接用單參數(shù)的getInstance。如果Session 是需要密碼的,那么Session 會(huì)自動(dòng)發(fā)出如下調(diào)用 javax.mail.PasswordAuthentication getPasswordAuthentication(); PasswordAuthentication 只是一個(gè)包裝類,里面包了用戶名和密碼。因此如果要實(shí)現(xiàn)SMTP認(rèn)證的郵件發(fā)送,必須首先自己定義一個(gè)繼承javax.mail.Authenticatior的類。 程序8-4:Auth.java import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class Auth extends Authenticator { String username=""; String password=""; public Auth(String username,String password){ this.username=username; this.password=password; } public PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication( username, password); } } 程序8-5: sendAuthmail.java(片段) //初始化收件人郵件地址、發(fā)件人郵件地址和主機(jī)名,下面的各初始化字符串均為任意設(shè)置 String to = "teacher@hyl.com"; String from = "student@hyl.com"; String host ="127.0.0.1" ; //創(chuàng)建一個(gè)屬性對(duì)象 Properties props = new Properties(); //指定發(fā)送郵件服務(wù)器,使用smtp 協(xié)議 props.put("mail.smtp.host", host); props.put("mail.smtp.auth","true"); Auth au=new Auth("hyl","123456"); //獲取會(huì)話 Session session = Session.getInstance(props, au); try { //創(chuàng)建消息,設(shè)置郵件發(fā)件人地址、收件人地址、主題 MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); msg.setSubject("send Example"); // 開(kāi)始設(shè)置消息內(nèi)容 msg.setSentDate(new Date()); String text="Hi, this is Email by authentication!"; msg.setText(text); // 發(fā)送郵件 Transport.send(msg); ////顯示發(fā)送成功的提示 out.println(" the Email send sucess!"); } catch (MessagingException e) { //異常處理 out.println(" the Email send failed!"); out.println(e.toString()); } 接收郵件過(guò)程比較簡(jiǎn)單,但是接收的方式和服務(wù)器有很大的關(guān)系:是IMAP的服務(wù)器還是普通的POP服務(wù)器,支持多少個(gè)文件夾,支持多少種郵件標(biāo)記。這些都需要事先了解好或者用程序去探測(cè)。 發(fā)送附件 發(fā)送附件非常像轉(zhuǎn)發(fā)消息,程序開(kāi)發(fā)人員需要建立各部分以組成完整消息,完成消息正文后,即開(kāi)始添加其他部件,其中每個(gè) DataHandler 都代表附件,而不是轉(zhuǎn)發(fā)消息情況下的共享處理程序。如果從文件中讀附件,附件的數(shù)據(jù)源是 FileDataSource。而如果從 URL 中讀時(shí),附件的數(shù)據(jù)源是 URLDataSource。一旦存在 DataSource,只要先把它傳遞給 DataHandler 構(gòu)造器,最后再用 setDataHandler() 把它附加到 BodyPart。假定要保留附件的原始文件名,最終要做的是用 BodyPart 的 setFileName() 方法設(shè)置與附件相關(guān)的文件名。 程序8-12:SendAttachmentMail.java(片段) // 正文部分 BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message String contentMessage=request.getParameter("body"); messageBodyPart.setText(contentMessage); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment String filename=request.getParameter("thefile"); messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // Put parts in message mimeMsg.setContent(multipart); // Send the message Transport.send(mimeMsg); 接收附件 從郵件中獲取附件比發(fā)送它們要困難,因?yàn)?MIME 沒(méi)有簡(jiǎn)單的關(guān)于附件的概念。當(dāng)消息包含附件時(shí),消息的內(nèi)容是個(gè) Multipart 對(duì)象。接著,開(kāi)發(fā)者需要處理每個(gè) Part,獲取主要內(nèi)容和附件。標(biāo)有從 part.getDisposition() 獲得的 Part.ATTACHMENT 配置(disposition)的部件(Part)無(wú)疑就是附件。但是,沒(méi)有配置(及一個(gè)非文本 MIME 類型)和帶 Part.INLINE 配置的部件也可能是附件。當(dāng)配置要么是 Part.ATTACHMENT,要么是 Part.INLINE 時(shí),這個(gè)消息部件的內(nèi)容就能被保存。只要用 getFileName() 和 getInputStream() 就能分別得到原始文件名和輸入流。 程序8-13: ReceiveMimeMail.java(片段) Multipart mp = (Multipart)message[nid].getContent(); String szFile=""; File ffile; //String szpath=""; for (int i=0,n=mp.getCount(); i