IllegalStateException при отправке составной почты от tomcat6 - PullRequest
1 голос
/ 24 марта 2012

Я отправляю составные письма с вложениями из моего приложения Grails с помощью mail plugin .

На моей локальной машине (Mac OS X) все работает нормально.Если я разверну свое приложение на tomcat6 (Ubuntu -), почта не сможет быть отправлена ​​из-за IllegalStateException:

Stacktrace follows: 
   java.lang.IllegalStateException: Not in multipart mode - 
   create an appropriate MimeMessageHelper via a constructor that takes a 'multipart' 
   flag if you need to set alternative texts or add inline elements or attachments. 
      at grails.plugin.mail.MailMessageBuilder.doAdd(MailMessageBuilder.groovy:347) 
      at grails.plugin.mail.MailMessageBuilder.attach(MailMessageBuilder.groovy:308) 
      at grails.plugin.mail.MailMessageBuilder.attach(MailMessageBuilder.groovy:284) 
      at grails.plugin.mail.MailMessageBuilder.attachBytes(MailMessageBuilder.groovy:280)
      ...

Простые письма (не многочастные) могут быть успешно отправлены с tomat6.

Вот мой код для отправки составных писем:

mailService.sendMail {
   multipart true
   to mail
   subject mySubject
   body (view: myView, model: myModel)
   attachBytes "${myTitle}.pdf", CH.config.grails.mime.types['pdf'], myBytes
} 

Что я могу сделать, чтобы избежать этих исключений?

Где находится базовая библиотека JavaMail?Это упаковано в файл войны?

Как узнать, какая версия JavaMail используется в моем tomcat6 и на моей локальной машине?

1 Ответ

0 голосов
/ 29 марта 2012

Я нашел источник проблемы - это была моя собственная глупая ошибка.

Вызов mailService был инкапсулирован в другой сервис для добавления значения по умолчанию bcc следующим образом:

def sendWithBcc(Closure callable) {
    // build a wrapper closure around the standard mail closure, which adds BCC functionality
    def newMailClosure = {
        if(CH.config.extraMail.bcc) {
            bcc(CH.config.extraMail.bcc)
        }

        // set the delegate of the inner closure to the delegate of this closure and call the inner closure
        callable.delegate = delegate
        callable.resolveStrategy = Closure.DELEGATE_FIRST
        callable.call()
    }

    return mailService.sendMail(newMailClosure)
}

На моей локальной машине все работает нормально, потому что я не указал extraMail.bcc.

Как раз в тот момент, когда установлен bcc, свойство multipart внешнегозакрытие, похоже, игнорируется в MailMessageBuilder.

. Решение было изменить положение bcc, как показано ниже:

def sendWithBcc(Closure callable) {
    // build a wrapper closure around the standard mail closure, which adds BCC functionality
    def newMailClosure = {            
        // set the delegate of the inner closure to the delegate of this closure and call the inner closure
        callable.delegate = delegate
        callable.resolveStrategy = Closure.DELEGATE_FIRST
        callable.call()

        if(CH.config.extraMail.bcc) {
            bcc(CH.config.extraMail.bcc)
        }
    }

    return mailService.sendMail(newMailClosure)
}

Позор мне - в следующий раз я будуопубликовать более точный код.

...