diff --git a/azkaban-common/src/main/java/azkaban/utils/Emailer.java b/azkaban-common/src/main/java/azkaban/utils/Emailer.java
index 6247b59..2c07308 100644
--- a/azkaban-common/src/main/java/azkaban/utils/Emailer.java
+++ b/azkaban-common/src/main/java/azkaban/utils/Emailer.java
@@ -29,6 +29,7 @@ import azkaban.sla.SlaOption;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
+import javax.mail.internet.AddressException;
import org.apache.log4j.Logger;
@Singleton
@@ -147,7 +148,9 @@ public class Emailer extends AbstractMailer implements Alerter {
this.commonMetrics.markSendEmailSuccess();
} catch (final Exception e) {
logger.error("Failed to send " + operation, e);
- this.commonMetrics.markSendEmailFail();
+ if (!(e instanceof AddressException)) {
+ this.commonMetrics.markSendEmailFail();
+ }
}
}
}
diff --git a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
index 5302156..f7fef9a 100644
--- a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
+++ b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
@@ -17,7 +17,9 @@ package azkaban.utils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -31,6 +33,7 @@ import azkaban.test.executions.ExecutionsTestUtil;
import com.codahale.metrics.MetricRegistry;
import java.util.ArrayList;
import java.util.List;
+import javax.mail.internet.AddressException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -126,4 +129,17 @@ public class EmailerTest {
verify(this.message).setSubject("subject");
verify(this.message).setMimeType("text/html");
}
+
+ @Test
+ public void testSendEmailToInvalidAddress() throws Exception {
+ doThrow(AddressException.class).when(this.message).sendEmail();
+ final Flow flow = this.project.getFlow("jobe");
+ flow.addFailureEmails(this.receiveAddrList);
+
+ final ExecutableFlow exFlow = new ExecutableFlow(this.project, flow);
+ final CommonMetrics commonMetrics = mock(CommonMetrics.class);
+ final Emailer emailer = new Emailer(this.props, commonMetrics, this.messageCreator);
+ emailer.alertOnError(exFlow);
+ verify(commonMetrics, never()).markSendEmailFail();
+ }
}