Author: tn Date: Thu Oct 10 21:14:34 2013 New Revision: 1531110 URL: http://svn.apache.org/r1531110 Log: [EMAIL-132] Added support for sending partial emails.
Modified: commons/proper/email/trunk/src/changes/changes.xml commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java commons/proper/email/trunk/src/test/java/org/apache/commons/mail/EmailLiveTest.java Modified: commons/proper/email/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/changes/changes.xml?rev=1531110&r1=1531109&r2=1531110&view=diff ============================================================================== --- commons/proper/email/trunk/src/changes/changes.xml (original) +++ commons/proper/email/trunk/src/changes/changes.xml Thu Oct 10 21:14:34 2013 @@ -23,6 +23,9 @@ <body> <release version="1.3.2" date="TBD"> + <action dev="tn" type="add" issue="EMAIL-132" date="2013-10-10" due-to="Allen Xudong Cheng"> + Added support for sending partial emails in case of invalid addresses. + </action> <action dev="tn" type="fix" issue="EMAIL-131" date="2013-09-14" due-to="Raju Y"> The MimeMessageParser will now correctly parse MIME multi-parts of type "text/plain" and "text/html" with a content disposition header of "attachment". The parts will Modified: commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java?rev=1531110&r1=1531109&r2=1531110&view=diff ============================================================================== --- commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java (original) +++ commons/proper/email/trunk/src/main/java/org/apache/commons/mail/Email.java Thu Oct 10 21:14:34 2013 @@ -29,6 +29,7 @@ import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; +import javax.mail.SendFailedException; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; @@ -312,6 +313,15 @@ public abstract class Email */ private boolean sslCheckServerIdentity; + /** + * If set to true, and a message has some valid and some invalid addresses, send the message anyway, + * reporting the partial failure with a SendFailedException. + * If set to false (the default), the message is not sent to any of the recipients + * if there is an invalid recipient address. + * Defaults to false. + */ + private boolean sendPartial; + /** The Session to mail with. */ private Session session; @@ -639,6 +649,11 @@ public abstract class Email properties.setProperty(EmailConstants.MAIL_TRANSPORT_STARTTLS_REQUIRED, isStartTLSRequired() ? "true" : "false"); + properties.setProperty(EmailConstants.MAIL_SMTP_SEND_PARTIAL, + isSendPartial() ? "true" : "false"); + properties.setProperty(EmailConstants.MAIL_SMTPS_SEND_PARTIAL, + isSendPartial() ? "true" : "false"); + if (this.authenticator != null) { properties.setProperty(MAIL_SMTP_AUTH, "true"); @@ -1641,6 +1656,7 @@ public abstract class Email */ public Email setSSLCheckServerIdentity(boolean sslCheckServerIdentity) { + checkSessionAlreadyInitialized(); this.sslCheckServerIdentity = sslCheckServerIdentity; return this; } @@ -1676,6 +1692,37 @@ public abstract class Email } /** + * If partial sending of email enabled. + * + * @return true if sending partial email is enabled + * @since 1.3.2 + */ + public boolean isSendPartial() + { + return sendPartial; + } + + /** + * Sets whether the email is partially send in case of invalid addresses. + * <p> + * In case the mail server rejects an address as invalid, the call to {@link #send()} + * may throw a {@link SendFailedException}, even if partial send mode is enabled (emails + * to valid addresses will be transmitted). In case the email server does not reject + * invalid addresses immediately, but return a bounce message, no exception will be thrown + * by the {@link #send()} method. + * + * @param sendPartial whether to enable partial send mode + * @return An Email. + * @since 1.3.2 + */ + public Email setSendPartial(boolean sendPartial) + { + checkSessionAlreadyInitialized(); + this.sendPartial = sendPartial; + return this; + } + + /** * Get the list of "To" addresses. * * @return List addresses Modified: commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java?rev=1531110&r1=1531109&r2=1531110&view=diff ============================================================================== --- commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java (original) +++ commons/proper/email/trunk/src/main/java/org/apache/commons/mail/EmailConstants.java Thu Oct 10 21:14:34 2013 @@ -199,6 +199,28 @@ public final class EmailConstants */ public static final String MAIL_SMTP_SSL_SOCKET_FACTORY_PORT = "mail.smtp.ssl.socketFactory.port"; + ///////////////////////////////////////////////////////////////////////// + // since 1.3.2 + ///////////////////////////////////////////////////////////////////////// + + /** + * If set to true, and a message has some valid and some invalid addresses, send the message anyway, + * reporting the partial failure with a SendFailedException. + * If set to false (the default), the message is not sent to any of the recipients + * if there is an invalid recipient address. + * @since 1.3.2 + */ + public static final String MAIL_SMTP_SEND_PARTIAL = "mail.smtp.sendpartial"; + + /** + * If set to true, and a message has some valid and some invalid addresses, send the message anyway, + * reporting the partial failure with a SendFailedException. + * If set to false (the default), the message is not sent to any of the recipients + * if there is an invalid recipient address. + * @since 1.3.2 + */ + public static final String MAIL_SMTPS_SEND_PARTIAL = "mail.smtps.sendpartial"; + /** Hide constructor. */ private EmailConstants() { Modified: commons/proper/email/trunk/src/test/java/org/apache/commons/mail/EmailLiveTest.java URL: http://svn.apache.org/viewvc/commons/proper/email/trunk/src/test/java/org/apache/commons/mail/EmailLiveTest.java?rev=1531110&r1=1531109&r2=1531110&view=diff ============================================================================== --- commons/proper/email/trunk/src/test/java/org/apache/commons/mail/EmailLiveTest.java (original) +++ commons/proper/email/trunk/src/test/java/org/apache/commons/mail/EmailLiveTest.java Thu Oct 10 21:14:34 2013 @@ -360,4 +360,26 @@ public class EmailLiveTest extends Abstr transport.close(); } } + + /** + * Testing if we are able to send a partial email with an invalid address. + * + * https://issues.apache.org/jira/browse/EMAIL-132 + * + * @throws Exception the test failed. + */ + @Test + public void testPartialSend() throws Exception + { + SimpleEmail email = (SimpleEmail) create(SimpleEmail.class); + email.addTo("t...@apache.org"); + email.addTo("asdkljfa...@kadjfka.com"); + email.setSubject("TestPartialMail"); + email.setMsg("This is a test mail ... :-)"); + + email.setSendPartial(true); + + EmailUtils.writeMimeMessage( new File("./target/test-emails/partialmail.eml"), send(email).getMimeMessage()); + } + }