Я не нашел четкой документации по настройке JavaMail GlassFish для использования Amazon SES для отправки сообщений электронной почты. Может ли кто-нибудь привести пример?
Как настроить GlassFish JavaMail для использования Amazon SES?
Ответы (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);
Это должно сделать работу за вас.
Вы можете сделать так, чтобы 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.