现在的位置: 首页 > 综合 > 正文

开发日志之我所遇到的javax.mail.NoSuchProviderException: No provider for SMTP问题

2013年10月01日 ⁄ 综合 ⁄ 共 794字 ⁄ 字号 评论关闭

用Javamail发邮件时,发现出现[javax.mail.NoSuchProviderException: No provider for SMTP]的问题,
网上搜了一把,大多为mail.jar,activation.jar等Jar文件没有置于Classpath下的原因,但是我这里是
千真万确把它放在Classpath下的,那么到底什么原因呢?调试了大半天不得其解。浪费了很多时间,最后
只能从mail.jar本身着手了,用Winrar等打开mail.jar文件,在其META-INF目录夹下有
[javamail.default.providers]文件,用notepad等打开后发现有如下内容:
# JavaMail SMTP provider Sun Microsystems, Inc
protocol=smtp; type=transport; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc;
protocol=smtps; type=transport; class=com.sun.mail.smtp.SMTPSSLTransport; vendor=Sun Microsystems, Inc;
注意[protocol=smtp]中的smtp是小写的,而错误提示中的SMTP是大写的,会不会是大小写的问题呢?抱着这样的疑问,
我把代码中的setProtocol(“SMTP”)改成setProtocol(“smtp”),编译运行,果然不再报错了。这里竟然有大小写的
区别,我倒是没想到。当然把mail.jar中的protocol=smtp改成protocol=SMTP,或者在protocol=smtp的下面再追加一
条protocol=SMTP的设定应该也是可以的(没有尝试)。很简单的问题却花了很多时间,很不值得,特此撰文,权当备忘。

抱歉!评论已关闭.