com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required

46k views Asked by At

I am trying to send an Email from my Java Application to any particular email address. I am using Java Mail API but Unfortunately i am getting SMTPSendFailedException error. Can any body tell me where i am doing a mistake. Here is my code

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

//import SeconMail.Authenticator;

public class SendMail
{

   public static void main(String [] args)
   {    

      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "smtp.gmail.com";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server

      properties.setProperty("mail.smtp.host", host);


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

      properties.put("mail.smtp.auth", "false");
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      session.setDebug(true);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}
9

There are 9 answers

0
Denis Sheremetov On

If it still doesn't work for you try this:

properties.setProperty("mail.smtps.ssl.enable", "true");
properties.setProperty("mail.smtps.auth", "true"); 
0
eatSleepCode On

While creating session override a method PasswordAuthentication and in that give username and password.

    Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() 
    {
        protected PasswordAuthentication getPasswordAuthentication() 
        {
            return new PasswordAuthentication("[email protected]","xyz@123");
        }
   });
0
Elliott Frisch On

Try these

String login = "myemailhere";
String pass = "mypasshere";
properties.setProperty("mail.smtp.user", login);
properties.setProperty("mail.smtp.password", pass);
properties.setProperty("mail.smtp.auth", "true");      

Transport transport = session.getTransport("smtp");
transport.connect(null, login, pass);
0
Sanjay Nagare On
properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true"); 

please try using this

0
xinping On
properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true");

it worked, fix my problem

0
Eduard Frankford On

For me to make it work with a JHipster application I had to implement my custom JavaMailSenderImpl() because via properties did not work.

Inside the MailService Class create a method:

public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("");
mailSender.setPort(587);

mailSender.setUsername("");
mailSender.setPassword("");

Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true");

return mailSender;}

Then you can use this implementation and go on as normal:

JavaMailSender javaMailSender = getJavaMailSender();
MimeMessage mimeMessage = javaMailSender.createMimeMessage(); 

I think the reason why I had to do this was that my application connected via VPN to the server and there some things got mixed up.

0
Rishi Singhal On

This works for me:

final Properties properties = System.getProperties();

// Setting up mail server
properties.setProperty("mail.smtp.host", EMAIL_SMTP_HOST);
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");

Session session = Session.getInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(EMAIL_USERNAME,
                EMAIL_PASSWORD);
    }
});
session.setDebug(true);
0
Dias Abdraimov On

Try also

Transport.send(message, user, pass);

I have found this in Transport class documentation

Use the specified user name and password to authenticate to the mail server.

public static void send(Message msg, String user, String password) throws MessagingException {

    msg.saveChanges();
    send0(msg, msg.getAllRecipients(), user, password);
}

I am Using JavaMail v 1.6.1 and MailTrap SMTP Server

0
Vladimir Vagaytsev On

I faced the same issue recently. I tried to send an email over Gmail server with API key + password auth. Transport.send(message) didn't work for me, I debugged it and found out that it ignored session settings attached to the message.

This is now I did the email sending over SMTP Gmail server with auth and TLS. I used com.sun.mail:javax.mail-1.6.1

    String host = "your-email-server-host"; // define your server host here
    int port = 587; // standard port for TLS connection

    // config session properties, here the SMTP protocol is used
    Properties properties = new Properties();
    properties.setProperty("mail.smtp.host", host);
    properties.setProperty("mail.smtp.port", String.valueOf(port));
    properties.setProperty("mail.smtp.auth", "true"); // enable auth
    properties.setProperty("mail.smtp.starttls.enable", "true"); // enable TLS

    // get session instace baed on the settings defined above
    Session session = Session.getInstance(properties);

    // `prepareMessage` implementation is omitted, construct your own message here
    MimeMessage mimeMessage = prepareMessage(email, session);

    // your credentials       
    String username = "[email protected]"; // or API key, I used API key
    String password = "your-password";

    // get the transport instance from the freshly created session
    // pass the valid protocol name, here the SMTP is used
    Transport transport = session.getTransport("stmp");

    // connect to the transport instance with your credentials
    transport.connect(host, port, username,password);

    // send the message
    transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());