summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java
diff options
context:
space:
mode:
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.java23
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();
}