Как настроить GlassFish JavaMail для использования Amazon SES?

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


person Adam    schedule 26.10.2011    source источник
comment
Amazon SES поддерживает SMTP с декабря 2011. Кажется, это так просто?   -  person Arjan    schedule 14.09.2012


Ответы (2)


Внутри 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);

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

person vdeantoni    schedule 13.02.2012
comment
Знаете ли вы какую-либо причину, по которой вместо этого не следует использовать интерфейс SMTP Amazon SES? ? (Как объявлено в декабре 2011 г.) - person Arjan; 14.09.2012

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

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

Ресурсы->Сессии JavaMail.

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

  • JNDI: почта/какое-то значение
  • Почтовый хост: 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.

person Andy-E    schedule 13.06.2012