Java Mail API的開發是SUN為Java開發者提供公用API框架的持續努力的良好例證。提倡公用框架,反對受限于供應商的解決方案,
充分預示著一個日益開放的開發環境的建立。Java Mail API的結構本身證明了它的開發者的基本目標之一
--軟件開發的工作量應該取決于應用程序本身的復雜程度以及開發者所要求的控制程度。
換句話說,Java Mail API盡可能地保持簡單。乍看起來,Java Mail API所擁有的類總數以及類之間的關系可能讓人誤解為要花費漫長
的學習時間。實際上,一旦正式開始使用,你就會發現該API不失為在應用程序中加入健壯的郵件/通訊支持的簡單工具

該實例是一個發送電子郵件的簡單實例,由一個填寫郵件內容的HTML頁面index.html。和負責發送郵件的JSP頁面構成。對于初學者有
很好的借鑒作用,內附有詳細的注解

一、index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>填寫郵件信息</title>
<LINK REL="stylesheet" HREF="E:\tomcat 4.1.12\webapps\qds\css.css" TYPE="text/css">
</head>

<body bgcolor="#FFFFCC">
<form name="form1" method="post" action="SendMail.jsp">
<table width="75" border="0" align="center" cellspacing="1" bgcolor="#006600" height="258">

<div align="center">

<font size="5" color="blue">填寫郵件信息</font>
<tr bgcolor="#FFFFFF">
<td width="30%" height="34">發件人地址:</td>
<td width="70%" height="34">
<input name="from" type="text" id="from" CLASS="kuang-bg"></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="30%" height="34">收信人地址:</td>
<td width="70%" height="34">
<input name="to" type="text" id="to" CLASS="kuang-bg"></td>
</tr>

<tr bgcolor="#FFFFFF">
<td width="30%" height="25">主題:</td>
<td width="70%" height="25">
<input name="title" type="text" id="title" CLASS="kuang-bg"></td>
</tr>
<tr>
<td height="119" colspan="2" bgcolor="#FFFFFF">
<textarea name="content" cols="50" rows="5" id="content" CLASS="kuang-bg"></textarea></td>
</tr>
<tr align="center">
<td colspan="2" bgcolor="#FFFFFF" height="27">
<input type="submit" name="Submit" value="發? 送" CLASS="botton">
<input type="reset" name="Submit2" value="重? 寫" CLASS="botton">
</td>
</tr>
</table>
</form>
</body>
</html>


二、sendMail.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<!--%request.setCharacterEncoding("gb2312");%--><!--中文處理代碼-->
<!--導入要用到的類庫-->
<%@ page import="java.util.*"%>
<%@ page import="javax.mail.*"%>
<%@ page import="javax.mail.internet.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>發送郵件</title>
</head>
<body>

<%
try{
//從html表單中獲取郵件信息
String tfrom=request.getParameter("from");
String tto=request.getParameter("to");
String ttitle=request.getParameter("title");
String tcontent=request.getParameter("content");

//JavaMail需要Properties來創建一個session對象。它將尋找字符串"mail.smtp.host",屬性值就是發送郵件的主機.
//Properties對象獲取諸如郵件服務器、用戶名、密碼等信息,以及其他可在整個應用程序中 共享的信息。

Properties props=new Properties();//也可用Properties props = System.getProperties();
props.put("mail.smtp.host","smtp.21cn.com");//存儲發送郵件服務器的信息
props.put("mail.smtp.auth","true");//同時通過驗證

//方法二:(如果是在weblogin配置JavaMail:則需指定JNDI名檢索
//Context ctx=new InitialContext();
//Session s=(Session)ctx.lookup("MailSession");
//Message msg=new MimeMessage(s);


//這個Session類代表JavaMail 中的一個郵件session. 每一個基于 JavaMail的應用程序至少有一個session但是可以有任意多的session。
//Session類定義全局和每個用戶的與郵件相關的屬性。這此屬性說明了客房機和服務器如何交流信息。


Session s=Session.getInstance(props,null);//根據屬性新建一個郵件會話,null參數是一種Authenticator(驗證程序) 對象
s.setDebug(true);//設置調試標志,要查看經過郵件服務器郵件命令,可以用該方法

//? 一旦創建了自己的Session對象,就是該去創建要發送的消息的 時候了。這時就要用到消息類型(MimeMessage是其中一種類型)。
// Message對象將存儲我們實際發送的電子郵件信息,Message對象被作為一個MimeMessage對象來創建并且需要知道應當選擇哪一個JavaMail session。
//? Message類表示單個郵件消息,它的屬性包括類型,地址信息和所定義的目錄結構。

Message message=new MimeMessage(s);//由郵件會話新建一個消息對象

//message.setContent("hello","test/plain");//設置消息的內容類型,如果發送的格式有HTML格式就必須設置,
//message.setText("Hello");//發送一般文本格式的消息

//設置郵件,一旦您創建了 Session 和 Message,并將內容填入消息后,就可以用Address確定信件地址了。
//如果想讓一個名字出現在電子郵件地址后,也可以將其傳遞給構造器:
//Address from=new InternetAddress("xmqds@21cn.com","qdison");//發件人的郵件地址

Address from=new InternetAddress(tfrom);//發件人的郵件地址
message.setFrom(from);//設置發件人

Address to=new InternetAddress(tto);//收件人的郵件地址
message.setRecipient(Message.RecipientType.TO,to);//設置收件人,并設置其接收類型為TO,還有3種預定義類型如下:

//Message.RecipientType.TO
//Message.RecipientType.CC
//Message.RecipientType.BCC

message.setSubject(ttitle);//設置主題
message.setText(tcontent);//設置信件內容
message.setSentDate(new Date());//設置發信時間


message.saveChanges();//存儲郵件信息


// Transport 是用來發送信息的,
// 用于郵件的收發打操作。
Transport transport=s.getTransport("smtp");
transport.connect("smtp.21cn.com","你的用戶名","你的密碼");//以smtp方式登錄郵箱
transport.sendMessage(message,message.getAllRecipients());//發送郵件,其中第二個參數是所有已設好的收件人地址
transport.close();

%>
<div align="center">
<p><font color="#FF6600">發送成功!</font></p>
<p><a href="index.jsp">再發一封</a> </p>
</div>
<%
}catch(MessagingException e){
out.println(e.toString());
}
%>
</body>
</html>