mirror of
https://github.com/google/nomulus.git
synced 2025-05-08 07:48:21 +02:00
Limit environments allowed to send emails out (#1807)
This commit is contained in:
parent
b83c970af4
commit
a64d086708
1 changed files with 51 additions and 30 deletions
|
@ -14,8 +14,12 @@
|
||||||
|
|
||||||
package google.registry.util;
|
package google.registry.util;
|
||||||
|
|
||||||
|
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||||
import static com.google.common.collect.Iterables.toArray;
|
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 com.google.common.net.MediaType;
|
||||||
import google.registry.util.EmailMessage.Attachment;
|
import google.registry.util.EmailMessage.Attachment;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -44,6 +48,10 @@ public class SendEmailService {
|
||||||
private final Retrier retrier;
|
private final Retrier retrier;
|
||||||
private final TransportEmailSender transportEmailSender;
|
private final TransportEmailSender transportEmailSender;
|
||||||
|
|
||||||
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
private static final ImmutableSet<String> ALLOWED_ENVS =
|
||||||
|
ImmutableSet.of("PRODUCTION", "UNITTEST");
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
SendEmailService(Retrier retrier, TransportEmailSender transportEmailSender) {
|
SendEmailService(Retrier retrier, TransportEmailSender transportEmailSender) {
|
||||||
this.retrier = retrier;
|
this.retrier = retrier;
|
||||||
|
@ -55,37 +63,50 @@ public class SendEmailService {
|
||||||
* on transient failures.
|
* on transient failures.
|
||||||
*/
|
*/
|
||||||
public void sendEmail(EmailMessage emailMessage) {
|
public void sendEmail(EmailMessage emailMessage) {
|
||||||
retrier.callWithRetry(
|
if (!ALLOWED_ENVS.contains(
|
||||||
() -> {
|
Ascii.toUpperCase(System.getProperty("google.registry.environment", "UNITTEST")))) {
|
||||||
Message msg =
|
logger.atInfo().log(
|
||||||
new MimeMessage(
|
String.format(
|
||||||
Session.getDefaultInstance(new Properties(), /* authenticator= */ null));
|
"Email with subject %s would have been sent to recipients %s",
|
||||||
msg.setFrom(emailMessage.from());
|
emailMessage.subject().substring(0, Math.min(emailMessage.subject().length(), 15)),
|
||||||
msg.addRecipients(
|
String.join(
|
||||||
RecipientType.TO, toArray(emailMessage.recipients(), InternetAddress.class));
|
" , ",
|
||||||
msg.setSubject(emailMessage.subject());
|
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();
|
Multipart multipart = new MimeMultipart();
|
||||||
BodyPart bodyPart = new MimeBodyPart();
|
BodyPart bodyPart = new MimeBodyPart();
|
||||||
bodyPart.setContent(
|
bodyPart.setContent(
|
||||||
emailMessage.body(),
|
emailMessage.body(),
|
||||||
emailMessage.contentType().orElse(MediaType.PLAIN_TEXT_UTF_8).toString());
|
emailMessage.contentType().orElse(MediaType.PLAIN_TEXT_UTF_8).toString());
|
||||||
multipart.addBodyPart(bodyPart);
|
multipart.addBodyPart(bodyPart);
|
||||||
|
|
||||||
if (emailMessage.attachment().isPresent()) {
|
if (emailMessage.attachment().isPresent()) {
|
||||||
Attachment attachment = emailMessage.attachment().get();
|
Attachment attachment = emailMessage.attachment().get();
|
||||||
BodyPart attachmentPart = new MimeBodyPart();
|
BodyPart attachmentPart = new MimeBodyPart();
|
||||||
attachmentPart.setContent(attachment.content(), attachment.contentType().toString());
|
attachmentPart.setContent(attachment.content(), attachment.contentType().toString());
|
||||||
attachmentPart.setFileName(attachment.filename());
|
attachmentPart.setFileName(attachment.filename());
|
||||||
multipart.addBodyPart(attachmentPart);
|
multipart.addBodyPart(attachmentPart);
|
||||||
}
|
}
|
||||||
msg.addRecipients(RecipientType.BCC, toArray(emailMessage.bccs(), Address.class));
|
msg.addRecipients(RecipientType.BCC, toArray(emailMessage.bccs(), Address.class));
|
||||||
msg.addRecipients(RecipientType.CC, toArray(emailMessage.ccs(), Address.class));
|
msg.addRecipients(RecipientType.CC, toArray(emailMessage.ccs(), Address.class));
|
||||||
msg.setContent(multipart);
|
msg.setContent(multipart);
|
||||||
msg.saveChanges();
|
msg.saveChanges();
|
||||||
transportEmailSender.sendMessage(msg);
|
transportEmailSender.sendMessage(msg);
|
||||||
},
|
},
|
||||||
IOException.class,
|
IOException.class,
|
||||||
MessagingException.class);
|
MessagingException.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue