16 января 2008

Отправка почты с помощью Java Mail через протокол SSL/TLS

Как использовать базовые функции Java Mail уже было расмотрено в одном из предыдущих обзоров. Теперь

рассмотрим, как отправлять почту через защищённое соеденение с smtp сервером.
для того, что-бы установить такое соеденение необходимо:
- принять сертификаты подлинности сервера;
- пройти аутентификацию на сервере.

Для начала мы должны зареестрировать провайдера алгоритма SSL :
Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider());

Далее следует создать класс, который является наследником: SSLSocketFactory, и добавить имя этого класс в

свойства:
Security.setProperty( "ssl.SocketFactory.provider",SimpleSSLSocketFactory.class.getCanonicalName());

Для того что-бы выполнить соеденение по SSL/TLS нам надо принять все сертификаты сервера. Для этого мы

перегрузим свой TrustManager(класс проверяющий подлинность сертификатов) и при инициализации SSL сессии в

нашем SimpleSSLSocketFactory , TrustManager будет без проверки принимать все сертификаты предоставленные

сервером. Благодаря этому нам удастся установить соеденение с сервером.

Теперь нам осталось установить ещё несколько дополнительных свойств для использования SSL/TLS :

final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props.setProperty( "mail.smtp.socketFactory.class", SSL_FACTORY);
// использовать только ssl соеденения в любом из направлений
props.setProperty( "mail.smtp.socketFactory.fallback", "false");
// smtp требует автентификации
props.setProperty("mail.smtp.auth","true");

После этого мы собираем письмо, как показано в предыдущей статье и отсылаем его следующим образом:
Transport tr = session.getTransport("smtp");
tr.connect(smtpHost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();

Где в полях username, password надо указать соответствующие данные учётной записи на smtp сервере.

На этом всё. Если у вам не удалось самому собрать такое приложение, вы можете скачать мои исходники.
Ресурсы:
исходники : http://depositfiles.com/files/3109865
java.sun.com/products/javamail


Комментариев нет: