2015-10-17 174 views
1

我有一个IMAP主机和用户名和密码。使用此凭据,我想将电子邮件发送到IMAP服务器,该服务器将路由请求。身份验证失败使用IMAP将电子邮件发送到服务器

我的代码是

import java.util.Properties; 
import javax.mail.*; 
import javax.mail.internet.*; 

import com.sun.mail.imap.IMAPStore; 
import com.sun.mail.util.MailSSLSocketFactory; 

import java.util.*; 

public class Mail { 

private String to = "[email protected]"; 
private String from ="[email protected]"; 
private String message ="test"; 
private String subject="Test"; 
private String imapServ="hist.abc.net"; 
private String userName="[email protected]"; 
private String password="xxxxxxx"; 

public String getPassword() { 
return password; 
} 

public void setPassword(String password) { 
this.password = password; 
System.out.println("password:"+password); 
} 

public String getUserName() { 
return userName; 
} 

public void setUserName(String userName) { 
this.userName = userName; 
System.out.println("userName:"+userName); 
} 


/** 
* @return the to 
*/ 
public String getTo() { 
return to; 
} 

/** 
* @param to the to to set 
*/ 

public void setTo(String to) { 
this.to = to; 
} 

/** 
* @return the from 
*/ 

public String getFrom() { 
return from; 
} 

/** 
* @param from the from to set 
*/ 

public void setFrom(String from) { 
this.from = from; 
} 

/** 
* @return the message 
*/ 

public String getMessage() { 
return message; 
} 

/** 
* @param message the message to set 
*/ 

public void setMessage(String message) { 
this.message = message; 
} 

/** 
* @return the subject 
*/ 

public String getSubject() { 
return subject; 
} 

/** 
* @param subject the subject to set 
*/ 

public void setSubject(String subject) { 
this.subject = subject; 
} 

/** 
* @return the imapServ 
*/ 

public String getImapServ() { 
return imapServ; 
} 

public void setImapServ(String imapServ) { 
this.imapServ = imapServ; 
} 


public int sendMail(){ 

try 
{ 
Properties props = System.getProperties(); 
props.setProperty("mail.imap.sasl.enable", "true"); 
props.setProperty("mail.imap.starttls.enable", "true"); 

props.setProperty("mail.imap.auth.ntlm.domain", "false"); 
props.setProperty("mail.imap.auth.plain.disable", "false"); 
props.setProperty("mail.imap.auth.gssapi.disable", "true"); 
props.setProperty("mail.imap.ssl.enable", "true"); 
props.setProperty("mail.imap.port", "993"); 
Session imapSession = Session.getInstance(props); 
imapSession.setDebug(true); 
IMAPStore store = new IMAPStore(imapSession, null); 
Authenticator auth = new SMTPAuthenticator(); 

Session session = Session.getInstance(props, auth); 
session.setDebug(true); 
// -- Create a new message -- 
Store store1=imapSession.getStore("imap"); 
store1.connect(imapServ,userName,password); 

Folder folder=store1.getFolder("INBOX"); 
folder.open(Folder.READ_ONLY); 

Message mess[]=folder.getMessages(); 

for(int i=mess.length-1;i>=0;i--) 
{ 
System.out.println(""+i+":"+mess[i].getFrom()[0]+"t"+mess[i].getSubject()); 
} 

Message msg = new MimeMessage(session); 

// -- Set the FROM and TO fields -- 
msg.setFrom(new InternetAddress(from)); 

String rec[]=to.split(","); 
for(int i=0;i<rec.length;i++) 
{ 
System.out.println("rec:"+rec[i]); 

msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(rec[i], false)); 
msg.setSubject(subject); 
msg.setText(message); 
// -- Set some other header information -- 
msg.setHeader("Mail", "MailApi"); 
msg.setSentDate(new Date()); 
// -- Send the message -- 
Transport.send(msg); 
System.out.println("Message sent to"+ rec[i]+" OK."); 
} 
return 0; 
} 
catch (Exception ex) 
{ 
ex.printStackTrace(); 
System.out.println("Exception "+ex); 
return -1; 
} 
} 


private class SMTPAuthenticator extends javax.mail.Authenticator { 
@Override 
public PasswordAuthentication getPasswordAuthentication() { 
String username =userName;   
String pass =password;          
return new PasswordAuthentication(username, pass); 
} 
} 

public static void main(String[] args) { 
Mail m = new Mail(); 
m.sendMail(); 
} 

}

我收到错误

异常javax.mail.AuthenticationFailedException:AUTHENTICATE 失败。

任何想法如何解决这个错误?

回答

1

你登录到您的IMAP服务器,然后使用SMTP发送邮件,但你还没有配置SMTP服务器。您还注释了一些将“imap”设置为transport的属性设置。那永远不会工作; “imap”是Store协议,“smtp”是一种传输协议。

你对一堆电子邮件基础知识感到困惑。您可能想花一些时间与JavaMail FAQJavaMail sample programs

AuthenticationFailedException通常意味着服务器没想到你提供了正确的用户名和密码。打开JavaMail Session debugging以获取有关失败的更多信息。

相关问题