import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.internet.MimeMessage;
public class EmailSend {
public static void main(String args[]){
try{
String host = "smtp.gmail.com" ;
final String user = "[email protected]";
final String pass = "password";
String to = "[email protected]";
String from = "[email protected]";
String subject = "Trial";
String messageText = "Your Is Test Email :";
boolean sessionDebug = false;
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.required", "true");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Session mailSession = Session.getDefaultInstance(props, null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject); msg.setSentDate(new Date());
msg.setText(messageText);
Transport transport=mailSession.getTransport("smtp");
transport.connect(host, user, pass);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
System.out.println("message send successfully");
}catch(Exception ex)
{
System.out.println(ex);
}
}
}
Я добавил Activation-1.1.1.jar, а также mail-1.4.jar и я также изменил настройки идентификатора электронной почты на * Разрешить менее безопасные приложения: ВКЛ.
Но я получаю следующее исключение
javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Я использую eclipse IDE (кислород 3A)




Ошибка, с которой вы столкнулись, связана не с почтой Java, а с сертификатом SSL. Чтобы устранить эту ошибку, вам необходимо импортировать сертификат вашего SMTP-хоста в хранилище ключей.
Google предоставляет нижеприведенный механизм для загрузки сертификата smtp:
openssl s_client -starttls smtp -connect [hostname]:25 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
Обратитесь к другим методам загрузки сертификатов на "https://support.google.com/a/answer/6180220?hl=en"
Получив сертификат с собой, вы можете импортировать сертификат в хранилище ключей Java с помощью следующей команды:
keytool -import -file smtpgooglecert.cer -alias smtpgooglecert -keystore keystore.jks
Надеюсь это поможет !!
Я не знаю, правильно ли это пометить как дубликат, поскольку это побуждает OP обходить сертификат, предполагая, что они уже пытались импортировать сертификат, хотя на самом деле они могут просто не знать, что они должны были импортировать это в первую очередь