java中的hotmail登录错误(IDE:Netbeans)

时间:2013-08-22 18:49:31

标签: java email netbeans runtime-error email-integration

我正在为java中的电子邮件发送创建一个应用程序,一切都已设置并正常工作。但错误是当我尝试登录Hotmail帐户时,它显示错误的电子邮件和密码,我在catch块中给出了错误。 但是当我第一次登录yahoo或gmail时登录hotmail,之后我可以登录Hotmail,但我无法先登录hotmail,为什么?!代码如下

private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
    user = txt_user.getText();
    pass = txt_pass.getText();
    int combo = combo_ac.getSelectedIndex();

    if(combo==0){
try{
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        Session sessin = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(user+"@gmail.com", pass);
                }
            }
        );
    new Gmail().setVisible(true);
}catch(Exception e){
        JOptionPane.showMessageDialog(null, "Incorrect Email or Password!");
 }
    }else if(combo==1){
try{
      Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.live.com");
        props.put("mail.smtp.socketFactory.port", "25");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "25");

        Session sessin = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(user+"@hotmail.com", pass);
                }
            }
        );
     new Hotmail().setVisible(true);
}catch(Exception e){
        JOptionPane.showMessageDialog(null, "Incorrect Email or Password!");
 }
    }else if(combo==2){
try{
       Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.mail.yahoo.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        Session sessin = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(user+"@yahoo.com", pass);
                }
            }
        );
     new Yahoo().setVisible(true);
}catch(Exception e){
        JOptionPane.showMessageDialog(null, "Incorrect Email or Password!");
 }
    }
}                                         

1 个答案:

答案 0 :(得分:1)

article可以解释为什么显然您可以在登录gmail或yahoo后登录到您的hotmail帐户。实际上你正在登录你刚开始尝试的同一个帐户。问题是你使用的是Session#getDefaultInstance() Session#getInstance()

  

Session.getDefaultInstance方法首先创建一个新的Session   时间使用传递的属性调用它。的后续   调用将返回原始会话并忽略您的任何属性   传入。如果你想创建不同的Sessions   属性,Session.getDefaultInstance不会这样做。 [...] 始终使用Session.getInstance来避免此问题。

但是,它无法解释为什么您无法登录到您的Hotmail帐户,但是您应该发布异常堆栈跟踪,以便我们为您提供帮助。

<强>更新

基于此堆栈跟踪:

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first

这意味着您必须根据Hotmail要求在mail.smtp.starttls.enable上设置true属性:

  

选择 TLS 以使用以下类型的加密连接   发送服务器(SMTP),然后单击“确定”。注意发送服务器   (SMTP)框应设置为端口25.如果端口25被阻止   网络或您的ISP,您可以将SMTP端口设置为587。

注意:摘自Configure Outlook to connect to an MSN email account

尝试登录Hotmail帐户时,只应在代码中添加以下行:

props.put("mail.smtp.starttls.enable", "true");

另外,请不要忘记按照我的建议,将Session.getDefaultInstance替换为Session.getInstance