Ошибка при отправке почты через smtps
Я получаю следующее исключение при подключении к моему почтовому серверу при выполнении следующей строки
transport.connect("test.mailserver.com",465,"test.user@test.com","testpwd");
Исключение составляет:
(javax.mail.MessagingException) javax.mail.MessagingException: Exception reading response;
nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: subject/issuer name chaining check failed
ниже код:
protected static Session initializeSession(MailMessage p_msg) throws Exception{
//Get the SMTP Host
Properties prop = System.getProperties();
prop.put( "mail.smtps.host", "test.mailserver.com" );
prop.put("mail.transport.protocol", "smtps");
prop.put("mail.smtps.auth", true);
Session session = Session.getInstance(prop,null);
session.setDebug( p_msg.getDebugMode() );
return session;
}
protected static void sendMessage(MimeMessage p_msg) throws Exception{
Properties prop = System.getProperties();
Session session = Session.getDefaultInstance(prop, null);
Transport transport = session.getTransport("smtps");
transport.connect("test.mailserver.com",465,"test.user@test.com","testpwd");
transport.sendMessage(p_msg, p_msg.getAllRecipients());
transport.close();
}
2 ответа
Я смутно припоминаю, что столкнулся с чем-то подобным сам Оказалось, что я неправильно настроил SSL, поместив сертификаты в цепочку сертификатов сервера в неправильном порядке. Стеки SSL в типичном веб-браузере не заботятся об этом, но (очевидно) клиентский механизм SSL в Java не может (или не будет) справляться с сервером, который представляет цепочку в неправильном порядке.
Поэтому, если вам не повезло с другими ответами, попробуйте посмотреть, как вы установили сертификат SSL и т. Д. На свой почтовый сервер.
Для отправки письма с java вам понадобятся следующие jars:
mail.jar
geronimo-javamail-transport-1.1.1.jar
geronimo-javamail_1.3.1_spec-1.1.jar
Пожалуйста, попробуйте использовать метод ниже, чтобы отправить электронное письмо от Java. Этот метод отправит электронное письмо с использованием аутентификации SSL. В приведенном ниже методе есть три параметра: Список получателей: список всех получателей этого письма. subject: тема этого сообщения messageToSend: текст сообщения.
public void sendMail(List<String> recipents,String subject,String messageToSend)
{
setParameters();
try {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.debug", "true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(Your GmailID,your GMAIL Password);
}
});
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
InternetAddress addressFrom = new InternetAddress(fromEmailAddress);
MimeMessage message = new MimeMessage(mailSession);
message.setSender(addressFrom);
message.setSubject(subject);
message.setContent(messageToSend, "text/plain");
InternetAddress[] addressTo = new InternetAddress[recipents.size()];
for (int i = 0; i < recipents.size(); i++) {
addressTo[i] = new InternetAddress(recipents.get(i));
}
message.setRecipients(Message.RecipientType.TO, addressTo);
transport.connect();
transport.send(message);
transport.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
Спасибо,