Как настроить GlassFish JavaMail для использования Amazon SES? - PullRequest
2 голосов
/ 26 октября 2011

Я не нашел четкой документации по настройке JavaMail GlassFish для использования Amazon SES для отправки сообщений электронной почты.Может ли кто-нибудь привести пример?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Внутри AWS JDK вы можете найти образец в: samples \ AmazonSimpleEmailService \ AWSJavaMailSample.java

По сути, вам нужно установить протокол "aws", а также пароль и пароль пользователя к своим учетным данным AWS:

/*
 * Setup JavaMail to use the Amazon Simple Email Service by specifying
 * the "aws" protocol.
 */
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "aws");

/*
 * Setting mail.aws.user and mail.aws.password are optional. Setting
 * these will allow you to send mail using the static transport send()
 * convince method.  It will also allow you to call connect() with no
 * parameters. Otherwise, a user name and password must be specified
 * in connect.
 */
props.setProperty("mail.aws.user", credentials.getAWSAccessKeyId());
props.setProperty("mail.aws.password", credentials.getAWSSecretKey());

Чтобы отправить сообщение:

// Create a email session
Session session = Session.getInstance(props);

// Create a new Message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FROM));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(TO));
msg.setSubject(SUBJECT);
msg.setText(BODY);
msg.saveChanges();

// Reuse one Transport object for sending all your messages
// for better performance
Transport t = new AWSJavaMailTransport(session, null);
t.connect();
t.sendMessage(msg, null);

Это должно сделать работу за вас.

2 голосов
/ 14 июня 2012

Вы можете сделать так, чтобы Glassfish предоставлял сеанс JavaMail, позволяя коду приложения быть независимым от поставщика.

Создание сеанса JavaMail с использованием интерфейса администратора Glassfish:

Ресурсы-> Сеансы JavaMail.

Ключевые атрибуты:

  • JNDI : mail / somevalue
  • Почтовый хост : email.us-east-1.amazonaws.com
  • Адрес отправителя по умолчанию : адрес электронной почты источника
  • Транспортный протокол : aws
  • Класс транспортного протокола : com.amazonaws.services.simpleemail.AWSJavaMailTransport

В форме также требуются значения для «пользователя по умолчанию», но, насколько я могу судить, она не будет использоваться.

Кроме того, вам необходимо добавить следующие свойства в сеанс:

  • mail.aws.password : ваш секретный ключ AWS
  • mail.aws.user : ваш ключ доступа AWS

Код вашего приложения может получить сеанс посредством инъекции:

@Resource(name="mail/somevalue")
private Session mailSession;

Чтобы отправить электронное письмо с использованием введенного сеанса

    Message msg = new MimeMessage(mailSession);
    try {
        msg.setSubject(subject);
        msg.setText(body);
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
        msg.setFrom();

        Transport t = session.getTransport();

        if (!t.isConnected()) {
            t.connect();
        }

        t.sendMessage(msg, null);

    } catch (MessagingException ex) {
        // Handle exception
    } catch (UnsupportedEncodingException ex) {
        // Handle exception         
    }

Вызов msg.setFrom () заполнит поле «От» сообщения значением, содержащимся в свойстве сеанса «mail.user», которое берется из поля сеанса JavaMail «Отправители по умолчанию». Адрес "

...