java mail 使用介绍

本文详细介绍了Java邮件发送功能的实现过程,包括邮件数据结构定义、发送邮件的步骤及注意事项。并通过实例展示了如何使用JavaMail API进行邮件发送,包括设置邮件服务器地址、创建邮件对象、添加邮件内容和地址等关键操作。

转自: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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值