http://www.javachina.cn/Commend.jsp
從Sun的官方網(wǎng)站上下載到JavaMail類文件包。除 此之外還需要Sun的JAF(JavaBeans Activation Framework ),否則JavaMail將不能運行。
HTML郵件表格
JSP最大的特色之一就是能把項目分類或劃分成許多組件,從而提高了組件的重利用率, 也降低了編程的難度。因此我們在編程的時候也要想著如何把大的問題劃分成一個個模塊: 模塊一 一個HTML表單,能把電子郵件信息傳送給JSP程序
模塊二 一個處理和發(fā)送郵件的JSP頁面
JavaMail的基礎(chǔ)知識
使用JavaMail是發(fā)送電子郵件所需要的組件 。
JavaMail的機構(gòu)使處理電子郵件非常容易。下面列出了一些我們需要的類:
1.Properties
JavaMail需要Properties來創(chuàng)建一個session對象。它將尋找字符串"mail.smtp.host", 屬性值就是發(fā)送郵件的主機,如:
Properties props = new Properties ();
props.put("mail.smtp.host", "smtp.abcd.com");//可以換上你的smtp主機名。
2.Session
這個Session類代表JavaMail 中的一個郵件session. 每一個基于 JavaMail的應(yīng)用程序 至少有一個session但是可以有任意多的session。 在這個例子中, Session對象需要知道用 來處理郵件的SMTP 服務(wù)器。為了做到這一點,你可以參照下面的例子用Properties 來創(chuàng)建 一個Session 對象
Session sendMailSession;
sendMailSession = Session.getInstance(props, null);
3.Transport
郵件是既可以被發(fā)送也可以被受到。JavaMail使用了兩個不同的類來完成這兩個功能: Transport 和 Store。 Transport 是用來發(fā)送信息的,而Store用來收信。對于這的教程我 們只需要用到Transport對象。Store的用法請參看Sun的JavaMail文檔。
用法:Transport transport;
transport = sendMailSession.getTransport("smtp");
用JavaMail Session對象的getTransport 方法來初始化Transport。傳過去的字符串申 明了對象所要使用的協(xié)議,如"smtp"。這將為我們省了很多時間。因為JavaMail以境內(nèi)置了 很多協(xié)議的實現(xiàn)方法。
注意: JavaMail并不是絕對支持每一個協(xié)議,目前支持IMAP、 SMTP和 POP3。
4.Message
Message對象將存儲我們實際發(fā)送的電子郵件信息,Message對象被作為一個MimeMessag e對象來創(chuàng)建并且需要知道應(yīng)當(dāng)選擇哪一個JavaMail session。
使用方法是:Message newMessage = new MimeMessage(sendMailSession);
JavaMail結(jié)合JSP
一、構(gòu)建JSP程序
前面我們建造了一個HTML表單用來發(fā)送郵件信息,又介紹了JavaMail中的一些對象和方 法。現(xiàn)在我們將把這些組件集合起來來構(gòu)成我們的郵件系統(tǒng)。
第一步也是最重要的一步,確信在page指令中導(dǎo)入了需要的類。除了JavaMail的相關(guān)的 類和JAF外,不要忘了導(dǎo)入java.util.date ,因為我們需要它來給郵件蓋上時間戳。
<%
@ page import= " javax.mail.*, javax.mail.internet.*, javax.activation.*, java.util.*"
%>
下一步,創(chuàng)建郵件發(fā)送出去的確認(rèn)信息,如"你的郵件已發(fā)送,請返回"
二、創(chuàng)建并發(fā)送Message對象
創(chuàng)建Message 對象的方法我們在第三課中就以討論過了,我們可以用Message來處理消息 了,就像在Message對象上使用get和set屬性一樣簡單。在這一部分使用了很多request.get Parameter()。
newMessage.setFrom(new InternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(reques t.getParameter("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(new Date());
newMessage.setText(request.getParameter("text"));
現(xiàn)在終于可以把消息發(fā)送出去了:
transport.send(newMessage);
三、完整的程序
上面的都是一些零零碎碎的代碼,現(xiàn)在我們把它們寫成一個完整的JSP程序。注意要捕捉 任何錯誤并把它們顯示給用戶。
源程序二:JavaMail 電子郵件發(fā)送系統(tǒng)的JSP實現(xiàn)程序代碼:
<%@ page
import=" javax.mail.*, javax.mail.internet.*, javax.activation.*,java.util .*"
%>
<html>
<head>
<TITLE>JavaMail 電子郵件發(fā)送系統(tǒng)</TITLE>
</HEAD>
<BODY>
<%
try{
Properties props = new Properties();
Session sendMailSession;
Store store;
Transport transport;
sendMailSession = Session.getInstance(props, null);
props.put("mail.smtp.host", "smtp.abcd.com");
Message newMessage = new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(re quest.getParameter("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(new Date());
newMessage.setText(request.getParameter("text"));
transport = sendMailSession.getTransport("smtp");
transport.send(newMessage);
%>
<p>你的郵件已發(fā)送,請返回。</p>
<%
}
catch(MessagingException m)
{
out.println(m.toString());
}
%>
</BODY>
</HTML> |