четвер, 15 листопада 2012 р.

Отправка письма через GMail и Glassfish

В этом посте я покажу вам, как настраивать JavaMail используя SMTP сервер GMail в Glassfish. Таким образом, можно избежать hardcoding  адресов сервера в приложении, и сделать ваше приложение более гибким. Это также минимизирует объем кода.

Установка Glassfish

Во-первых, зайдите в админ панель Glassfish и нажмите JavaMail Sessions. Затем создайте новую конфигурацию сеанса, нажав кнопку "new".

Заполните следующие поля:

JNDI name: mail/mailresource
Mail Host: smtp.gmail.com
Default User: you_account@gmail.com
Default Return Address: you_account@gmail.com

Имя JNDI должно быть с префиксом "mail/".

Используйте свой адрес электронной почты GMail в последних двух полях.

mail.smtp.socketFactory.port: 465
mail.smtp.port: 465
mail.smtp.socketFactory.fallback: false
mail.smtp.auth: true
mail.smtp.password: <пароль от gmail>
mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory

Используйте свой действующий GMail пароль в поле mail.smtp.password. Сохраните настройки.

Пример клиента для отправки электронной почты с вложенными файлами

Далее, мы создаем клиент который будет использовать созданную JavaMail службу в Glassfish. Прежде чем мы сможем это сделать, мы должны к нашему приложению подключить библиотеки: AppServ-rt.jar и javaee.jar. Вы можете найти их в Lib каталоге установки Glassfish. Убедитесь, что все библиотеки находятся в вашей build/class-path.

Теперь скачайте и также подключите к нашему приложению JavaMail библиотеку, которую вы можете скачать здесь.

Ниже наведенный пример который строит письмо с тремя вложениями из трех различных источников, и отправляет на e-mail с двум получателям.

Вы должны использовать MIME-типы, чтобы указать тип вложений. Сохраните приведенный ниже код, как Main.java, скомпилируйте и запустите!

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.util.ByteArrayDataSource;
import javax.naming.InitialContext;
 
public class Main {
 
    public void runTest() throws Exception {
        InitialContext ctx = new InitialContext();
        Session session = (Session) ctx.lookup("mail/mailresource");
        // Или можно использовать инъекцию.
        //@Resource(name = "mail/mailresource")
        //private Session session;
 
        // Создание email и заголовков.
        Message msg = new MimeMessage(session);
        msg.setSubject("Тема письма");
        msg.setRecipient(RecipientType.TO,
                         new InternetAddress(
                         "exam1@devcolibri.com",
                         "ExamName1"));
        msg.setRecipient(RecipientType.CC,
                         new InternetAddress(
                         "exam2@devcolibri.com",
                         "ExamName2"));
        msg.setFrom(new InternetAddress(
                    "admin@devcolibri.com",
                    "Admin"));
 
        // Сообщение
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText("В этом письме есть файлы.");
 
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
 
        // Вложение файла 1
        messageBodyPart = new MimeBodyPart();
        messageBodyPart.setFileName("README1.txt");
        messageBodyPart.setContent(new String(
                                   "file 1 content"),
                                   "text/plain");
        multipart.addBodyPart(messageBodyPart);
 
        // Вложение файла 2
        messageBodyPart = new MimeBodyPart();
        messageBodyPart.setFileName("README2.txt");
        DataSource src = new FileDataSource("file.txt");
        messageBodyPart.setDataHandler(new DataHandler(src));
        multipart.addBodyPart(messageBodyPart);
 
        // Вложение файла 3
        messageBodyPart = new MimeBodyPart();
        messageBodyPart.setFileName("README3.txt");
        src = new ByteArrayDataSource(
            "file 3 content".getBytes(),
            "text/plain");
        messageBodyPart.setDataHandler(new DataHandler(src));
        multipart.addBodyPart(messageBodyPart);
 
        msg.setContent(multipart);
 
        // Отправка письма.
        Transport.send(msg);
    }
 
    public static void main(String[] args) {
        Main sendMail = new Main();
        try {
            sendMail.runTest();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Ресурс: www.devcolibri.com

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments