我正在为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!");
}
}
}
答案 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
。