程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> WebSphere >> 在WebSphere Studio中使用JavaMail

在WebSphere Studio中使用JavaMail

編輯:WebSphere

引言

Java™Mail API 使電子郵件客戶端能夠從郵件服務器發送和接收電子郵件。該 API 為構建基於 Java 的電子郵件和消息傳遞應用程 序提供了平台和協議獨立的框架。JavaMail API 實現為可選的 Java 平台包,也可作為  Java 2 Platform Enterprise Edition(J2EE)的 一部分進行使用。

本文的重點是使用 JavaMail API 構建一個應用程序,然後用IBM® WebSphere® Studio Application Developer(以下稱為 Application Developer)測試該程序。本文還提供了關於免費電子郵件服務器和 JavaMail 場景的信息。

如果 您有使用 JavaMail 1.1 規范的經驗,您將可以用特性(Property)對象創建一個郵件會話。然而,對於 JavaMail 1.2,最好是通過 JNDI 查 找郵件會話,而不是通過特性創建一個新的會話。根據 WebSphere V5 InfoCenter,應該一直查找郵件會話。

J2EE 規范把郵件會話實 例看作是資源或工廠,可以從中獲取郵件傳輸和存儲連接。不要硬編碼郵件會話,也就是填寫特性對象,然後用它來創建 avax.mail.Session 的實例。

Application Developer 允許您使用 JavaMail,而無需任何特定的文件設置。惟一需要設置的是實際的郵件會話資源。

Application Developer沒有為編輯郵件提供者和創建郵件會話提供 GUI 界面。必須直接在 WebSphere Admin 控制台中完成這兩項任 務。本文將著重於發送遵循 JavaMail 規范的電子郵件。

先決條件

確保您有可用的 SMTP 郵件服務器——它通常由 ISP 提供,您可以通過 SMTP 郵件服務器發送電子郵件。如果您不知道任何郵件服務器,您可以安裝您自己的。一個您可以下載的免費郵件服 務器程序是 PostCast Server,它將您的機器轉變成出站 SMTP 郵件服務器。對於本文,您可以用 PostCast Server 代替來自ISP的 SMTP 服 務器。

安裝和配置 PostCast SMTP 郵件服務器

下載安裝圖標。

雙擊下載的文件,系統應該會啟動安裝向導。

單擊 Welcome 頁面上的 Next。

接受許可協議,然後單擊 Next。

指定 安裝位置,然後單擊 Next:

再一次單擊 Next,開始安裝。

在安裝完成之後(可能要花一些時間),單擊 Finish,關閉安裝程序。

現在, PostCast Server 已經安裝在您的計算機上。不過,還需要進行一些配置,下面將指導您如何進行配置:

從 Windows® Start菜單 中,選擇 Programs =>PostCast Server =>PostCast Server,啟動 Setup 向導。單擊 Next。

出於演示的目的,在 Incoming Connection頁面上,選擇 Allow access ONLY for users with these IP addresses。在缺省情況下,郵件服務器的 IP 地址會列出。將其他 的 IP 地址添加到訪問控制列表中會允許那些機器使用郵件服務器。如果您沒有檢查這個選項,那麼任何由網絡連接到您的計算機的機器都可 以使用郵件服務器,這將給您的計算機引入不必要的通信。

單擊 Next,繼續進行配置:

選擇下一個窗口中的 Immediately,然後單擊 Next,這樣 郵件服務器將立即把郵件發出。.

選擇下一個窗口中的所有選項,然後單擊 Next:

下一個窗口會給您顯示 SMTP 服務的服務器名和端口號。請留意出站 SMTP 郵件服務器名,因為在本文的後面我們將用它來配置 WebSphere Test Server。在本例中,出站郵件服務器名為 colinyu。單擊 Next:

單擊 Finish,關閉向導,然後單擊 OK。

下一步是測試您的新郵件服務器。在導航棒上,單擊 New Message 圖標。一個電子郵件電子郵件編輯器將出現。編寫一個測試消息,然後 單擊 Save。這個消息將存儲在郵件服務器的發件箱中,並且將自動發送到收件人;

在幾分鐘之後檢查您的郵箱。如果您收到了測試消息,則您的郵件服務器工作正常。下一部分將指導您在Application Developer 的 WebSphere Test Environment(WTE)中用 servlet 來發送 JavaMail。

編寫一個簡單的電子郵件客戶端

啟動 Application Developer V5.1:

進入 Windows Start菜單。

選擇 Programs =>IBM WebSphere Studio =>Application Developer 5.1。

步驟1. 開始一個新的 EAR 和 Web 項目

僅僅通過 Web 模塊創建一個 1.3 EAR 項目:

選擇 New =>Projects =>Enterprise Application Project。

選擇 Create 1.3 J2EE Enterprise Application Project,然後選擇 Next。

輸入 JavaMailSample作為項目名,然後單擊 Next。

單擊 New Module,創建一個新的 Web 項目。確保只有 Web Project 被選中。

單擊 Finish。

步驟2. 創建服務器和服務器配置

創建 WebSphere Test Environment V5 服務器和服務器配置:

選擇 File =>New =>Other。

選擇 Server =>Server and Server Configuration,然後單擊 Next。

輸入 WTE5作為服務器名,並且確保 WebSphere V5 Test Environment 被選中。

單擊 Finish。

步驟3. 在WebSphere Test Environment 服務器中設置 JavaMail 會話

Application Developer 中的嵌入式 WTE 服務器帶有內置郵件題供者。啟動 WTE5 服務器和管理控制台:

切換到 Server 透視圖。從 Workbench 菜單中,選擇 Window =>Open Perspectives =>Other =>Server。

在 Server Configuration視圖中,展開 Servers,然後雙擊 WTE5,打開 Server Configuration 編輯器。

在 Server Configuration Editor中,切換到 Configuration 頁面。

選擇 Enable administrative console,然後保存和關閉編輯器。

在 Server 視圖中,右鍵單擊 WTE5,然後選擇 Start。

在看到消息 Server is open for e-business 之前保持等待。在 Server視圖中,右鍵單擊 WTE5,然後選擇 Run administrative console 。

在管理控制台中設置郵件會話:

輸入任一用戶 id,然後單擊 OK。

展開 Resources,然後選擇 Mail Providers。

選擇 Server,然後單擊 Apply。

單擊 Built-in Mail Provider。

單擊 Mail Sessions。

單擊 New,創建一個新的郵件會話。

輸入 mailsession1作為 Name。

輸入 mail/mailsession1作為 JNDI Name。

輸入 SMTP 郵件服務器名作為 Mail Transport Host。例如,如果您有來自 ISP 的郵件服務器,那麼就在此輸入該郵件服務器的名稱。如 果您配置了您自己的 PostCast 郵件服務器,那麼就輸入您先前在此文本框中得到的出站郵件服務器的名稱(如 colinyu.ibm.com)。如果可 以使用域名,則也可以包括進來(如 colinyu.ibm.com)。將 localhost 用作 PostCast 服務器的服務器名無效,因為它需要附加配置。

確保 Transport Protocol 為 smtp。

向下滾屏至本頁的底部,然後單擊 Apply。

在頁面頂部,單擊 Save,保存配置。

再一次單擊 Save,然後關閉 Administrative Console 窗口。

圖1. 在管理控制台中創建一個 JavaMail 會話

步驟4. 創建一個簡單的發送郵件 servlet

這一部分指導您創建一個發送電子郵件的 servlet。在 JavaMailSampleWeb 文件夾下創建一個 servlet:

在 J2EE perspective _ J2EE Navigator中,右鍵單擊 JavaMailSampleWeb,然後選擇 New =>Other。

選擇 Web =>Servlet,然後單擊 Next。

輸入 com.ibm.javamailsample作為 Package name。

輸入 TestServlet作為 Servlet name。然後單擊 Finish。

將黑體子代碼添加到編輯器中。將發送者和接收者的電子郵件改為您自己的。例如,將 [email protected] 改為您自己的電子郵件地址 。保存它。

package com.ibm.javamailsample;
import java.io.IOException;

     import java.io.PrintWriter;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @version 1.0
* @author
*/
public class TestServlet extends HttpServlet {
/**
* @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

     performTask(req, resp);
}
/**
* @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

     performTask(req, resp);
}

public void performTask(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
PrintWriter out = resp.getWriter();
out.println("hello");
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
javax.mail.Session mail_session = 
(javax.mail.Session) ctx.lookup(
"java:comp/env/mail/session1");
MimeMessage msg = new MimeMessage(mail_session);
msg.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
msg.setFrom(new InternetAddress("[email protected]"));
msg.setSubject("testing");
msg.setText("hello - testing");
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}

上面的代碼使用本地 JNDI 名( java:comp/env/mail/session1)查找郵件會話。因此,您需要在部署描述符(Deployment Descriptor) 中創建一個名為 mail/session1 資源引用,並且將本地 JNDI 名( mail/session1)綁定到您在步驟3中定義的全局 JNDI 名。

遵循下列步驟來創建 Web 部署描述符中的資源引用:

切換到 J2EE perspective -- J2EE Navigator視圖。

在 JavaMailSampleWeb下,雙擊 Web Deployment Descriptor,打開 Web Deployment Descriptor 編輯器。

選擇編輯器中的 References選項卡。

選擇編輯器頂部的 Resource選項卡。

單擊 Add來添加新的資源引用並輸入 mail/session1。

單擊 Browse來選擇 Type。定位到 javax.mail.session,然後單擊 OK。

在 WebSphere Bindings字段中,輸入 mail/mailsession1 作為 JNDI name。這個字段引用執行步驟4時在 WebSphere Test Server 中定義 的郵件會話的全局 JNDI 名。

保存並關閉 Web Deployment Descriptor 編輯器。

圖2. 設置 Web 部署描述符中的資源引用

步驟5. 測試 servlet

重新啟動 WTE5 服務器,以便從管理控制台中選出新的郵件會話:

切換到 Server 透視圖。右鍵單擊 WTE5,然後選擇 Stop。

將 JavaMailSample EAR 添加到服務器中。從 Server Configuration 視圖中,右鍵單擊 WTE5,然後選擇 Add =>JavaMailSample。

運行 TestServlet。在 J2EE 透視圖——J2EE 導航器中,右鍵單擊 TestServlet.java,然後選擇 Run on Server。

選擇 Use an existing server,並確保 WTE5 高亮顯示。單擊 Finish。

現在檢查您的電子郵件,您應該測試 servlet 是否已經把電子郵件發送到了您。

將簡單的項目擴展成真實的應用程序

許多公司通過郵件郵寄硬復制的目錄給顧客,並且允許顧客從公司的 Web 站點請求目錄。這個應用最簡單的實現是將顧客請求存儲在數據 庫中,然後由雇員定期檢查數據庫並發出目錄。

JavaMail 提供了另一個方法來實現這個場景。在顧客通過 Web 站點提交目錄請求之後,包含訂單請求的電子郵件被發送到公司雇員,該雇 員負責發出目錄。這個實現減少了所需代碼的數量,並且不需要數據庫。這種方法當然有缺點。如果您想保存信息以供將來使用,您就仍然需 要數據庫。在那種情況下,選擇組合的方法可能要好一些。盡管如此,JavaMail 方法提供了一種可維護的便利解決方案:

圖3. 使用 JavaMail API 的目錄請求應用程序

Web 項目 CatalogueRequest 實現了 JavaMail 解決方案。CatalogueRequest.html 允許顧客提交對硬復制目錄的請求。在提交之後, MailServlet 就通過 SMTP 服務器和公司的郵件服務器把電子郵件發送到雇員的郵箱中。您可以 下載該解決方案的實現。遵循下列步驟來進行 設置(假定在服務器配置中該郵件會話被命名為 mail/mailsession1):

下載 WAR 文件(如果您還沒有這樣做的話)。

選擇 File =>Import以把下載的 WAR 文件導入工作區。

選擇 WAR file,然後單擊 Next。

定位到下載的 WAR 文件。

確保 New Web project被選中。

輸入 CatalogueRequest作為 Web 項目名。

選擇 Existing EAR project。

定位並選擇 JavaMailSample作為 EAR 項目。

單擊 Finish。

在 J2EE perspective/J2EE Navigator視圖中,展開 CatalogueRequest/Java Source/com.ibm.javamailsample,然後雙擊 MailServlet 以在編輯器中打開它。將收件人的電子郵件地址改為您的電子郵件帳號。

切換到 Server 視圖。右鍵單擊 WTE5 server =>Restart。

展開 CatalogueRequest/Web Contents。右鍵單擊 CatalogueRequest.html,然後選擇 Run on server。

填寫信息,然後提交請求表單。

檢查您的郵箱,查看您是否收到了帶有請求信息的電子郵件。

圖4. CatalogueRequest.html

圖5. CatalogueResponse.html

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved