使用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下存在