mirror of
https://github.com/google/nomulus.git
synced 2025-05-01 12:37:52 +02:00
The main thrust of this is to create a common POJO that contains email content in a simple way, then have one class that converts that to an email and sends it. Any class that uses email should only have to deal with creating that POJO. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=237883643
91 lines
3.3 KiB
Java
91 lines
3.3 KiB
Java
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package google.registry.util;
|
|
|
|
import static com.google.common.collect.Iterables.toArray;
|
|
|
|
import com.google.common.net.MediaType;
|
|
import google.registry.util.EmailMessage.Attachment;
|
|
import java.io.IOException;
|
|
import java.util.Properties;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Singleton;
|
|
import javax.mail.BodyPart;
|
|
import javax.mail.Message;
|
|
import javax.mail.Message.RecipientType;
|
|
import javax.mail.MessagingException;
|
|
import javax.mail.Multipart;
|
|
import javax.mail.Session;
|
|
import javax.mail.internet.InternetAddress;
|
|
import javax.mail.internet.MimeBodyPart;
|
|
import javax.mail.internet.MimeMessage;
|
|
import javax.mail.internet.MimeMultipart;
|
|
|
|
/**
|
|
* Wrapper around javax.mail's email creation and sending functionality. Encompasses a retry policy
|
|
* as well.
|
|
*/
|
|
@Singleton
|
|
public class SendEmailService {
|
|
|
|
private final Retrier retrier;
|
|
private final TransportEmailSender transportEmailSender;
|
|
|
|
@Inject
|
|
SendEmailService(Retrier retrier, TransportEmailSender transportEmailSender) {
|
|
this.retrier = retrier;
|
|
this.transportEmailSender = transportEmailSender;
|
|
}
|
|
|
|
/**
|
|
* Converts the provided message content into a {@link javax.mail.Message} and sends it with
|
|
* retry on transient failures.
|
|
*/
|
|
public void sendEmail(EmailMessage emailMessage) {
|
|
retrier.callWithRetry(
|
|
() -> {
|
|
Message msg =
|
|
new MimeMessage(
|
|
Session.getDefaultInstance(new Properties(), /* authenticator= */ null));
|
|
msg.setFrom(emailMessage.from());
|
|
msg.addRecipients(
|
|
RecipientType.TO, toArray(emailMessage.recipients(), InternetAddress.class));
|
|
msg.setSubject(emailMessage.subject());
|
|
|
|
Multipart multipart = new MimeMultipart();
|
|
BodyPart bodyPart = new MimeBodyPart();
|
|
bodyPart.setContent(
|
|
emailMessage.body(),
|
|
emailMessage.contentType().orElse(MediaType.PLAIN_TEXT_UTF_8).toString());
|
|
multipart.addBodyPart(bodyPart);
|
|
|
|
if (emailMessage.attachment().isPresent()) {
|
|
Attachment attachment = emailMessage.attachment().get();
|
|
BodyPart attachmentPart = new MimeBodyPart();
|
|
attachmentPart.setContent(attachment.content(), attachment.contentType().toString());
|
|
attachmentPart.setFileName(attachment.filename());
|
|
multipart.addBodyPart(attachmentPart);
|
|
}
|
|
if (emailMessage.bcc().isPresent()) {
|
|
msg.addRecipient(RecipientType.BCC, emailMessage.bcc().get());
|
|
}
|
|
msg.setContent(multipart);
|
|
msg.saveChanges();
|
|
transportEmailSender.sendMessage(msg);
|
|
},
|
|
IOException.class,
|
|
MessagingException.class);
|
|
}
|
|
}
|