Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

JavaMail 学习笔记

前言:
        J2EE应用中涉及到发送邮件,通常采用javamail库。

Part 1  安装
      安装前要确保你的机子上安装得有标准版的JDK和Web服务器,并且已配置好.

     (1).安装JavaMail API。现在最常用的 JavaMail API 版本是1.3.
   要使用 JavaMail 1.3 API,请下载 JavaMail 1.3 实现,解开Javamail-1_3.zip 文件,并将 mail.jar 文件添加到 CLASSPATH 中。除了核心类,随版本 1.3 实现一起提供的还有 SMTP、IMAP4 和 POP3 供应商。
  
      (2).JavaBeans Activation Framework(1.0.2版) 的安装
      JavaMail API 的所有版本都需要 JavaBeans Activation Framework 来支持任意数据块的输入及相应处理。功能似乎不多,但目前许多浏览器和邮件工具中都能找到这种基本的 MIME 型支持。下载完框架后,解开 jaf1_0_2.zip 文件,并将 activation.jar 文件添加到 CLASSPATH 中。
  
      注: 如果使用的是J2EE的SDK,不需要上面操做。

Part 2 基本类介绍
     (1) javax.mail.Properties类
  JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.

用法:
         Properties props = new Properties ();
   props.put("mail.smtp.host", "smtp.163.com");//可以换上你的smtp主机名。


     (2) javax.mail.Session类
  这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。

用法:
   Session sendMailSession;
   sendMailSession = Session.getInstance(props, null);


      (3) javax.mail.Transport类
  邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和Store. Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。

用法:
      Transport transport;
  transport = sendMailSession.getTransport("smtp");

  用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议,如"smtp"。这将为我们省了很多时间。因为JavaMail以境内置了很多协议的实现方法。

 注意: JavaMail并不是绝对支持每一个协议,目前支持IMAP、 SMTP和 POP3.


      (4) javax.mail.MimeMessage类
  Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。

  用法:
        Message newMessage = new MimeMessage(sendMailSession);


       (5) javax.mail.InternetAddress类
      一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用Address确定信件地址了。和 Message 一样,Address 也是个抽象类。您用的是Javax.mail.internet.InternetAddress 类.

     用法:
     InternetAddress from=new InternetAddress("xxf@cafe.com");


       (6) javax.mail.Store类
      Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。

      用法:
      Store store=s.getSorte("pop3");//s为一个邮件会话
      store.connect(popserver,username,password);//通过你提供的pop地址,用户名和密码登录你的邮箱


     (7) javax.mail.Folder类
     Folder类用于分级组织邮件,并提供照Javax.mail.Message格式访问email的能力。

      用法:
      Folder folder=store.getFolder("INBOX");
      folder.open(Folder.READ_ONLY);


     (8) javax.mail.Internet.MimeMultpart
      一般保存电子邮件内容的容器是Multipart抽象类,它定义了增加和删除及获得电子邮件不同部分内容的方法.由于Multipart是抽象类,我们必须为它使用一个具体的子类,JavaMail API提供javax.mail.Internet.MimeMultpart类来使用MimeMessage对象.

      用法:
      MimeMultipart multipart=new MimeMultipart();

注:我们使用MimeMultipart对象的一个方法是addBodyPart(),它在我们的电子邮件内容里添加BodyPart(BodyPart类在下面紧接着要介绍)对象.消息可以有很多部分,一个BodyPart可以代表一个部分.


      (9) javax.mail.Internet.MimeBodyPart类

       MimeBodyPart是BodyPart具体用于mimeMessage的一个子类.
       MimeBodyPart对象代表一个MimeMessage对象内容的一部分.每个MimeBodyPart被认为有两部分:
       ⊙一个MIME类型
       ⊙匹配这个类型的内容

        用法:
       MimeBodyPart mdp=new MimeBodyPart();
       String text="Hello JavaMail!";
       mdp.setContent(text,"text/plain");//定义MIME类型为text/plain,并设置MimeBodyPart的内容.


     (10) javax.activation.DataHandler类(包含在JAF中)
       JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的.JavaMail API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.

      用法:
      DataHandler dh=new DataHandler(text,type);
      mdp.setDatahandler(dh);//mdp是一个MimeBodyPart对象


     (11) javax.activation.FileDataSource类(包含在JAF中)
     一个FileDataSource对象可以表示本地文件和服务器可以直接访问的资源.一个本地文件可以通过创建一个新的MimeBodyPart对象附在一个mimeMessage对象上.

      用法:
      MimeMultipart mm=new MimeMultipart();
      MimeBodyPart mdp=new MimeBodyPart();
      FileDataSource fds=new FileDataSource("c:/exam.txt");
      mdp.setDataHandler(new DataHandler(fds)); //设置数据源
      mm.addBodyPart(mdp); //为当前消息MimeMultipart对象增加MimeBodyPart


    (12) javax.activation.URLDataSource类(包含在JAF中)
     远程资源,URL不会指向它们,由一个URLDataSource对象表示.一个远程资源可以通过创建一个新mimeBodyPart对象附在一个mimeMessage对象上(同FileDataSource差不多). 

Part 3 发送Html格式邮件示例,上传附件使用了Oreilly 的MultpartRequest库。
    

<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
javamail2
</title>
</head>
<body bgcolor="#ffffff">
<h1>
利用javamail发送Html格式邮件
</h1>
<form name="SendMessage" method="POST" action="do_javamail2.jsp"  enctype="multipart/form-data">
   
<p>
    寄信人:
<input type="text" name="From" size="30" maxlength="30" value="nobody_am@163.com"/>
  
</p>
  
<p>
    收信人:
<input type="text" name="To" size="30" maxlength="30" value="ming3232@21cn.com"/>
  
</p>
  
<p>
    主题:
<input type="text" name="Subject" size="30" maxlength="30"  value="test"/>
  
</p>
  
<p>
    附加文件:
<input type="file" name="FileName" />
  
</p>
  
<p>
    内容:
<textarea name="Message" cols="40" rows="5">Hello</textarea>
  
</p>
  
<input type="submit" value="发送"/>
  
<input type="reset" value="清除"/>
</form>
</body>
</html>

 

<!-- Action File -->
<%@ page contentType="text/html; charset=GBK" %>
<%@ 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" %>
<%!
InternetAddress[] address
=null;
%>

<%
String mailserver="smtp.163.com";  //mail Server
String name="nobody_am";     //登录名
String passwd="xxxx";

MultipartRequest multi
=new MultipartRequest(request,"webapps/mailtest",5*1024*1024);

String From=multi.getParameter("From");
String To=multi.getParameter("To");
String Subject=multi.getParameter("Subject");
String messageText=multi.getParameter("Message");

String FileName;

if(multi.getFilesystemName("FileName")==null)
{
  FileName
=null;
}
else
{
 FileName
=multi.getFilesystemName("FileName");
}

boolean sessionDebug=true;

try{
  java.util.Properties props
=System.getProperties();

  props.put(
"mail.host",mailserver);
  props.put(
"mail.smtp.auth","true");//同时通过验证

  javax.mail.Session mailSession
=javax.mail.Session.getInstance(props);
  mailSession.setDebug(sessionDebug);

  Message msg
=new MimeMessage(mailSession);

  msg.setFrom(
new InternetAddress(From));  //From
  address
=InternetAddress.parse(To,false);
  msg.setRecipients(Message.RecipientType.TO,address);   
//To
  msg.setSubject(Subject);  
//Subject
  msg.setSentDate(
new Date());  //Date

if(FileName!=null)
{
 File file
=new File(FileName);

 MimeBodyPart mbp1
=new MimeBodyPart();
 mbp1.setContent(messageText.toString(),
"text/html");

 MimeBodyPart mbp2
=new MimeBodyPart();
 FileDataSource fds
=new FileDataSource(FileName);
 mbp2.setDataHandler(
new DataHandler(fds));
 mbp2.setFileName(fds.getName());

 Multipart mp
=new MimeMultipart();
 mp.addBodyPart(mbp1);
 mp.addBodyPart(mbp2);
 msg.setContent(mp);
 msg.saveChanges();  
//save msg
}
else
{
 msg.setContent(messageText.toString(),
"text/html");
}
  Transport transport
=mailSession.getTransport("smtp");
  transport.connect(mailserver,name,passwd);
//以smtp方式登录邮箱
  transport.sendMessage(msg,msg.getAllRecipients());
  transport.close(); 
//close
  out.println(
"邮件已顺利传送");
}catch(MessagingException mex)
{
  mex.printStackTrace();
}
%>

后记: 使用的时候依据上述内容,自行封装一个发送mail的类。

posted on 2005-10-08 16:46 MingIsMe 阅读(326) 评论(0)  编辑  收藏 所属分类: 06 J2EE

 
Powered by:
BlogJava
Copyright © MingIsMe