1 / 19

JSP的電子郵件處理

JSP的電子郵件處理. 客戶端的檔案上傳 JavaMail 寄送電子郵件. JavaMail寄送電子郵件. JavaMail API 使用 JavaMail 寄送電子郵件 電子郵件的附檔處理. JavaMail API-JavaMail 的基礎. JavaMail 是昇陽 API 套件,其相關類別可以輕鬆建立電子郵件系統,內建支援郵件通訊協定 POP3 、 SMTP 和 IMAP4 。簡單的說, JavaMail API 套件的相關類別是在模擬一套郵件工具,其主要類別,如下所示: javax.mail.Session 類別。 javax.mail.Message 類別。

latoya
Download Presentation

JSP的電子郵件處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JSP的電子郵件處理 • 客戶端的檔案上傳 • JavaMail寄送電子郵件

  2. JavaMail寄送電子郵件 • JavaMail API • 使用JavaMail寄送電子郵件 • 電子郵件的附檔處理

  3. JavaMail API-JavaMail的基礎 • JavaMail是昇陽API套件,其相關類別可以輕鬆建立電子郵件系統,內建支援郵件通訊協定POP3、SMTP和IMAP4。簡單的說,JavaMail API套件的相關類別是在模擬一套郵件工具,其主要類別,如下所示: • javax.mail.Session類別。 • javax.mail.Message類別。 • javax.mail.Transport類別。 • javax.mail.Folder類別。 • javax.mail.Store類別。 • 在本節主要說明電子郵件的寄送,所以只會使用Session、Message和Transport三個類別。

  4. JavaMail API-下載 • 在昇陽網站可以免費下載JavaMail API,本書使用的版本是1.3.2,其下載網址,如下所示: http://java.sun.com/products/javamail/downloads/index.html • 在上述網址可以下載ZIP格式的壓縮檔:javamail-1_3_2.zip。JavaMail API需要配合JavaBeans Activation Framework(JAF)處理附檔,所以我們還需要下載JAF,本書使用的版本是1.0.2,其下載網址,如下所示: http://java.sun.com/products/javabeans/glasgow/jaf.html • 上述網址可以下載ZIP格式的壓縮檔:jaf-1_0_2-upd.zip。

  5. JavaMail API-安裝 • 安裝JavaMail API的第一步是使用解壓縮工具從壓縮檔取出2個JAR檔案,如下所示: • mail.jar檔案:從JavaMail API下載檔案javamail-1_3_2.zip取出mail.jar檔案。 • activation.jar檔案:從JAF下載檔案jaf-1_0_2-upd.zip取出activation.jar檔案。 • 第二步在Resin的JSP容器安裝JavaMail,就是將mail.jar和activation.jar兩個檔案複製到Resin安裝目錄的「C:\resin-3.0.9\lib」資料夾。

  6. 使用JavaMail寄送電子郵件-匯入套件與伺服器設定使用JavaMail寄送電子郵件-匯入套件與伺服器設定 • 在JSP程式使用JavaMail API需要匯入一些套件,如下所示: <%@ page import="java.util.*, java.io.*"%> <%@ page import="javax.mail.*"%> <%@ page import="javax.mail.internet.*"%> • 在匯入上述套件後,JSP程式需要先設定系統使用的郵件伺服器和通訊協定,如下所示: Properties props = new Properties(); props.put("mail.host", "ms2.hinet.net"); props.put("mail.transport.protocol", "smtp");

  7. 使用JavaMail寄送電子郵件-取得Session物件 • 在建立MimeMessage的電子郵件前,JSP程式需要先取得Session物件,如下所示: Session s = Session.getInstance(props, null); • 上述程式碼使用getInstance()方法取得Session物件,參數是前述Properties物件。

  8. 使用JavaMail寄送電子郵件- 建立MimeMessage物件 • 在取得Session物件後,就可以建立MimeMessage物件,即一封電子郵件,如下所示: MimeMessage msg = new MimeMessage(s); • 上述程式碼使用Session物件的建構子參數建立MimeMessage物件,然後使用MimeMessage物件的方法指定郵件內容。

  9. 使用JavaMail寄送電子郵件- MimeMessage物件方法

  10. 使用JavaMail寄送電子郵件- Transport物件 • Transport物件使用類別方法send()來寄送電子郵件,如下所示: Transport.send(msg); • 上述程式參數是MimeMessage物件,可以將參數的電子郵件寄送出去。

  11. 範例 • <%@ page contentType="text/html; charset=MS950"%> • <%@ page import="java.util.*, java.io.*"%> • <%@ page import="javax.mail.*"%> • <%@ page import="javax.mail.internet.*"%> • <html> • <head><title>Ch12_4_2.jsp</title></head> • <body> • <% • // 設定系統使用的SMTP郵件伺服器 • Properties props = new Properties(); • props.put("mail.host", "ms2.hinet.net"); // 主機名稱 • props.put("mail.transport.protocol", "smtp"); // 指定協定 • // 建立Session物件載入通訊協定和郵件伺服器 • Session s = Session.getInstance(props, null); • // 取得表單輸入的郵件內容 • String from = request.getParameter("from"); • String to = request.getParameter("to"); • String subject = request.getParameter("subject"); • String text = request.getParameter("text"); • // 建立Message物件 • MimeMessage msg = new MimeMessage(s); • msg.setFrom(new InternetAddress(from)); // 指定寄件者 • // 指定收件者 • msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); • msg.setSubject(subject); // 指定主旨 • msg.setText(text); // 指定郵件內容 • // 使用Transport物件寄送電子郵件 • Transport.send(msg); • %> • <p align="center">郵件已經寄到:<%=to %>.</p> • </body> • </html>

  12. 電子郵件的附檔處理-說明 • 對於HTML格式或附檔郵件來說,在MIME郵件內容需要分成多個區段,多區段MIME郵件內容是一個MimeMultipart物件,每一個區段是一個MimeBodyPart物件,如下所示: • 一般郵件區段:MIME郵件的文字內容部分,這是MimeBodyPart物件,可以指定郵件內容是一般文字或HTML文件。 • 附檔區段:MIME郵件的附檔部分也是MimeBodyPart物件,我們需要使用JAF的DataHandler類別來處理附檔。

  13. 電子郵件的附檔處理-建立MimeMultipart物件 • 寄送MimeMessage物件的郵件擁有多區段MIME郵件內容,需要建立MimeMultipart物件儲存郵件內容,如下所示: MimeMultipart mm = new MimeMultipart(); • 上述程式碼在建立好MimeMultipart物件後,就可以分別建立各區段的MimeBodyPart物件,然後使用addBodyPart()方法新增MimeBodyPart物件的郵件區段。

  14. 電子郵件的附檔處理-HTML格式郵件 • 對於多區段的MIME郵件來說,文字內容部分是一個MimeBodyPart物件,如下所示: MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setContent(text, type); • setContent()方法可以指定郵件內容,第2個參數是字串內容的MIME型態,值"text/html;charset=Big5"為HTML格式,值"text/plain;charset=Big5"是一般文字內容。 • 接著將區段新增到MimeMultipart物件的多區段郵件內容,如下所示: mm.addBodyPart(mbp1);

  15. 電子郵件的附檔處理-附檔處理1 • 在電子郵件如果擁有附檔,檔案需要先上傳到伺服器,才能將附檔內容新增到電子郵件中,JSP程式可以使用MultipartRequest物件上傳檔案後,然後使用getParameter()方法取得郵件內容,對於附檔來說是取得附檔名稱,如下所示: String filename = mreq.getFilesystemName("file"); • 上述程式碼取得附檔檔名後,就可以建立附檔的MimeBodyPart物件的區段,如下所示: MimeBodyPart mbp2 = new MimeBodyPart();

  16. 電子郵件的附檔處理-附檔處理2 • 在建立MimeBodyPart物件後,需要使用FileDataSource物件取得附檔的資料來源,如下所示: FileDataSource fds = new FileDataSource(path+filename); mbp2.setDataHandler( new DataHandler(fds)); mbp2.setFileName(fds.getName()); • 在建立好區段的內容後,就可以將區段新增到MimeMultipart物件的多區段郵件內容,如下所示: mm.addBodyPart(mbp2);

  17. 電子郵件的附檔處理-指定MimeMessage物件的郵件內容電子郵件的附檔處理-指定MimeMessage物件的郵件內容 • 現在的MimeMultipart物件一共擁有mbp1和mbp2兩個區段,最後,可以指定MimeMessage物件的郵件內容,如下所示: msg.setContent(mm); • 上述程式碼使用MimeMessage物件的setContent()方法指定參數MimeMultipart物件的郵件內容。

  18. 範例 • <%@ page contentType="text/html; charset=MS950"%> • <%@ page import="java.util.*, java.io.*"%> • <%@ page import="javax.mail.*"%> • <%@ page import="javax.mail.internet.*"%> • <%@ page import="javax.activation.*"%> • <%@ page import="com.oreilly.servlet.MultipartRequest"%> • <html> • <head><title>Ch12_4_3.jsp</title></head> • <body> • <% • // 取得上傳檔案, 指定上傳目錄 • String path = application.getRealPath("/"); • int maxSize = 2*1024*1024; // 上傳檔案最大尺寸為2MB • // 建立MultipartRequest物件 • MultipartRequest mreq = new MultipartRequest(request, path, maxSize, "MS950"); • // 取得表單輸入的郵件內容 • String from = mreq.getParameter("from"); • String to = mreq.getParameter("to"); • String type = mreq.getParameter("type"); • String subject = mreq.getParameter("subject"); • String text = mreq.getParameter("text"); • // 設定系統使用的SMTP郵件伺服器 • Properties props = new Properties(); • props.put("mail.host", "ms2.hinet.net"); // 主機名稱 • props.put("mail.transport.protocol", "smtp"); // 指定協定 • // 建立Session物件載入通訊協定和郵件伺服器 • Session s = Session.getInstance(props, null); • // 建立Message物件 • MimeMessage msg = new MimeMessage(s); • msg.setFrom(new InternetAddress(from)); // 指定寄件者

  19. // 指定收件者 • msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); • msg.setSubject(subject); // 指定主旨 • msg.setSentDate(new Date()); // 指定日期 • // 建立MIME的多區段郵件, 一共擁有2個區段 • MimeMultipart mm = new MimeMultipart(); • // 建立區段1: 文字內容的BodyPart郵件 • MimeBodyPart mbp1 = new MimeBodyPart(); • mbp1.setContent(text, type); // 指定HTML或一般文字郵件 • mm.addBodyPart(mbp1); // 將BodyPart新增到MIME郵件 • // 取得附檔名稱 • String filename = mreq.getFilesystemName("file"); • if ( filename != null ) { // 有檔名才建立附檔區段 • // 建立區段2: 附檔的Bodypart物件 • MimeBodyPart mbp2 = new MimeBodyPart(); • FileDataSource fds = new FileDataSource(path+filename); • // 指定DataHandler物件 • mbp2.setDataHandler(new DataHandler(fds)); • mbp2.setFileName(fds.getName()); • mm.addBodyPart(mbp2); // 將BodyPart新增到MIME郵件 • } • msg.setContent(mm); // 指定郵件內容 • // 使用Transport物件寄送電子郵件 • Transport.send(msg); • %> • <p align="center">郵件已經寄到:<%=to %>.</p> • </body> • </html>

More Related