Отправка электронного письма на java

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)

Я не знаю, правильно ли это пометить как дубликат, поскольку это побуждает OP обходить сертификат, предполагая, что они уже пытались импортировать сертификат, хотя на самом деле они могут просто не знать, что они должны были импортировать это в первую очередь

Zachary Craig 25.04.2018 13:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
91
1

Ответы 1

Ошибка, с которой вы столкнулись, связана не с почтой 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

Надеюсь это поможет !!

Другие вопросы по теме