Reputation: 327
I have a IMAP Host and username and password. Using this credentials I want to send email to a IMAP server which will route up the request.
My code is
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();
}
}
I am getting error
Exception javax.mail.AuthenticationFailedException: AUTHENTICATE failed.
Any Idea how to fix this error ?
Upvotes: 1
Views: 348
Reputation: 29971
You're logging in to your IMAP server and then sending email using SMTP, but you haven't configured an SMTP server. You've also commented out some property settings that would set "imap" as as transport. That will never work; "imap" is a Store protocol, "smtp" is a Transport protocol.
You're confused about a bunch of email basics. You might want to spend some time with the JavaMail FAQ, and the JavaMail sample programs.
AuthenticationFailedException usually means that the server didn't think you supplied the correct username and password. Turn on JavaMail Session debugging to get more information about what's failing.
Upvotes: 1