使用javamail常见的一个出错信息:
javax.mail.NoSuchProviderException: No provider for smtp
原因就很可能如下:
在不同的加载jar的目录下放置了不同版本的mail.jar,比如一个是javamail1.3.1的mail.jar
在D:/tomcat_4.1/common/lib下,而另外一个是javamail1.2的mail.jar在
D:/tomcat_4.1/webapps/xxx/WEB-INF/lib下,
那么xxx这个webapp中使用到javamail进行邮件发送的时候,便会出现No provider for smtp的错误。 

一般来说放在不同webapp里的class文件,会被classloader加载成不同的实例。

但是注意,以下包名开头的class例外:
javax.*
org.xml.sax.*
org.w3c.dom.*
org.apache.xerces.*
org.apache.xalan.*

而 javax.mail正是javax.*空间下的,所以引起的冲突

结论:

Tomcat 4.1下:

所以要保证mail.jar在两处的版本一定要一致

或者  mail.jar只在D:/tomcat_4.1/common/lib下存在

 

Tomcat5.0下:

 mail.jar只在D:/tomcat_5.0/webapps/xxx/WEB-INF/lib下存在