From a64d08670812fc2ea7a368c4a6ef441ea79cf921 Mon Sep 17 00:00:00 2001 From: Pavlo Tkach <3469726+ptkach@users.noreply.github.com> Date: Fri, 7 Oct 2022 12:12:57 -0400 Subject: [PATCH] Limit environments allowed to send emails out (#1807) --- .../registry/util/SendEmailService.java | 81 ++++++++++++------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/util/src/main/java/google/registry/util/SendEmailService.java b/util/src/main/java/google/registry/util/SendEmailService.java index 0a336e78f..7479d630d 100644 --- a/util/src/main/java/google/registry/util/SendEmailService.java +++ b/util/src/main/java/google/registry/util/SendEmailService.java @@ -14,8 +14,12 @@ package google.registry.util; +import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.collect.Iterables.toArray; +import com.google.common.base.Ascii; +import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.common.net.MediaType; import google.registry.util.EmailMessage.Attachment; import java.io.IOException; @@ -44,6 +48,10 @@ public class SendEmailService { private final Retrier retrier; private final TransportEmailSender transportEmailSender; + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ImmutableSet ALLOWED_ENVS = + ImmutableSet.of("PRODUCTION", "UNITTEST"); + @Inject SendEmailService(Retrier retrier, TransportEmailSender transportEmailSender) { this.retrier = retrier; @@ -55,37 +63,50 @@ public class SendEmailService { * 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()); + if (!ALLOWED_ENVS.contains( + Ascii.toUpperCase(System.getProperty("google.registry.environment", "UNITTEST")))) { + logger.atInfo().log( + String.format( + "Email with subject %s would have been sent to recipients %s", + emailMessage.subject().substring(0, Math.min(emailMessage.subject().length(), 15)), + String.join( + " , ", + emailMessage.recipients().stream() + .map(ia -> ia.toString()) + .collect(toImmutableSet())))); + } else { + 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); + 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); - } - msg.addRecipients(RecipientType.BCC, toArray(emailMessage.bccs(), Address.class)); - msg.addRecipients(RecipientType.CC, toArray(emailMessage.ccs(), Address.class)); - msg.setContent(multipart); - msg.saveChanges(); - transportEmailSender.sendMessage(msg); - }, - IOException.class, - MessagingException.class); + 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); + } + msg.addRecipients(RecipientType.BCC, toArray(emailMessage.bccs(), Address.class)); + msg.addRecipients(RecipientType.CC, toArray(emailMessage.ccs(), Address.class)); + msg.setContent(multipart); + msg.saveChanges(); + transportEmailSender.sendMessage(msg); + }, + IOException.class, + MessagingException.class); + } } }