Index: grails-app/init/BootStrap.groovy =================================================================== diff -u -r073cbccf9f7133e5714a97b55167df64f08b0768 -r7a08840ad62eb71715f6f63c96c86c8b2c4bd077 --- grails-app/init/BootStrap.groovy (.../BootStrap.groovy) (revision 073cbccf9f7133e5714a97b55167df64f08b0768) +++ grails-app/init/BootStrap.groovy (.../BootStrap.groovy) (revision 7a08840ad62eb71715f6f63c96c86c8b2c4bd077) @@ -1,8 +1,28 @@ +import com.dumbster.smtp.SmtpMessage + class BootStrap { def init = { servletContext -> + enhanceSmtpMessageClass() } def destroy = { } + + private void enhanceSmtpMessageClass() { + MetaClass mc = SmtpMessage.metaClass + Closure split = { it.split(',')*.trim() } + mc.with { + getSubject = { -> delegate.getHeaderValue('Subject') } + getDate = { -> delegate.getHeaderValue('Date') } + getTo = { -> delegate.tos[0] } + getTos = { -> split(delegate.getHeaderValue('To')) } + getFrom = { -> delegate.froms[0] } + getFroms = { -> split(delegate.getHeaderValue('From')) } + getCc = { -> delegate.ccs[0] } + getCcs = { -> split(delegate.getHeaderValue('Cc')) } + getBcc = { -> delegate.bccs[0] } + getBccs = { -> split(delegate.getHeaderValue('Bcc')) } + } + } } Index: grails-app/services/com/lemans/ds/studioorder/StudioOrderPartManagerService.groovy =================================================================== diff -u -rf768ad9e67fe7e17a13a5aff41661e540f1ae028 -r7a08840ad62eb71715f6f63c96c86c8b2c4bd077 --- grails-app/services/com/lemans/ds/studioorder/StudioOrderPartManagerService.groovy (.../StudioOrderPartManagerService.groovy) (revision f768ad9e67fe7e17a13a5aff41661e540f1ae028) +++ grails-app/services/com/lemans/ds/studioorder/StudioOrderPartManagerService.groovy (.../StudioOrderPartManagerService.groovy) (revision 7a08840ad62eb71715f6f63c96c86c8b2c4bd077) @@ -172,7 +172,6 @@ subject: "Studio Order: ${studioOrderId}" ] MimeMessage mimeMessage = createHtmlEmailMessage('studioOrderReport', body) - mimeMessage.allRecipients mailSender.send(mimeMessage) } Index: src/integration-test/groovy/com/lemans/ds/email/EmailIntegrationSpec.groovy =================================================================== diff -u -rf768ad9e67fe7e17a13a5aff41661e540f1ae028 -r7a08840ad62eb71715f6f63c96c86c8b2c4bd077 --- src/integration-test/groovy/com/lemans/ds/email/EmailIntegrationSpec.groovy (.../EmailIntegrationSpec.groovy) (revision f768ad9e67fe7e17a13a5aff41661e540f1ae028) +++ src/integration-test/groovy/com/lemans/ds/email/EmailIntegrationSpec.groovy (.../EmailIntegrationSpec.groovy) (revision 7a08840ad62eb71715f6f63c96c86c8b2c4bd077) @@ -28,6 +28,6 @@ then: dumbster.messageCount == 1 - msg + msg.tos[0] == 'sramisetti@parts-unltd.com' } } Index: src/main/resources/emails/studioOrderReport.tmpl =================================================================== diff -u -r9df90d20f60577c335b99a30433ac760d1635057 -r7a08840ad62eb71715f6f63c96c86c8b2c4bd077 --- src/main/resources/emails/studioOrderReport.tmpl (.../studioOrderReport.tmpl) (revision 9df90d20f60577c335b99a30433ac760d1635057) +++ src/main/resources/emails/studioOrderReport.tmpl (.../studioOrderReport.tmpl) (revision 7a08840ad62eb71715f6f63c96c86c8b2c4bd077) @@ -63,18 +63,18 @@ h4(class: 'heading') { yieldUnescaped 'Studio Order Report' } if (parts) { - parts.each { part -> - table(class: 'table-fill', border: '1px') { - thead { - tr { - th { yieldUnescaped 'Part Number' } - th { yieldUnescaped 'Punctuated Part Number' } - th { yieldUnescaped 'Vendor Punctuated Part Number' } - th { yieldUnescaped 'Part Description' } - th { yieldUnescaped 'Vendor' } - th { yieldUnescaped 'Brand' } - } + table(class: 'table-fill', border: '1px') { + thead { + tr { + th { yieldUnescaped 'Part Number' } + th { yieldUnescaped 'Punctuated Part Number' } + th { yieldUnescaped 'Vendor Punctuated Part Number' } + th { yieldUnescaped 'Part Description' } + th { yieldUnescaped 'Vendor' } + th { yieldUnescaped 'Brand' } } + } + parts.each { part -> tbody { tr { td { yieldUnescaped(part.partNumber ?: '') }