JavaEE + Glassfish3.1: «Исключение: не удалось подключиться к узлу SMTP: smtp.gmail.com, порт: 465» при отправке почты с помощью почтового сервера Google - PullRequest
0 голосов
/ 28 декабря 2010

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

javax.servlet.ServletException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

Приведенный ниже код взят из моего RequestedScoped Управляемого компонента. Это работает на Glassfish 3.1 b25

private static final String SMTP_HOST_NAME = "smtp.gmail.com";
private static final String SMTP_PORT = "465";
private static final String emailSubjectTxt = "Email Confirmation";
private static final String emailFromAddress = "phamtn8@gmail.com";
private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";    

@PostConstruct    
public void init(){
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
}

public void sendEmailConfirmation() throws MessagingException{   
    boolean debug = true; 
    String sendTo = "phamtn8@wfu.edu";
    Properties props = new Properties();
    props.put("mail.smtp.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "true");
    props.put("mail.smtp.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.port", SMTP_PORT);
    props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
    props.put("mail.smtp.socketFactory.fallback", "false");
    //It dies at the next line
    Session session = Session.getInstance(props,
        new javax.mail.Authenticator() {
        @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("myUserName", "myPassword");
            }
        });

    session.setDebug(debug);
    //Set the FROM address
    Message msg = new MimeMessage(session);
    InternetAddress addressFrom = new InternetAddress(emailFromAddress);
    msg.setFrom(addressFrom);
    //Set the TO address
    InternetAddress[] addressTo = new InternetAddress[1];
    addressTo[0] = new InternetAddress(sendTo);
    msg.setRecipients(Message.RecipientType.TO, addressTo);
    //Construct the content of the email confirmation
    String message = "Test Content"
    // Setting the Subject and Content Type
    msg.setSubject(emailSubjectTxt);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
}

На самом деле это ошибка для Glassfish 3.1. Вот отчет об ошибке

http://java.net/jira/browse/GLASSFISH-15369

1 Ответ

2 голосов
/ 02 января 2011

Я думаю, что это проблема, связанная с SSL.Можете ли вы попробовать добавить следующие строки в разделе <java-config> вашего domain.xml и перезапустить glassfish (обратите внимание, что вам следует отключить GF перед редактированием этого файла)

<jvm-options>-Djavax.net.ssl.keyStorePassword=changeit</jvm-options>
<jvm-options>-Djavax.net.ssl.trustStorePassword=changeit</jvm-options>

, где changeit - пароль по умолчанию для вашего сертификата ssl.

...