转自:http://www.cnblogs.com/snoopy/articles/129932.html
最近在项目中用到发送邮件的功能,由于以前没有接触过,找了很多资料才终于把它弄出来,今天写下这些,算是做个总结吧。
1、首先定义一个邮件的数据结构类
public class emaildata() {
string from= null;//发件人
string[] recipients = null;//收件人,可以多个
string subject= null;//邮件主题
string content= null;//邮件内容
string contenttype= null;//邮件内容格式(文本或html)
string filename= null;//附件文件名(目前只提供一个附件)
//下面是相应的setter/getter方法,省略..
}
2、发送不带附件的邮件(包括文本格式和html两种格式)
public void postmail(emaildata emaildata)
throws messagingexception,exception {
string from= emaildata.getfrom();
string[] recipients = emaildata.getrecipents();
string subject= emaildata.getsubject();
string content= emaildata.getcontent();
string contenttype = emaildata.getcontenttype();
string filename= emaildata.getfilename();
if (recipients != null && recipients.length > 0) {
properties props = new properties();
//设置邮件服务器地址,连接超时时限等信息
props.put("mail.smtp.host", "10.30.1.233"); //10.30.1.233邮件服务器
props.put("mail.smtp.connectiontimeout", "10000"); //
props.put("mail.smtp.timeout", "10000");//
//创建缺省的session对象
session session = session.getdefaultinstance(props, null);
//创建message对象
message msg = new mimemessage(session);
//设置发件人和收件人
internetaddress addressfrom = new internetaddress(from);
msg.setfrom(addressfrom);
internetaddress[] addressto = new internetaddress[recipients.length];
for (int i = 0; i 以下是转载的关于java mail的介绍
session
--------------------------------------------------------------------
session 定义了一个基本的邮件会话,任何工作都是基于这个session的。session 对象需要一个 java.util.properties 对象来得到类似 邮件服务器,用户名,密码这样的信息。
session 的构造函数是私有的,你可以通过 getdefaultinstance() 方法来取得一个单一的可以被共享的默认session 如:
properties props = new properties();
// 填写一些信息
session session = session.getdefaultinstance(props,null);
或者,你可以使用 getinstance() 方法来创建一个唯一的 session如:
properties props = new properties();
// 填写一些信息
session session = session.getinstance(props,null);
在这两种方法中 其中的 null 参数是一个 authenticator 对象,在这里没有被使用的,所以就是null
在大多数案例中,使用一个共享session 已经做够了。
message
----------------------------------------------------------------
一旦你创建了session对象,那么下面要做的就是创建 message 来发送。message 是一个抽象类,在大部分应用中你可以使用它的子类 javax.mail.internet.mimemessage 。mimemessage 是一个理解在不同rfcs中定义的mime类型以及headers的e-mail message 。 message headers 必须使用 us-ascii 字符集。
可以用如下的方法创建一个 message
mimemessage message = new mimemessage(session);
我们注意到,这里需要用session对象作为构造函数的参数。当然,还有其它的构造函数,比如从用rfc822格式化过的输入流来创建message。
一旦你得到了 message ,你就可以来设置它的各个部分(parts)。设置内容(content)的基本的机制是使用setcontent() 方法。
message.setcontent("email content. ","text/plain");
如果,你能够明确你的使用mimemessage来创建message 并且只是使用普通的文本(plain text) 那么你也可以使用 settext() 方法,settest()方法只需要设置具体的内容,它默认的mime类型是 text/plain
message.settext("email content. ");
对于普通文本类型的邮件,有一种机制是首选( message.settext("email content. "))的设置内容的方法。如果要创建其它类型的message ,比如 html类型的message那么还是需要使用前者 ( message.setcontent("email content. ","text/html"); )
设置主题(subject ),使用setsubject() 方法
message.setsubject(" subject ");
address
----------------------------------------------------------------
当你已经创建session 以及 message,并且已经为message 填充了内容,那么接下来要做的就是给你的邮件添加一个地址(address)。 就像message一样,address也是一个抽象类,我们可以使用它的一个子类javax.mail.internet.internetaddress 。
创建一个地址非常简单
address address = new internetaddress("suixin@asiainfo.com");
如果,你希望在出现邮件地址的地方出现一个名称,那么你只需要再多传递一个参数。
address address = new internetaddress("suixin@asiainfo.com","steve");
你需要为 message 的from以及 to 字段创建address对象。为了识别发送者,你需要使用setfrom() 和 setreplyto() 方法。
messge.setfrom(address);
如果你的message 需要显示多个 from 地址,可以使用 addfrom() 方法
address address[] = {....};
message.addfrom(address);
为了辨识message 的收件人,你需要使用 setrecipient() 方法。这个方法除了address参数之外,还需要一个message.recipienttype 。
message.addrecipient(type,address);
message.recipienttype有几个预先定义好的类型
message.recipienttype.to收件人
message.recipienttype.cc抄送
message.recipienttype.bcc暗送
如果你的一封邮件,需要发送给你的老师,并还要给你的几个同学,那么你可以这样
address toaddress = new internetaddress("teacher@17288.com");
address[] ccaddress = {new internetaddress("schoolmate1@17288.com"),new internetaddress("schoolmate2@17288.com")};
message.addrecipient(message.recipienttype.to, toaddress);
message.addrecipient(message.recipienttype.cc, ccaddress);
javamail 没有提供电子邮件地址有效性的检测。这些超越了javamail api的范围。
authenticator
通过authenticator设置用户名、密码,来访问受保护的资源,这里的资源一般指的是邮件服务器。
authenticator也是一个抽象类,你需要自己编写子类已备应用。你需要实现getpasswordauthentication()方法,并返回一个passwordauthentication实例。你必须在 session被创建时, 注册你的 authenticator。这样,当需要进行认证是,你的authenticator就可以被得到。
properties props = new properties();
//设置属性
authenticator auth = new yourauthenticator();
session session = session.getdefaultinstance(props, auth);
transport
----------------------------------------------------------------
发送消息最后的一步就是使用transport类,你可以通过两种方法来进行发送。
transport 是一个抽象类,你可以调用它静态的send() 方法来发送
transport.send(message);
或者,你可以为你使用的协议从session中取得一个指定的实例,
transport transport = session.gettransport("smtp");
transport.sendmessage(message, message.getallrecipients());
transport.close();
store and folder
这两个类重要用于取得信息。在创建了session之后,需要连接到一个 store ,你需要告诉store你使用的是什么协议。
// store store = session.getstore("imap");
store store = session.getstore("pop3");
store.connect(host, username, password);
在连接到一个 store 后,你可以得到一个 folder,当然,这个floder必须是打开的。
folder folder = store.getfolder("inbox");
folder.open(folder.read_only);
message message[] = folder.getmessages();
如果使用pop3那么,index是唯一可用的文件夹。如果使用的是imap,你就可以使用其它的文件夹。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/