Coder Social home page Coder Social logo

kefirfromperm / grails-asynchronous-mail Goto Github PK

View Code? Open in Web Editor NEW
21.0 9.0 36.0 1.14 MB

The Grails Asynchronous Mail plugin

Home Page: http://grails.org/plugin/asynchronous-mail

grails email mail smtp quartz asynchronous groovy grails-asynchronous-mail plugin grails-plugin

grails-asynchronous-mail's Introduction

grails-asynchronous-mail's People

Contributors

aberbenni avatar demon101 avatar douglas-souza-eteg avatar dovaleac avatar dpcasady avatar ilopmar avatar jameskleeh avatar kefirfromperm avatar matrei avatar micke-a avatar puneetbehl avatar stokito avatar uniqen avatar visheshd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grails-asynchronous-mail's Issues

envelopeFrom

In the latest version (1.0.6) of Grails Mail plugin the field envelopeFrom was added. It is needed to add this field to messages of the Asynchronous Mail plugin.

MessageStatus выделить в отдельный файл

Класс MessageStatus объявлен в том же файле что и AsynchronousMailMessage и оба эти класса публичные. Хотя это вроде и удобно, но вот в труъ джаве такое вообще нельзя, может и тут не стоит такое делать?
Есть какие нибудь потенциальные проблемы с таким подходом? Может во время рефлексии или ещё чего то-то там.

After update from grails 2.4.5 to 3.1.14 errors in logs

For some of mails after update from grails 2.4.5 to 3.1.14 errors in logs

grails.app.services.grails.plugin.asyncmail.AsynchronousMailProcessService - An exception was thrown when attempting to send a message with id

compile 'org.grails.plugins:asynchronous-mail:2.0.0.RC4'

Settings

asynchronous.mail.default.max.attempts.count=3
asynchronous.mail.messages.at.once=200
asynchronous.mail.send.immediately=true  // since 0.1.2
asynchronous.mail.disable=false    // since 0.7
asynchronous.mail.persistence.provider='hibernate4' // Possible values are 'hibernate', 'hibernate4', 'mongodb'
asynchronous.mail.gparsPoolSize=1
asynchronous.mail.newSessionOnImmediateSend=false

Stack trace:

org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException: Object of class [grails.plugin.asyncmail.AsynchronousMailMessage] with identifier [1108823]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [grails.plugin.asyncmail.AsynchronousMailMessage#1108823]
at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:202)
at org.grails.orm.hibernate.GrailsHibernateTemplate.convertHibernateAccessException(GrailsHibernateTemplate.java:614)
at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:200)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:140)
at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:110)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.performSave(AbstractHibernateGormInstanceApi.groovy:234)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:154)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:151)
at org.grails.datastore.gorm.GormEntity$Trait$Helper$save$14.call(Unknown Source)
at grails.plugin.asyncmail.AsynchronousMailMessage.save(AsynchronousMailMessage.groovy)
at grails.plugin.asyncmail.AsynchronousMailMessage.save(AsynchronousMailMessage.groovy)
at org.grails.datastore.gorm.GormEntity$save$1.call(Unknown Source)
at grails.plugin.asyncmail.AsynchronousMailPersistenceService.save(AsynchronousMailPersistenceService.groovy:12)
at sun.reflect.GeneratedMethodAccessor1538.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:71)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at grails.plugin.asyncmail.AsynchronousMailProcessService.processEmailMessage(AsynchronousMailProcessService.groovy:54)
at sun.reflect.GeneratedMethodAccessor1577.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.j

Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [grails.plugin.asyncmail.AsynchronousMailMessage#1108786]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:2541)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3285)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525)
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.flushSession(AbstractHibernateGormInstanceApi.groovy:272)
at sun.reflect.GeneratedMethodAccessor1479.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

Developer list

Add all contributors to the developer list of the plugin.

Grails 3.2.8 and asynchronous-mail:2.0.0.RC7 - startJobs causes NullPointerException

When starting the app with the plugin enabled it causes a null pointer here is the stacktrace.

java.lang.NullPointerException: Cannot get property 'group' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:174)
at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy:44)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
at grails.plugin.asyncmail.AsynchronousMailJob.schedule(AsynchronousMailJob.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at grails.plugin.asyncmail.AsynchronousMailJob.schedule(AsynchronousMailJob.groovy)
at grails.plugin.asyncmail.AsynchronousMailJob$schedule.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.startJobs(AsynchronousMailGrailsPlugin.groovy:76)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin$startJobs.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.doWithApplicationContext(AsynchronousMailGrailsPlugin.groovy:32)
at org.grails.plugins.DefaultGrailsPlugin.doWithApplicationContext(DefaultGrailsPlugin.java:523)
at org.grails.plugins.AbstractGrailsPluginManager.doPostProcessing(AbstractGrailsPluginManager.java:224)
.....

ERROR listeners.ExceptionPrinterJobListener - Exception occurred in job: Grails Job

I get the following error in dev mode:

| Error 2013-12-12 13:19:00,458 [quartzScheduler_Worker-6] ERROR listeners.ExceptionPrinterJobListener  - Exception occurred in job: Grails Job
Message: java.lang.NoClassDefFoundError: Could not initialize class grails.plugin.asyncmail.AsynchronousMailPersistenceService$_updateExpiredMessages_closure2
   Line | Method
->> 111 | execute in grails.plugins.quartz.GrailsJobFactory$GrailsJob
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   202 | run     in org.quartz.core.JobRunShell
^   573 | run . . in org.quartz.simpl.SimpleThreadPool$WorkerThread
Caused by NoClassDefFoundError: Could not initialize class grails.plugin.asyncmail.AsynchronousMailPersistenceService$_updateExpiredMessages_closure2
->>  41 | updateExpiredMessages in grails.plugin.asyncmail.AsynchronousMailPersistenceService
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    13 | execute in grails.plugin.asyncmail.ExpiredMessagesCollectorJob
|   104 | execute in grails.plugins.quartz.GrailsJobFactory$GrailsJob
|   202 | run     in org.quartz.core.JobRunShell
^   573 | run . . in org.quartz.simpl.SimpleThreadPool$WorkerThread

StringUtils class missing

Hi there!

I am getting error when sending async email.

Caused by: groovy.lang.MissingPropertyException: No such property: StringUtils for class: grails.plugin.asyncmail.AsynchronousMailMessage
    at grails.plugin.asyncmail.AsynchronousMailMessage$__clinit__closure2$_closure6$_closure9.doCall(AsynchronousMailMessage.groovy:215)
    at grails.plugin.asyncmail.AsynchronousMailMessage$__clinit__closure2$_closure6.doCall(AsynchronousMailMessage.groovy:214)
    at grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107)
    at grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:979)
    at grails.plugin.asyncmail.AsynchronousMailPersistenceService.save(AsynchronousMailPersistenceService.groovy:12)
    at grails.plugin.asyncmail.AsynchronousMailService.sendAsynchronousMail(AsynchronousMailService.groovy:46)
    at grails.plugin.asyncmail.AsynchronousMailService.sendMail(AsynchronousMailService.groovy:70)
...

When I looked into your code I think that you are missing an import.

headers(nullable: true, validator: { Map<String, String> map ->
            boolean flag = true
            map?.each { String key, String value ->
                if (StringUtils.isBlank(key) || StringUtils.isBlank(value)) {
                    flag = false
                }
            }
            return flag
        })

But that class is not imported anywhere:

package grails.plugin.asyncmail

import grails.plugin.asyncmail.enums.MessageStatus
import groovy.transform.ToString

import static grails.plugin.asyncmail.enums.MessageStatus.*

I switched also to your old branch 1.x and the import seems to be there. Can you fix it ?

quartz2

great plugin

what is the reason to migrate from quartz2 to quartz ?

Is there simple way to change latest code base to use quartz2 ?

thank you

Sending Multipart Emails fails (Text + HTML)

Hi Vitalii,

I am getting the Exception "Not in multipart mode" when sending email having HTML as well as Text content. Sending with the "normal" Mail plugin works.
I had a quick look at the code and it seems that you only set Multipart true if there are attachments; but not if we have mixed content.

Best,
Wolfram

asynchronousMailService.sendMail {
multipart true
to email
subject title
text plainText
html(view: "/...", model: model)
}

Stack trace:

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 org.springframework.mail.javamail.MimeMessageHelper.checkMultipart(MimeMessageHelper.java:383)
at org.springframework.mail.javamail.MimeMessageHelper.getMimeMultipart(MimeMessageHelper.java:415)
at org.springframework.mail.javamail.MimeMessageHelper.getMainPart(MimeMessageHelper.java:827)
at org.springframework.mail.javamail.MimeMessageHelper.setText(MimeMessageHelper.java:813)
at org.springframework.mail.javamail.MimeMessageHelper$setText$0.call(Unknown Source)
at grails.plugins.mail.MailMessageBuilder.finishMessage(MailMessageBuilder.groovy:426)

Plugin Config

The docu is not very clear on that:

"Or you can use the default configuration. It disposes in plugin-dir/grails-app/conf/DefaultAsynchronousMailConfig.groovy"

Does this mean I can use Config.groovy to do:

asynchronous.mail.default.attempt.interval=300000l

Can you please make it clear if I need a new config file for that or not?

avax.mail.MessagingException: Could not connect to SMTP host: smtp.udag.de, port: 25, response: -1

Sometimes I get the following error when I try to send mails. This does not happen all the time but sometimes.

2015-08-19 12:23:01,637 [ForkJoinPool-39-worker-1] WARN  asyncmail.AsynchronousMailProcessService  - Attempt to send the message with id=13 was failed.
Message: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.udag.de, port: 25, response: -1. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.udag.de, port: 25, response: -1
   Line | Method
->> 131 | sendMessage         in grails.plugin.mail.MailMessageBuilder
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    55 | sendMail            in grails.plugin.mail.MailService
|    59 | sendMail . . . . .  in     ''
|    12 | send                in grails.plugin.asyncmail.AsynchronousMailSendService
|    73 | processEmailMessage in grails.plugin.asyncmail.AsynchronousMailProcessService
|    30 | doCall              in grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1_closure2
|   192 | doCall . . . . . .  in groovyx.gpars.pa.GParsPoolUtilHelper$_eachParallelPA_closure8
|   640 | leafApply           in groovyx.gpars.extra166y.AbstractParallelAnyArray$OUPap
|   147 | atLeaf . . . . . .  in groovyx.gpars.extra166y.PAS$FJOApply
|   108 | compute             in groovyx.gpars.extra166y.PAS$FJBase
|   148 | exec . . . . . . .  in jsr166y.RecursiveAction
|   305 | doExec              in jsr166y.ForkJoinTask
|   575 | execTask . . . . .  in jsr166y.ForkJoinWorkerThread
|   755 | scan                in jsr166y.ForkJoinPool
|   617 | work . . . . . . .  in     ''
^   369 | run                 in jsr166y.ForkJoinWorkerThread
Caused by MessagingException: Could not connect to SMTP host: smtp.udag.de, port: 25, response: -1
->> 1972 | openServer          in com.sun.mail.smtp.SMTPTransport
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   656 | protocolConnect     in     ''
|   345 | connect . . . . . . in javax.mail.Service
|   131 | sendMessage         in grails.plugin.mail.MailMessageBuilder
|    55 | sendMail . . . . .  in grails.plugin.mail.MailService
|    59 | sendMail            in     ''
|    12 | send . . . . . . .  in grails.plugin.asyncmail.AsynchronousMailSendService
|    73 | processEmailMessage in grails.plugin.asyncmail.AsynchronousMailProcessService
|    30 | doCall . . . . . .  in grails.plugin.asyncmail.AsynchronousMailProcessService$_findAndSendEmails_closure1_closure2
|   192 | doCall              in groovyx.gpars.pa.GParsPoolUtilHelper$_eachParallelPA_closure8
|   640 | leafApply . . . . . in groovyx.gpars.extra166y.AbstractParallelAnyArray$OUPap
|   147 | atLeaf              in groovyx.gpars.extra166y.PAS$FJOApply
|   108 | compute . . . . . . in groovyx.gpars.extra166y.PAS$FJBase
|   148 | exec                in jsr166y.RecursiveAction
|   305 | doExec . . . . . .  in jsr166y.ForkJoinTask
|   575 | execTask            in jsr166y.ForkJoinWorkerThread
|   755 | scan . . . . . . .  in jsr166y.ForkJoinPool
|   617 | work                in     ''
^   369 | run . . . . . . . . in jsr166y.ForkJoinWorkerThread

oracle 11g problem

Hi,
my name is Alberto and have been trying your plugin. First of all I want to congratulate with you. It's extremely useful.

Unfotunately I had some problem.
I tried the installation on a 2.3.5 grails environment and ran the project with H2 and everything was ok. But when I did it on Oracle 11g I obtained the classic SQLException 'stream already closed'. By the help of a debug process discovered that the problem was about the AsynchronousMailMessage and its attachments retrieval.

Did some search on google and found that it is a known issue with hibernate and Long Raw and Long column. So by the help of many discussions I tried to comment the 'fetch' mapping line in AsynchronousMailMessage.groovy so that is not an eager fething anymore:

......

static mapping = {

    table 'async_mail_mess'

    from column: 'from_column'

    //attachments fetch: 'join'

....

After this change everything worked well.

No one mentioned any Oracle issue in any comments on Jira or github. Where did I go wrong?

Thank you.

Wrong import path for enums

Please update an import directive in index.gsp for MessageStatus:
wrong path:
<%@ page import="grails.plugin.asyncmail.MessageStatus; ..." %>
to
<%@ page import="grails.plugin.asyncmail.enums.MessageStatus; ..." %>

View renderer fail with error when accessing index action with outdated path.

Unsupported major.minor version 52.0

D:\Dev\Java\jdk1.7.0_79\bin\java ...
|Running application...

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':compileGroovy'.

    grails/plugin/asyncmail/AsynchronousMailService : Unsupported major.minor version 52.0

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    Error |
    Failed to start server (Use --stacktrace to see the full trace)

Process finished with exit code 1

Start-up error on Grails 3.1.1

I'm having the following error on Grails 3.1.1 startup.

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'null' with class 'org.grails.config.NavigableMap$NullSafeNavigator' to class 'java.lang.Long'
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToNumber(DefaultTypeTransformation.java:163) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:272) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603) ~[groovy-2.4.5.jar:2.4.5]
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.startJobs(AsynchronousMailGrailsPlugin.groovy:109) ~[asynchronous-mail-2.0.0.RC1.jar:na]
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin$startJobs$0.callCurrent(Unknown Source) ~[na:na]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) [groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) [groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) [groovy-2.4.5.jar:2.4.5]
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.doWithApplicationContext(AsynchronousMailGrailsPlugin.groovy:65) ~[asynchronous-mail-2.0.0.RC1.jar:na]

Version 1.0 does different than 1.0RC-5 in production

I tested the plugin in version 1.0RC-5 in production it worked well for me. After upgrading to version 1.0 it still works in development but not in production.

my BuildConfig:

compile ":quartz:1.0.1"
compile ":mail:1.0.1"
compile ":asynchronous-mail:1.0"

Here is the Config.groovy I use:

        grails {
            mail {
                host = "smtp.mydomain.com"
                port = 465
                username = "user"
                password = "pw"
                props = ["mail.smtp.auth":"true",
                            "mail.smtp.socketFactory.port":"465",
                            "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
                            "mail.smtp.socketFactory.fallback":"false" ]
            }
        }
        grails.mail.default.from="Name <[email protected]>"

Do you have any idea on that? The only change I made is from asynchronous-mail:1.0RC-5 to asynchronous-mail:1.0.

NPE with new version of quartz plugin

"org.grails.plugins:quartz:2.0.12"
grails 3.1.16

During startup:

java.lang.NullPointerException: Cannot get property 'group' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:172)
at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy:44)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
at grails.plugin.asyncmail.AsynchronousMailJob.schedule(AsynchronousMailJob.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)

java.lang.NullPointerException: Cannot get property 'group' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:172)
at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy:44)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
at grails.plugin.asyncmail.AsynchronousMailJob.schedule(AsynchronousMailJob.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46)
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at grails.plugins.quartz.QuartzJob$Trait$Helper.schedule(QuartzJob.groovy)
at grails.plugins.quartz.QuartzJob$Trait$Helper$schedule.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at grails.plugin.asyncmail.AsynchronousMailJob.schedule(AsynchronousMailJob.groovy)
at grails.plugin.asyncmail.AsynchronousMailJob$schedule.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.startJobs(AsynchronousMailGrailsPlugin.groovy:76)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin$startJobs.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at grails.plugin.asyncmail.AsynchronousMailGrailsPlugin.doWithApplicationContext(AsynchronousMailGrailsPlugin.groovy:32)
at org.grails.plugins.DefaultGrailsPlugin.doWithApplicationContext(DefaultGrailsPlugin.java:524)
at org.grails.plugins.AbstractGrailsPluginManager.doPostProcessing(AbstractGrailsPluginManager.java:231)

Cannot cast object ConfigObject with class ConfigObject to class Integer

Grails version 2.2.2
Upgrade from asynchronous-mail:1.0-RC5 to asynchronous-mail:1.0

I fix it, add at config.

asynchronous.mail.gparsPoolSize=1l

Stacktrace

12:30:03 quartzScheduler_Worker-4 ERROR ExceptionPrinterJobListener - Exception occurred in job: Grails Job
org.quartz.JobExecutionException: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'groovy.util.ConfigObject@7db1bdf7' with class 'groovy.util.ConfigObject' to class 'java.lang.Integer' [See nested exception: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'groovy.util.ConfigObject@7db1bdf7' with class 'groovy.util.ConfigObject' to class 'java.lang.Integer']
at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'groovy.util.ConfigObject@7db1bdf7' with class 'groovy.util.ConfigObject' to class 'java.lang.Integer'
at grails.plugin.asyncmail.AsynchronousMailProcessService.findAndSendEmails(AsynchronousMailProcessService.groovy:21)
at grails.plugin.asyncmail.AsynchronousMailJob.execute(AsynchronousMailJob.groovy:19)
at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:104)
... 2 more

Rewrite the README

It's needed to rewrite README file. How to use new plugin version 2.0.0 with Grails 3.x.x?

Multithreading

In RC5 we deleted tasks in AsynchronousMailProcessService. So it's needed return tasks but it is needed to control thread count.

ExpiredMessagesCollectorJob should not contain any SQL

ExpiredMessagesCollectorJob updates AsynchronousMailMessage table.
It looks for me not a good idea. There is a convention that all changes to DB should be done by service.
Could you extract this code to method in AsynchronousMailPersistenceService class?

Infinity sent of message without recipient

For messages without recipient plugin will try to sent it on every attempt
Because of atLeastOneRecipientValidator during saving with SENT status its gets error

asynchronous.mail.one.recipient.required

At result, it never change status in DB.

Please, validate message before sending in AsynchronousMailProcessService.processEmailMessage and save in DB with ERROR status if something goes wrong

Hibernate Exception while sending mail from an asynchronous Event Listener in Grails 2.5.2

Hi,
Thank you for such a wonderful plugin. I have been using this plugin for quite some time now and absolutely love it.

Recently, I had a use case to send a notification email in an event listener.
I'm using grails 2.5.2, grails-async - 1.2, hibernate 3.x
Here's my event listener:

`class ExportListenerService implements ApplicationListener {
def bqExportService
def asynchronousMailService

/**

  • Handle an application event.

  • @param event the event to respond to
    */

    @OverRide
    void onApplicationEvent(ExportNotificationEvent event) {
    // get data from event

      def inParam = event.getSource() as Map
    
      def obj = bqExportService.generateReportAsByteArray(inParam)
      if (!obj?.generatedBytes) {
    
          log.error("Error Generating report ${obj.reportFileName} - No generated bytes")
    
      } else if (obj.generatedBytes && inParam.nextAction == 'email') {
    
          asynchronousMailService.sendMail {
              multipart true
              to inParam?.user
              subject "Report ${obj?.reportFileName}.pdf"
              body "Your report is generated and attached with this mail."
              attachBytes "${obj?.reportFileName}.pdf", "application/pdf", obj?.generatedBytes
          }
      }
    

    }
    }
    `

I get the following stack trace:
obj=[reportFileName:Execution_Export-Test_2016-02-11_06:38:03, generatedBytes:[37, 80, 10]] | Error Exception in thread "pool-1-thread-11" | Error org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here | Error at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65) | Error at grails.plugin.hibernatehijacker.hibernate.SessionFactoryInvocationHandler.invoke(SessionFactoryInvocationHandler.java:33) | Error at com.sun.proxy.$Proxy40.getCurrentSession(Unknown Source) | Error at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:58) | Error at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) | Error at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) | Error at grails.plugin.asyncmail.AsynchronousMailMessage.validate(AsynchronousMailMessage.groovy) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:497) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1432) | Error at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:370) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:352) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:345) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreInsert(ClosureEventListener.java:352) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreInsert(EventTriggeringInterceptor.java:157) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:83) | Error at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:123) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) | Error at java.lang.Thread.run(Thread.java:745) | Error Exception in thread "pool-1-thread-12" | Error org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here | Error at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65) | Error at grails.plugin.hibernatehijacker.hibernate.SessionFactoryInvocationHandler.invoke(SessionFactoryInvocationHandler.java:33) | Error at com.sun.proxy.$Proxy40.getCurrentSession(Unknown Source) | Error at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:58) | Error at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) | Error at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) | Error at grails.plugin.asyncmail.AsynchronousMailAttachment.validate(AsynchronousMailAttachment.groovy) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:497) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1432) | Error at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:370) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$8.call(ClosureEventListener.java:352) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:345) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreInsert(ClosureEventListener.java:352) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreInsert(EventTriggeringInterceptor.java:157) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:83) | Error at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:123) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) | Error at java.lang.Thread.run(Thread.java:745) 2016-05-20 13:10:59,647 +0530 [quartzScheduler_Worker-2] TRACE AsynchronousMailJob:104 - Entering execute method. 2016-05-20 13:10:59,655 +0530 [ForkJoinPool-10-worker-1] DEBUG AsynchronousMailProcessService:128 - Open a new persistence session. 2016-05-20 13:10:59,664 +0530 [ForkJoinPool-10-worker-1] TRACE AsynchronousMailProcessService:104 - Found a message: grails.plugin.asyncmail.AsynchronousMailMessage(id:105, to:[[email protected]], subject:Report Execution_Export-Test_2016-02-11_06:38:03.pdf, status:CREATED) | Error Exception in thread "pool-1-thread-13" | Error org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here | Error at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65) | Error at grails.plugin.hibernatehijacker.hibernate.SessionFactoryInvocationHandler.invoke(SessionFactoryInvocationHandler.java:33) | Error at com.sun.proxy.$Proxy40.getCurrentSession(Unknown Source) | Error at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:58) | Error at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) | Error at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) | Error at grails.plugin.asyncmail.AsynchronousMailMessage.validate(AsynchronousMailMessage.groovy) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:497) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1432) | Error at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$7.call(ClosureEventListener.java:326) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$7.call(ClosureEventListener.java:316) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:345) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreUpdate(ClosureEventListener.java:316) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreUpdate(EventTriggeringInterceptor.java:166) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:91) | Error at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:123) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) | Error at java.lang.Thread.run(Thread.java:745) 2016-05-20 13:10:59,689 +0530 [ForkJoinPool-10-worker-1] TRACE AsynchronousMailProcessService:104 - Attempt to send the message with id=105. 2016-05-20 13:11:03,414 +0530 [ForkJoinPool-10-worker-1] TRACE AsynchronousMailProcessService:104 - The message with id=105 was sent successfully. | Error Exception in thread "pool-1-thread-14" | Error org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here | Error at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:65) | Error at grails.plugin.hibernatehijacker.hibernate.SessionFactoryInvocationHandler.invoke(SessionFactoryInvocationHandler.java:33) | Error at com.sun.proxy.$Proxy40.getCurrentSession(Unknown Source) | Error at org.codehaus.groovy.grails.orm.hibernate.validation.HibernateDomainClassValidator.validate(HibernateDomainClassValidator.java:58) | Error at org.codehaus.groovy.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:118) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.ValidatePersistentMethod.doInvokeInternal(ValidatePersistentMethod.java:119) | Error at org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod.invoke(AbstractDynamicPersistentMethod.java:63) | Error at org.codehaus.groovy.grails.orm.hibernate.AbstractHibernateGormValidationApi.validate(AbstractHibernateGormValidationApi.groovy:57) | Error at grails.plugin.asyncmail.AsynchronousMailMessage.validate(AsynchronousMailMessage.groovy) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:497) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1432) | Error at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$7.call(ClosureEventListener.java:326) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener$7.call(ClosureEventListener.java:316) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.doWithManualSession(ClosureEventListener.java:345) | Error at org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventListener.onPreUpdate(ClosureEventListener.java:316) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPreUpdate(EventTriggeringInterceptor.java:166) | Error at org.codehaus.groovy.grails.orm.hibernate.EventTriggeringInterceptor.onPersistenceEvent(EventTriggeringInterceptor.java:91) | Error at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151) | Error at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:123) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) | Error at java.lang.Thread.run(Thread.java:745) 2016-05-20 13:11:03,454 +0530 [ForkJoinPool-10-worker-1] TRACE AsynchronousMailProcessService:104 - The message with id=105 was deleted. 2016-05-20 13:11:03,455 +0530 [ForkJoinPool-10-worker-1] DEBUG AsynchronousMailProcessService:128 - Flush the persistence session. 2016-05-20 13:11:03,455 +0530 [ForkJoinPool-10-worker-1] DEBUG AsynchronousMailProcessService:128 - Destroy the persistence session. 2016-05-20 13:11:03,456 +0530 [quartzScheduler_Worker-2] TRACE AsynchronousMailJob:104 - Exiting execute method. Execution time = 3808ms 2016-05-20 13:11:59,646 +0530 [quartzScheduler_Worker-1] TRACE AsynchronousMailJob:104 - Entering execute method. 2016-05-20 13:11:59,657 +0530 [quartzScheduler_Worker-1] TRACE AsynchronousMailJob:104 - Exiting execute method. Execution time = 10ms 2016-05-20 13:12:59,649 +0530 [quartzScheduler_Worker-3] TRACE AsynchronousMailJob:104 - Entering execute method. 2016-05-20 13:12:59,655 +0530 [quartzScheduler_Worker-3] TRACE AsynchronousMailJob:104 - Exiting execute method. Execution time = 6ms 2016-05-20 13:13:06,750 +0530 [quartzScheduler_Worker-4] TRACE ExpiredMessagesCollectorJob:104 - Entering execute method. 2016-05-20 13:13:06,755 +0530 [quartzScheduler_Worker-4] TRACE AsynchronousMailPersistenceService:104 - 0 expired messages were updated. 2016-05-20 13:13:06,757 +0530 [quartzScheduler_Worker-4] TRACE ExpiredMessagesCollectorJob:104 - Exiting execute method. 201

Please advice.

Вынести все валидаторы из блока constraints

Внутри секции constraints объявлены валидаторы, например: mailboxValidator, emailList, atLeastOneRecipientValidator.
Это как-то нагромождает код и вообще кажется что всё свалено в одну кучу.

Я предлагаю их вынести из секции и сделать статическими методами.
Я вот только не понял фокусу с delegate внутри валидатора atLeastOneRecipientValidator, поэтому не стал трогать.

grails 3.3.1 can not work with grails-asynchronous-mail 2.0.0.RC7

Hi,
My Java is Oracle JDK8
I created a empty Grails application with Grails 3.3.1 and add

runtime "org.grails.plugins:async:3.3.1"
compile 'org.grails.plugins:mail:2.0.0.RC6'
compile 'org.grails.plugins:quartz:2.0.12'
compile "org.grails.plugins:asynchronous-mail:2.0.0.RC7"

to the dependencies block in build.gradle file.
When start the grails application, it appear the below errors.
Could you tell me what action I missed ?

Thanks.

`D:\OpenSource\Java\bin\java -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:CICompilerCount=3 -Djline.WindowsTerminal.directConsole=false -Dfile.encoding=UTF-8 -classpath C:\Users\alexji\AppData\Local\Temp\classpath68545.jar org.grails.cli.GrailsCli run-app
|Resolving Dependencies. Please wait...

CONFIGURE SUCCESSFUL

Total time: 3.221 secs
|Running application...
2017-10-03 19:36:00.815 ERROR --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Destroy method on bean with name 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory' threw an exception

java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@363f6148: startup date [Tue Oct 03 19:35:59 CST 2017]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:414)
at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968)
at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1030)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:556)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
at grails.boot.GrailsApp.run(GrailsApp.groovy:387)
at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
at grails.boot.GrailsApp$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at g3_3_1_sample.Application.main(Application.groovy:8)

2017-10-03 19:36:00.848 ERROR --- [ main] o.s.boot.SpringApplication : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsApplicationPostProcessor' defined in g3_3_1_sample.Application: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [grails.boot.config.GrailsApplicationPostProcessor]: Factory method 'grailsApplicationPostProcessor' threw exception; nested exception is org.grails.core.exceptions.GrailsRuntimeException: Failed to introspect class: class grails.plugin.asyncmail.AsynchronousMailAttachment
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at grails.boot.GrailsApp.run(GrailsApp.groovy:83)
at grails.boot.GrailsApp.run(GrailsApp.groovy:387)
at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
at grails.boot.GrailsApp$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at g3_3_1_sample.Application.main(Application.groovy:8)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [grails.boot.config.GrailsApplicationPostProcessor]: Factory method 'grailsApplicationPostProcessor' threw exception; nested exception is org.grails.core.exceptions.GrailsRuntimeException: Failed to introspect class: class grails.plugin.asyncmail.AsynchronousMailAttachment
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 23 common frames omitted
Caused by: org.grails.core.exceptions.GrailsRuntimeException: Failed to introspect class: class grails.plugin.asyncmail.AsynchronousMailAttachment
at grails.core.ArtefactHandlerAdapter.isArtefact(ArtefactHandlerAdapter.java:129)
at grails.core.DefaultGrailsApplication.addOverridableArtefact(DefaultGrailsApplication.java:799)
at org.grails.plugins.AbstractGrailsPluginManager.registerProvidedArtefacts(AbstractGrailsPluginManager.java:310)
at grails.boot.config.GrailsApplicationPostProcessor.performGrailsInitializationSequence(GrailsApplicationPostProcessor.groovy:110)
at grails.boot.config.GrailsApplicationPostProcessor.initializeGrailsApplication(GrailsApplicationPostProcessor.groovy:94)
at grails.boot.config.GrailsApplicationPostProcessor.setApplicationContext(GrailsApplicationPostProcessor.groovy:225)
at grails.boot.config.GrailsApplicationPostProcessor.(GrailsApplicationPostProcessor.groovy:78)
at grails.boot.config.GrailsAutoConfiguration.grailsApplicationPostProcessor(GrailsAutoConfiguration.groovy:68)
at g3_3_1_sample.Application.grailsApplicationPostProcessor(Application.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 24 common frames omitted
Caused by: java.lang.NullPointerException: null
at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1337)
at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1197)
at java.beans.Introspector.getBeanInfo(Introspector.java:426)
at java.beans.Introspector.getBeanInfo(Introspector.java:173)
at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:3313)
at java.security.AccessController.doPrivileged(Native Method)
at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3311)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3288)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:260)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:302)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:883)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:75)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:162)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at grails.plugins.quartz.JobArtefactHandler.isArtefactClass(JobArtefactHandler.groovy:62)
at grails.core.ArtefactHandlerAdapter.isArtefact(ArtefactHandlerAdapter.java:125)
... 38 common frames omitted

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':bootRun'.

Process 'command 'D:\OpenSource\Java\bin\java.exe'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    Error |
    Failed to start server (Use --stacktrace to see the full trace)

Process finished with exit code 1
`

Setting for disabling attachment storing

I want to keep in my DB all the information except the attachments, because they make my DB grow very fast, so having a setting similar to delete:true but only referring to attachments would be great.
I can only see 2 options:

  • adding a new value for the delete property, so it can hold true, false and attachments
  • adding a new property, deleteAttachments, which will be false by default

Can store the mail encrypted?

Well not really a bug, more of a feature suggest. Is it possible to store the mail encrypted in DB? The project I am working on currently, has some private information and it would be ideal to store the mail content in encrypted format. Is it possible currently?

Documentation

Hi, Kefir,

Could you copy short documentation from plugin page http://grails.org/plugin/asynchronous-mail to README.md file?
It should allow anyone to contribute for this brief documentation.

Also, the create-asynchronous-mail-controller command is not described anywhere!

Warn message in the log

2017-01-24 16:43:50,509 WARN grails.util.GrailsUtil - [WARNING] Property [markDeleteAttachments] of domain class grails.plugin.asyncmail.AsynchronousMailMessage has type [boolean] and doesn't support constraint [nullable]. This constraint will not be checked during validation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.