邮件服务器按照提供的服务类型,可以分为发送协议类型和接受服务器类型。发送邮件服务器使用邮件发送协议,
现在常用的是SMTP,所以通常发送邮件的服务器也常叫做SMTO服务器。接受服务器使用邮件接受协议,常用的有
POP3和IMAP协议,所以通常称为POP3服务器或IMAP服务器。
SMTP (Simple Mail Transfer Protocol),即简单邮件传输协议,是Internet传送E-mail的基本协议,也是TCP/IP
协议组的成员。SMTP协议解决邮件系统如何通过一条链路,把邮件从一台及其传送到另一台机器上的额问题。SMTP服务
器的特点是具有良好的可伸缩性,即适用于局域网,也适用于广域网。下面是它的简单过程:
客户邮件首先到达邮件发送服务器,再由发送服务器负责传送到接受方的服务器。。发送邮件前,发送服务器会于接
收方服务器联系,以确认接收方服务器是否己准备好接收邮件。如果已经准备好,则传送邮件;如果没有准备好,发送
服务器会等待,并在一段时间后继续于接收方服务器进行联系。若在规定的事件联系不上,发送服务器会发送一个消息到
客户的邮箱说明这个情况。
POP3 (Post Office Protocol 3)邮局协议第三版,是Internet接收邮件的基本而协议,也是TCP/IP协议组的成员。
POP3既允许接收服务器向邮件用户发送邮件,也可以接收来自SMTP邮件服务器的邮件。特点是快速,经济和方便。
下面是发送过程:
用户通过自己所熟悉的邮件客户端软件,如Foxmail,Outlook Express和the Bat等,经过相应的参数设置(主要是
设置POP3邮件服务器的IP地址或者域名,用户名及口令)后,只要选择接收邮件操作,就能够ioujiang远程邮件服务器
的所有邮件下载到用户的本地硬盘上。下载了邮件后,用户就可以阅读本地有就爱你,并且可以删除服务器上的邮件。
IMAP (Internet Message Access Protocol),互联网消息访问协议,是一种功能比POP3更强大的新的接收邮件协议。
除了与POP3一样的功能,它还有一下功能:
1.摘要浏览邮件的功能。允许用户先阅读邮件的该要信息,瑞邮件的而到达事件,主题,发件人和大小然后再决定是否
下载邮件
2.选择性下载附件的功能,如果一封邮件有5个附件,其中只有连个是用户需要的,那么用户接可以只下载那两个附件,
节省了下载其余三个附件的时间。
3.鼓励用户把邮件一直存储在邮件服务器上。用户可以在服务器上建立任意层次结构的油价夹,并且可以灵活的邮件
夹之间移动邮件。
4.允许用户把远程邮件服务器上的邮箱作为信息存储工具。
MIME(Multipurpose Internet Mail Extensions,多用途Internet邮件扩充标准)不是邮件传输协议,而是对邮件格式
所做的格式规范。MIME可以将发信人电子邮件中的文本以及各种附件都打包后发送,传送时即时编码,收信人的软件收到
邮件后也是即时解码还原。
JavaMail API主要位于javax.mail和javax.mail.internet中
1.javax.mail.Session类
Session类表示邮件会话,是JavaMail API的最高层入口类。Session对象从java.util.Properties对象中获取配置
信息,如邮件发送服务器的主机名或IP地址,接受邮件的协议,发送邮件的协议,用户名,口令以及整个应用程序中共享
的其他信息。
2.javax.mail.Store类
Store类表示接受邮件服务器上注册用户的存储空间,通过Store类的getFolder()方法,可以访问用户的特定邮件夹。
3.javax.mail.Folder类
Folder类代表邮件夹,邮件都放在邮件夹中,Folder类提供了管理邮件夹以及邮件的各种方法。
4.javax.mail.Message类
Message类代表电子邮件。Message类提供了读取和设置邮件内容的方法。邮件主要包含如下内容:
地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表;
邮件标题;
邮件发送和接受日期;
邮件正文(包括纯文本和附件);
Message是一个抽象类,常用的具体类是Javax.mail.internet.MimeMessage。MimeMessage是符合MIME规范的
电子邮件。
5.javax.mail.Address类
Address了哦代表邮件地址,和Message类一样,Address类也是一个抽象类。常用的具体之类为
javax.mail.internet.InternetAddress类。
6.javax.mail.Transport类
Transport类根据指定的邮件发送协议(通常是SMTP),通常指定的邮件发送服务器来发送邮件。Transport类是抽象类
它的静态方法send(Message)负责发送邮件。
需要从 http://java.sun.com/products/javamail/downloads/index.html 下载最新的JavaMail API的类库文件,
需要里面的mail.jar文件另外还要从 http://java.sun.com/products/javabeans/glasgow/jaf.html 下载JavaBeans
Activation Framework(JavaBean激活框架)的类库文件。JavaMail API的实现依赖于JavaBean激活框架,需要里面
activation.jar文件。如果我们使用J2EE的话,那么我们并无需单独下载JavaMail,因为它存在于J2EE.jar中,只需
将J2EE.jar加入到CLASSPATH即可。
JavaMail应用程序在初始化过程中需要设置JavaMail属性:
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp"); //指定邮件发送协议
props.put("mail.store.protocol", "imap"); //指定邮件接收协议
//指定支持SMTP协议的Transport具体类,允许第三方提供
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
//指定支持IMAP协议的Store具体类,允许第三方提供
props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
//指定采用SMTP协议的邮件发送服务器的IP地址或主机名
props.put("mail.smtp.host", smtphost);
如果程序采用SUN提供的JavaMail API的某人参考实现,那么前面四个属性可以不用设置,只需设置mail.smtp.host
//表示SMTP服务器需要身份验证。
props.put("mail.smtp.auth","true");
1.调用javax.mail.Session类的静态方法Session.getDefaultInstance()获得Session实例。
Session mailsession=Session.getDefaultInstance(props);
mailsession.setDebug(true);//设置输出日志,默认不输出
2.调用Session的getStore(String protocol)方法来获得Store对象,protocol指定接收邮件协议
Store store=mailsession.getStore("imap");
3.调用Stroe对象的connect()方法连接到接收邮件服务器,指定主机或IP地址,用户名和口令。
store.connect(hostname,username,password);
4.打开inbox邮件夹收取邮件,inbox邮件夹是IMAP中保留邮件夹,用户不允许删除该邮件夹,邮件服务器把所有接收到
的新邮件都存放到该邮件夹中。
Folder folder=store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
folder.getMessageCount();//邮件数目
folder.getUnreadMessageCount();//未读邮件数目
5.从邮件夹中读取邮件
//获取第一封邮件
Message msg=folder.getMessage(1);
//获得发送者
msg.getForm()[0];
//获得主题
msg.getSubject();
//获得正文
msg.getText();
使用中发现出现javax.mail.AuthenticationFailedException,原来是因为我 使用的是网易的邮箱,网易的现在新注册的邮箱已经不提供smtp服务了,所以不管你是jMail还是用outlook都无法验证。好像sina的也是这样 的。我自己配了一个james服务器,可以参看 java mail例子