Index: ../../../java/grails-plugins/grails-mail/test/unit/org/grails/mail/MailMessageBuilderTests.groovy =================================================================== --- ../../../java/grails-plugins/grails-mail/test/unit/org/grails/mail/MailMessageBuilderTests.groovy (revision 44701) +++ ../../../java/grails-plugins/grails-mail/test/unit/org/grails/mail/MailMessageBuilderTests.groovy Sun Aug 02 22:03:26 CEST 2009 @@ -21,6 +21,7 @@ import org.codehaus.groovy.grails.commons.ConfigurationHolder import org.springframework.mail.MailSender import org.springframework.mail.javamail.JavaMailSender +import javax.mail.internet.MimeMultipart /** * Test case for {@link MailMessageBuilder}. @@ -127,6 +128,23 @@ } } + void testAttachment() { + processDsl { + multipart true + to "fred@g2one.com" + subject "Hello Fred" + body 'How are you?' + attachBytes "dummy.bin", "application/binary", "abcdef".bytes + } + def msg = testBuilder.createMessage().mimeMessage + assertTrue msg.content instanceof MimeMultipart + assertEquals 2, msg.content.count + + def attachment = msg.content.getBodyPart(1) + assertEquals "abcdef", attachment.content.text + assertEquals "dummy.bin", attachment.fileName + } + private List to(MimeMessage msg) { msg.getRecipients(Message.RecipientType.TO)*.toString() } Index: ../../../java/grails-plugins/grails-mail/src/groovy/org/grails/mail/MailMessageBuilder.groovy =================================================================== --- ../../../java/grails-plugins/grails-mail/src/groovy/org/grails/mail/MailMessageBuilder.groovy (revision 53895) +++ ../../../java/grails-plugins/grails-mail/src/groovy/org/grails/mail/MailMessageBuilder.groovy Sun Aug 02 22:06:58 CEST 2009 @@ -45,6 +45,7 @@ MailSender mailSender MailService mailService + boolean multipart = false // by default, we're sending non-multipart emails MailMessageBuilder(MailService svc, MailSender mailSender) { this.mailSender = mailSender @@ -54,7 +55,8 @@ private MailMessage getMessage() { if(!message) { if(mailSender instanceof JavaMailSender) { - message = new MimeMailMessage(mailSender.createMimeMessage() ) + def helper = new MimeMessageHelper(mailSender.createMimeMessage(), multipart) + message = new MimeMailMessage(helper) } else { message = new SimpleMailMessage() @@ -68,6 +70,11 @@ MailMessage createMessage() { getMessage() } + + void multipart(boolean multipart) { + this.multipart = multipart + } + void to(String recip) { if(recip) { if (ConfigurationHolder.config.grails.mail.overrideAddress) @@ -79,8 +86,8 @@ void attachBytes(String fileName, String contentType, byte[] bytes) { def msg = getMessage() if(msg instanceof MimeMailMessage) { - MimeMessageHelper message = new MimeMessageHelper(getMessage(), true, "UTF-8"); - message.addAttachment(fileName, new ByteArrayResource(bytes), contentType) + assert multipart, "message is not marked as 'multipart'; use 'multipart true' as the first line in your builder DSL" + msg.mimeMessageHelper.addAttachment(fileName, new ByteArrayResource(bytes), contentType) } else { throw new IllegalStateException("Message is not an instance of org.springframework.mail.javamail.MimeMessage, cannot attach bytes!")