是因为smtp服务器需要身份验证,而你的程序缺少验证类,你需要从Authenticator继承,一个自己的验证类,并实现getPasswordAuthentication()方法。
props.put("mail.smtp.auth","true");就是通知smtp服务器需要?br>

解决方案 »

  1.   

    JavaMail其实跟JDBC一样,都是规定了一些接口协议,真正的实现是由叫做Provider的东西来负责,因此在使用JavaMail的时候需要让其知道由哪个Provider处理,就好像使用JDBC时候需要加载驱动程序类一个道理。SUN提供的javamail的jar文件包中有个文件,这个文件位于mail.jar/METE-INF/javamail.default.providers,该文件就保存着不同的协议使用不同的Provider类名,在以前版本的 javamail中,因为这个配置是存在于另外一个文件mail-api.jar中的,因此如果类路径中没有该jar文件就常常会导致上面提到那个异常,因此建议大家使用最新的JavaMail 1.3.1,同时应该注意协议的名称必须要小写。
      

  2.   

    Transport.send(newMessage);最好不要这么用,因为你已经使用了SMTP的验证这里最好就用
    newMessage.saveChange();
    Transport.send(newMessage,mailtoadress);mailtoadress是要发送的目标地址
      

  3.   

    要下个smtp服务器,然后才可以运行你的程序