props.put("mail.smtp.auth","true");//既然为true,那么需要写一个授权的类
javax.mail.Authenticator auth=new MyAuthenticator(username,password);
  Session s = Session.getInstance(props,auth);这样试试
import java.util.*;
import javax.mail.*;
public class MyAuthenticator extends Authenticator
{
private String username = null;
private String pass = null;public void setUsername(String username)
{
 this.username = username;
}public void setUserpass(String userpass)
{
 this.pass = userpass;
}public MyAuthenticator (String username, String userpass)
{
   super();   setUsername(username);
   setUserpass(userpass);}
public PasswordAuthentication getPasswordAuthentication()
{  return new PasswordAuthentication(username,pass);
}
}

解决方案 »

  1.   

    你的发信人,收信人,和服务器完全一样吗 ?
    代码是没有什么两样了,都能完成发信,关键是可能信在路上丢了,或者服务器拒收,像我用自己的XP所带的smtp服务器设置为不验证帐号,速度奇快,多线程,但是不是一下子就可以收到,而且可能还有丢失,但是用163的服务器,必须要验证发信人的帐号,比较慢,但是收信很快,这边发完,基本上就收到了,再就是我试了,既然  props.put("mail.smtp.auth","true");就应该写个安全认证类,这样好象比较好,就不要用transport.connect()这个函数了,用transport.connect();我好象没有发成功,没有多试
      

  2.   

    to  dlglmf:
      服务器那么写是因为不想写真实的,没错。
      我的问题是为什么第二个总能收到,而且,不到1秒就可以收到,而第一个总是收不到。难道是什么步骤有个先后的问题,比如saveChanges,如果不用transport.connect();用什么连接?