JavaMail 深入浅出

<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning /> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL /> <w:BalanceSingleByteDoubleByteWidth /> <w:DoNotLeaveBackslashAlone /> <w:ULTrailSpace /> <w:DoNotExpandShiftReturn /> <w:AdjustLineHeightInTable /> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:UseFELayout /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if !mso]> <object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </object> <style> st1/:*{behavior:url(#ieooui) } </style> <![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:Georgia; panose-1:2 4 5 2 5 4 5 2 3 3; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@黑体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h2 {mso-style-link:"标题 2 Char"; mso-style-next:正文; margin-top:13.0pt; margin-right:0cm; margin-bottom:13.0pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:173%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:2; font-size:16.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt; font-weight:bold;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p.MsoPlainText, li.MsoPlainText, div.MsoPlainText {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} span.apple-converted-space {mso-style-name:apple-converted-space;} span.apple-style-span {mso-style-name:apple-style-span;} span.hilite3 {mso-style-name:hilite3;} span.hilite4 {mso-style-name:hilite4;} span.hilite6 {mso-style-name:hilite6;} span.2Char {mso-style-name:"标题 2 Char"; mso-style-locked:yes; mso-style-link:"标题 2"; mso-ansi-font-size:16.0pt; mso-bidi-font-size:16.0pt; font-family:Arial; mso-ascii-font-family:Arial; mso-fareast-font-family:黑体; mso-hansi-font-family:Arial; mso-font-kerning:1.0pt; mso-ansi-language:EN-US; mso-fareast-language:ZH-CN; mso-bidi-language:AR-SA; font-weight:bold;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} --> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

JavaMail 深入浅出

SMTP:简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)RFC821定义,它定义了发送邮件的机制,JavaMail环境中,基于JavaMail的程序将和因特网服务供应商ISP(internet Service Providers)SMTP服务器通信.SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得.

POP:代表邮局协议(Post Office Protocol).目前的版本是3.所以一般都称之为POP3.这个协议是由RFC1939定义的.POP是一种机制,因特网上多大数用户用它得到邮件.它规定每个用户一个邮箱的支持.使用POP协议的时候,用户的许多性能并不是由POP协议支持的,如查看几封新邮件消息这个功能,这些功能内建在如EudoraMicrosoftOutlook之类的程序中,它们记住一些事.所以在用JavaMail的时候,如果你想要这些信息,你就必须自己算了.

IMAP:是更高级的用户接收消息的协议,被定义在RFC2060,IMAP代表因特网消息访问协议(Internet Message Access Protocol),目前用的版本是4,所以也叫做IMAP4.在用到IMAP的时候,邮件服务器必须支持这个协议,不能仅仅把使用POP的程序用于IMAP,并指望它支持IMAP所有性能.

MIME:是因特网邮件扩展标准(Multipurpose Internet Mail Extensions).它不是邮件传输协议,但是对于传输的内容的消息,附件以及其他的内容定义了格式.可以理解成一个定义合适的标准.

NNTP:因为JavaMail将供应商和所有其它的东西分开了,您就能轻松添加额外的协议支持.NNTP就是网络新闻传输协议.

JavaMailAPI可以到http://java.sun.com/products/javamail/index.html进行下载,并将mail.jar添加到classpath即可.

JAF框架可以到http://java.sun.com/products/javabeans/glasgow/jaf.html进行下载,并将activation.jar添加到classpath即可.

如果实用J2EE就没由什么特定非要用基本的JavaMailAPI.J2EE的类就能处理了.只要确保j2ee.jar文件在classpath中就Ok.

下面我用一个最简单的例子还演示第一条消息的发送.

1,获取系统Properties.

Properties props = System.getProperties();

2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中.

Props.pout(mail.smtp.host,host);

3,获取基于Properties Session对象.

Session session = Session.getDefaultInstance(props,null);

4,Session创建一个MimeMessage.

MimeMessage message = new MimeMessage(session);

5,设置消息from.

Message.setForm(new InternetAddress(from));

6,设置to.

Message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

7,设置消息主题.

message.setSubject(HelloJavaMail);

8,设置消息内容.

Message.setText(Welcome to JavaMail);

9发送消息.

Transport.send(message);

10,在编译用运的时候传递MSTP服务器,from地址,to地址.

通过简单的接触了JavaMail相信大家多邮件发送也有了简单的了解和认识,下面我主要研究一下它的具体功能,也就是说具体的接口或类的含义.

Session类定义了一个基本的邮件会话,所有的其他类都是由这个session才得意生效的,Session对象用java.util.Properties对象获取信息,如邮件服务器,用户名,密码及整个应用程序中共享的其他信息.类的构造器是此有的,private.它能用getDefaultInstance()方法来共享.获取Session对象的方方法如下:

Properties props = new Properties();

Session session = Session.getDefaultInstance(props,null);

Null参数都是Authenticator对象,在这里没有使用.

对于大多数情况,共享的session已经足够用了.

Message消息类,在获得了Session对象后,就可以继续创建要发送的消息.因为Message是个抽象类,您必须用一个子类,多数情况下为java.mail.internet.MimeMessage.这个能理解成MIME类型和头的电子邮件消息.正如不同的RFC中定义的,虽然在某些头部域非ASCII字符也能被编译,但是Message头只能被限制用US-ASCII字符.要创建一个Message请将Session对象传递给MimeMessage的构造器.

MimeMessage message = newMimeMessage(session);

一旦获得消息,就可以设置各个部分了.最基本的就是setContent()方法,例如/

message.setContent(Hello,text/plain);

如果知道在实用MimeMessage,而且消息是纯文本格式,就可以用setText()方法,它只需要代表实际内容的参数.(Mime类型缺省为text/plain)

setSubject()方法设置subject(主题);

message.setSubject(主题);

Address地址类,Message一样也是一个抽象类,一旦创建了SessionMessage并将内容填入消息后,就可以用Address确定信件的地址了,javax.mail.internet.

InternetAddress.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:Address address = new InternetAddress(it5719@163.com);

若希望名字挨着电子邮件现实,就可以把它传递给构造器,如下:

Address address = new InternetAddress(it5719@163.com,我心依旧);

需要为消息的from域和to域创建地址对象,除非邮件服务器阻止,没有什么能阻止你发送一段看上去是任何人的消息了呵呵.一旦创建address将他们域消息连接方法有两种,如要要识别发件人的就可以用setFrom()setReplyTo方法.然后message.setFrom(address);

需要实用多个from地址的就用addFrom()方法.例子如下:

Address[] address = ,.,. ;message.addFrom(address);

若要识别消息recipient收件人,就要实用addRecipient()方法了.例如:

message.addRecipient(type,address)

Authenticatorjava.net类一样,JavaMailAPI也可以利用Authentcator通过用户名密码访问受保护的资源.对于JavaMail来说,这些资源就是邮件服务器,Authentcator类在javax.mail包中.要使用Authenticator,首先创建一个抽象的子类,并从

GetPasswordAuthentication方法中返回passwordAuthentication实例,创建完成后,您必须向session注册Authenticator,然后在需要认证的时候会通知它,其实说白了就是把配置的用户名和密码返回给调用它的程序.例如:

Properties props = new properties();

Authenticator auth = new MailAuthenticator()//接口声明,创建自己新类的实例.

Session session = Session.getDefauItInstance(props,auth);

Transport消息发送传输类,这个类用协议指定的语言发送消息,通常是SMTP,它是抽象类,它的工作方式与Session有些类似,尽调用静态方法send()方法,OK.例如:

Transport.send(message);

或者也可以从针对协议的会话中获取一个特定的实例,传递用户名和密码.发送消息,然后关闭连接,例如:

message.saveChanges();

transport transport = session.getTreansport(smtp);//指定的协议

transport.connect(host,username,password);

transport.sendMessage(message,message.getAllRecipients());

transport.close();

如果要观察传到邮件服务器上的邮件命令,请用session.setDubug(true)设置调试标志.

Storefoldersession获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如

Store store = session.getStore(pop3);

Store.connect(host,username,password);

连接到Store之后,接下来,获得一个folder,必须打开它就可以读取里边的消息了.

Folder folder = store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);

Message[] message = folder.getMessages();

POP3唯一可用的文件夹就是INBOX,如果实用IMAP,还可以用其他的文件夹.

当读到了具体的message以后,就可以用getContent来获取内容,或者用writeTo()将内容写入流,getContent()方法只能得到消息内容,writeTo()的输出却包含消息头.

System.out.println(((MimeMessage)message).getConntent());

一旦读取完毕邮件,要关闭storefolder的连接.

folder.colse(boolean);

store.colse();

传递给folderclose()方法的boolean参数表示是否清楚已删除的消息从而更新folder.

上面就是JavaMail邮件操作的基本的常用类,我觉得理解了这几个类的机制,基本就可以处理一般的邮件操作了.下面是一个我写的JavaMail实现邮件发送的代码.

首先是一个Authenticator类的实现:记录用户名和密码:

import javax.mail.*;

public class MailAuthenticator extends Authenticator

{

//******************************

//由于发送邮件的地方比较多,

//下面统一定义用户名,口令.

//******************************

public static String HUAWEI_MAIL_USER = "it5719@163.com";

public static String HUAWEI_MAIL_PASSWORD = "密码";

public MailAuthenticator()

{

}

protected PasswordAuthentication getPasswordAuthentication()

{

return new PasswordAuthentication(HUAWEI_MAIL_USER, HUAWEI_MAIL_PASSWORD);

}

}

这个类是发送邮件的类.

package com.deepdo.common.mail;

/**

* 此处插入类型说明。

* 创建日期:(2006-4-21 14:57:16)

* @author:张宏亮

*/

import java.util.*;

import java.io.*;

import javax.mail.*;

import javax.mail.internet.*;

import javax.activation.*;

public class SendMail {

//要发送Mail地址

private String mailTo = null;

//Mail发送的起始地址

private String mailFrom = null;

//SMTP主机地址

private String smtpHost = null;

//是否采用调试方式

private boolean debug = false;

private String messageBasePath = null;

//Mail主题

private String subject;

//Mail内容

private String msgContent;

private Vector attachedFileList;

private String mailAccount = null;

private String mailPass = null;

private String messageContentMimeType ="text/html; charset=gb2312";

private String mailbccTo = null;

private String mailccTo = null;

/**

* SendMailService 构造子注解。

*/

public SendMail() {

super();

}

private void fillMail(Session session,MimeMessage msg) throws IOException, MessagingException{

String fileName = null;

Multipart mPart = new MimeMultipart();

if (mailFrom != null) {

msg.setFrom(new InternetAddress(mailFrom));

System.out.println("发送人Mail地址:"+mailFrom);

} else {

System.out.println("没有指定发送人邮件地址!");

return;

}

if (mailTo != null) {

InternetAddress[] address = InternetAddress.parse(mailTo);

msg.setRecipients(Message.RecipientType.TO, address);

System.out.println("收件人Mail地址:"+mailTo);

} else {

System.out.println("没有指定收件人邮件地址!");

return;

}

if (mailccTo != null) {

InternetAddress[] ccaddress = InternetAddress.parse(mailccTo);

System.out.println("CCMail地址:"+mailccTo);

msg.setRecipients(Message.RecipientType.CC, ccaddress);

}

if (mailbccTo != null) {

InternetAddress[] bccaddress = InternetAddress.parse(mailbccTo);

System.out.println("BCCMail地址:"+mailbccTo);

msg.setRecipients(Message.RecipientType.BCC, bccaddress);

}

msg.setSubject(subject);

InternetAddress[] replyAddress = { new InternetAddress(mailFrom)};

msg.setReplyTo(replyAddress);

// create and fill the first message part

MimeBodyPart mBodyContent = new MimeBodyPart();

if (msgContent != null)

mBodyContent.setContent(msgContent, messageContentMimeType);

else

mBodyContent.setContent("", messageContentMimeType);

mPart.addBodyPart(mBodyContent);

// attach the file to the message

if (attachedFileList != null) {

for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements();) {

fileName = (String) fileList.nextElement();

MimeBodyPart mBodyPart = new MimeBodyPart();

// attach the file to the message

FileDataSource fds = new FileDataSource(messageBasePath + fileName);

System.out.println("Mail发送的附件为:"+messageBasePath + fileName);

mBodyPart.setDataHandler(new DataHandler(fds));

mBodyPart.setFileName(fileName);

mPart.addBodyPart(mBodyPart);

}

}

msg.setContent(mPart);

msg.setSentDate(new Date());

}

/**

* 此处插入方法说明。

*/

public void init()

{

}

/**

* 发送e_mail,返回类型为int

* 当返回值为0时,说明邮件发送成功

* 当返回值为3时,说明邮件发送失败

*/

public int sendMail() throws IOException, MessagingException {

int loopCount;

Properties props = System.getProperties();

props.put("mail.smtp.host", smtpHost);

props.put("mail.smtp.auth", "true");

MailAuthenticator auth = new MailAuthenticator();

Session session = Session.getInstance(props, auth);

session.setDebug(debug);

MimeMessage msg = new MimeMessage(session);

Transport trans = null;

try {

fillMail(session,msg);

// send the message

trans = session.getTransport("smtp");

try {

trans.connect(smtpHost, MailAuthenticator.HUAWEI_MAIL_USER, MailAuthenticator.HUAWEI_MAIL_PASSWORD);//, HUAWEI_MAIL_PASSWORD);

} catch (AuthenticationFailedException e) {

e.printStackTrace();

System.out.println("连接邮件服务器错误:");

return 3;

} catch (MessagingException e) {

System.out.println("连接邮件服务器错误:");

return 3;

}

trans.send(msg);

trans.close();

} catch (MessagingException mex) {

System.out.println("发送邮件失败:");

mex.printStackTrace();

Exception ex = null;

if ((ex = mex.getNextException()) != null) {

System.out.println(ex.toString());

ex.printStackTrace();

}

return 3;

} finally {

try {

if (trans != null && trans.isConnected())

trans.close();

} catch (Exception e) {

System.out.println(e.toString());

}

}

System.out.println("发送邮件成功!");

return 0;

}

public void setAttachedFileList(java.util.Vector filelist)

{

attachedFileList = filelist;

}

public void setDebug(boolean debugFlag)

{

debug=debugFlag;

}

public void setMailAccount(String strAccount) {

mailAccount = strAccount;

}

public void setMailbccTo(String bccto) {

mailbccTo = bccto;

}

public void setMailccTo(String ccto) {

mailccTo = ccto;

}

public void setMailFrom(String from)

{

mailFrom=from;

}

public void setMailPass(String strMailPass) {

mailPass = strMailPass;

}

public void setMailTo(String to)

{

mailTo=to;

}

public void setMessageBasePath(String basePath)

{

messageBasePath=basePath;

}

public void setMessageContentMimeType(String mimeType)

{

messageContentMimeType = mimeType;

}

public void setMsgContent(String content)

{

msgContent=content;

}

public void setSMTPHost(String host)

{

smtpHost=host;

}

public void setSubject(String sub)

{

subject=sub;

}

public static void main(String[] argv) throws Exception

{

for(int i = 0;i<10;i++) {

SendMail sm = new SendMail();

sm.setSMTPHost("SMTP地址");

sm.setMailFrom("发送地址");

sm.setMailTo("目标地址");

sm.setMsgContent("内容");

sm.setSubject("标题");

sm.sendMail();

}

}

}

2javamail spring集成

配置如下:

<bean id="mailSenderInfo" class="org.springframework.mail.javamail.JavaMailSenderImpl" >

<property name="host">
<value>21.2.13.1</value>
</property>

<property name="username">
<value>user</value>
</property>
<property name="password">
<value>pass</value>
</property>

<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
</bean>

<bean id="SimpleMailMessage" >

<property name="from">
<value>a11111@yahoo.com</value>
</property>
<property name="subject">
<value>email</value>
</property>

<property name="text">
<value>contain</value>
</property>
</bean>

<bean id="emailManager" class="EmailManagerImpl" singleton="false">
<property name="simpleMailMessage" ref="sMMessage"/>

<property name="mailSender" ref="mailSenderInfo"/>

</bean>

可能出现的问题:

1org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp
javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp
at javax.mail.Session.getProvider(Session.java:225)
这个是因为缺少 javamailjar包,http://java.sun.com/products/javamail/index.html进行下载,并将mail.jar添加到classpath即可.

JAF框架可以到http://java.sun.com/products/javabeans/glasgow/jaf.html进行下载,并将activation.jar添加到classpath即可.

2Failed message 1:

javax.mail.MessagingException: 503 Error: need EHLO and AUTH first !

503错误。因为smtp服务器需要授权。在spring的配置中加入<prop key="mail.smtp.auth">true</prop>即可。

另外需要打开邮箱的smtp服务,因为好多邮箱现在都不开启这个服务。方法如下:

开启Yahoo中国与网易163邮箱pop3smtp的方法

上班之后经常用outlook收发邮件,慢慢的习惯了用这种客户端的方便,不过现在好一点的免费邮箱比如yahoo.com.cn126.com都关闭了对于免费用户的客户端软件收发的支持,不过,我们还是有办法的:)自己搞定之后,把方法介绍给大家。

首先是Yahoo中国:
1.
先去http://mail.yahoo.com.cn 用你的账号登陆进 yahoo 电邮
2.
然后把下面整个的链接贴到IE地址栏里。(注意:整个都是一行)
http://rd.yahoo.com/mail_us/options/?http://edit.my.yahoo.com/config/set_popfwd?.src="/ym&";.done=http://us.f93.mail.yahoo.com/ym/Options?YY=22797

全部粘贴到地址栏中,然后根据提示来激活你的邮箱支持POP功能
3.
在注册一项中选择,然后选择你感兴趣的内容,其它的选项可以根据需要来
选择,然后按"完成"按钮。
4.
选择网上阅读邮件和POP功能,其它选项可根据自己的需要选择,完成后按
按钮。
5.
此时网上直投注册成功,系统会告诉你的服务器设置
接收邮件(POP3)服务器:POP.MAIL.YAHOO.COM.CN
发送邮件(SMTP)服务器:SMTP.MAIL.YAHOO.COM.CN

对于网易的邮箱,其实126应该是最好的选择,但是似乎126的免费pop始终激活不了,那只有选择163了:)
步骤:注册帐户后在此处登录升级后即开启了POP功能,默认申请的没有开放POP功能。
http://uinfo.mail.163.com/enlarge3g/index.htm

然后一路next就可以了
接收邮件(POP3)服务器:POP3.163.COM
发送邮件(SMTP)服务器:SMTP.163.COM

总结:使用客户端收发163的邮件速度还不错,还是yahoo中国的邮件如果附件比较大的话,就很慢了。基本上来说还是达到了目的,美中不足的是没有搞定我心仪的126邮箱。

3Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

解决方案:

JavaEE版本和JavaMail的版本不一致,请将sun公司上下载最新版本.
例如:javaMail 1.3以下的如果在javaEE5上就会出现上面的错误,
但如果在javaEE1.4下就正常.(但本人试过,javaEE5+javaMail1.4还是有一样的问题)
因为javaEE5中包含有javaMail的类但是却不全面,所以出本身的JavaMail
包冲突.

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页