我有一个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 = "xyz@abc.com";
private String from ="defgh@abc.com";
private String message ="test";
private String subject="Test";
private String imapServ="hist.abc.net";
private String userName="defgh@abc.com";
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:身份验证失败。
知道怎么纠正这个错误吗?
发布于 2015-10-17 19:11:17
您正在登录到IMAP服务器,然后使用SMTP发送电子邮件,但尚未配置SMTP服务器。您还注释掉了一些将"imap“设置为传输的属性设置。这是行不通的;"imap“是存储协议,"smtp”是传输协议。
你对一堆电子邮件的基本知识感到困惑。您可能需要花一些时间在JavaMail常见问题和JavaMail示例程序上。
AuthenticationFailedException通常意味着服务器认为您没有提供正确的用户名和密码。打开JavaMail会话调试获取更多关于失败原因的信息。
https://stackoverflow.com/questions/33188102
复制相似问题