I try to send SMTP email in java, but I have an error like this and I don't get a mail. I turn off all firewall and anti-virus.
The error:
javax.mail.AuthenticationFailedException: 534-5.7.14<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuIW
534-5.7.14 tAxHxbq4WR-vUuV1uOFAvx8NhInfxYTyNHi_8sJ80lX5lBdBla2ROiSKoysMNcFoQ6sGe
534-5.7.14 DUh173tDMolJ64W-Rahx1fhVF_08AvWrphibgQXiyyz5U1FNMMb-eGGJlUIbjyvBgQuZY6
534-5.7.14 tnykIXdVn__mg87aOmtxoss-EiFYeKdvuiBbt5eb9t_NOc97h-PkXOco-9FcYW69Iz9CTu
534-5.7.14 rfyhlo24k9oqIiWtcJwv85oUCO2g> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 pd8sm1306363pdb.93 - gsmtp
Here is my code:
private void btn_mailActionPerformed(java.awt.event.ActionEvent evt) {
String to = "receive.address@gmail.com";
String from = "send.address@gmail.com";
final String username = "send.address";
final String password = "sendpassword";
String host = "smtp.gmail.com";
Properties pro = new Properties();
pro.put("mail.smtp.host",host);
pro.put("mail.smtp.socketFactory.port","465");
pro.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
pro.put("mail.smtp.auth","true");
pro.put("mail.smtp.port","465");
Session session = Session.getInstance(pro,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username,password);
}
}
);
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("test mail");
message.setText("Hello how are you?");
Transport.send(message);
JOptionPane.showMessageDialog(null,"Send");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,e.toString());
System.out.println(e.toString());
}
Login to email from browser and go this page. You will see this;
Make sure to click "Turn on" and try your code again.
I had the same issue. After much testing with Gmail, I discovered the issue is that Gmail requires an OAuth sign-in, and not just a password. The solution for this is to use the Gmail API. However, this is a very complicated solution that I won't go into too much detail about. If you are interested in this, read the first answer here.
If you want a simple solution, however, what I did is simply switch to a Yahoo account. Because Yahoo doesn't use the same encryption, it works perfectly. Note: Don't forget to change the SMTP server to 'smtp.mail.yahoo.com', and the port to '25'.
If you want to set it up from scratch, simply follow this tutorial to download the JavaMail API and Java Activation Framework.
Then you could just copy-and-paste my code, change the top variables, and everything should work! If I missed anything, please let me know! Thanks!