diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java index 3c5e64a2d4..f6817102bc 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.mail; import com.google.gerrit.common.Version; import com.google.gerrit.server.config.ConfigUtil; import com.google.gerrit.server.config.GerritServerConfig; +import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -40,6 +41,13 @@ import java.util.Set; /** Sends email via a nearby SMTP server. */ @Singleton public class SmtpEmailSender implements EmailSender { + public static class Module extends AbstractModule { + @Override + protected void configure() { + bind(EmailSender.class).to(SmtpEmailSender.class); + } + } + public static enum Encryption { NONE, SSL, TLS; } @@ -148,6 +156,7 @@ public class SmtpEmailSender implements EmailSender { new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z").format(expiry)); } + StringBuffer rejected = new StringBuffer(); try { final SMTPClient client = open(); try { @@ -156,11 +165,18 @@ public class SmtpEmailSender implements EmailSender { + " rejected from address " + from.email); } + /* Do not prevent the email from being sent to "good" users simply + * because some users get rejected. If not, a single rejected + * project watcher could prevent email for most actions on a project + * from being sent to any user! Instead, queue up the errors, and + * throw an exception after sending the email to get the rejected + * error(s) logged. + */ for (Address addr : rcpt) { if (!client.addRecipient(addr.email)) { String error = client.getReplyString(); - throw new EmailException("Server " + smtpHost - + " rejected recipient " + addr + ": " + error); + rejected.append("Server " + smtpHost + " rejected recipient " + + addr + ": " + error); } } @@ -189,6 +205,9 @@ public class SmtpEmailSender implements EmailSender { } client.logout(); + if (rejected.length() > 0) { + throw new EmailException(rejected.toString()); + } } finally { client.disconnect(); } |