Grails Backup email for grails mail plugin

116 views Asked by At

im using grails 2.4.5 and thinking of a way to set a backup email if ever the main email failed to send.

im looking for a way to determine if the email was sent successfully but in doesnt include in the documentation https://grails.org/plugin/mail?skipRedirect=true

i tried using try catch but i doesnt work(especially in the build version).

here is my service function

class EmailService {

    def grailsApplication
    def mailService

    def sendMail(Map dataMap){

        Boolean sent = true
        // Store the default mail settings in variables
        def defaultFrom = grailsApplication.config.grails.mail.default.from
        String defaultHost = grailsApplication.config.grails.mail.host
        def defaultPort = grailsApplication.config.grails.mail.port
        String defaultUsername = grailsApplication.config.grails.mail.username
        String defaultPassword = grailsApplication.config.grails.mail.password
        def defaultProps = grailsApplication.config.grails.mail.props

        if(!dataMap?.model) dataMap.model = [:]
        if(dataMap?.to?.getClass() == String) dataMap.to = [dataMap?.to]

        try {
            mailService.sendMail {
                to(dataMap?.to?.toArray())
                subject(dataMap?.subject)
                body(view: dataMap?.view, model: dataMap?.model)
            }
        }
        catch (Exception e) { // Change the properties here; send the email
            def backUpMail = grailsApplication.config.grails.backUpMail

            grailsApplication.config.grails.mail.default.from = backUpMail.default.from
            grailsApplication.config.grails.mail.host = backUpMail.host
            grailsApplication.config.grails.mail.port = backUpMail.port
            grailsApplication.config.grails.mail.username = backUpMail.username
            grailsApplication.config.grails.mail.password = backUpMail.password
            grailsApplication.config.grails.mail.props = backUpMail.props

            try {
                mailService.sendMail {
                    to(dataMap?.to?.toArray())
                    subject(dataMap?.subject)
                    body(view: dataMap?.view, model: dataMap?.model)
                }
            } catch (Exception err) {
                sent = false
            }

        }
        // Set the original settings back
        finally {
            grailsApplication.config.grails.mail.host = defaultHost
            grailsApplication.config.grails.mail.port = defaultPort
            grailsApplication.config.grails.mail.default.from = defaultFrom
            grailsApplication.config.grails.mail.username = defaultUsername
            grailsApplication.config.grails.mail.password = defaultPassword
            grailsApplication.config.grails.mail.props = defaultProps
        }

        return sent
    }

}

i was able to catch the exception when I disabled my internet connection but it doesnt work on other errors like authentication error, etc.

ang another problem im experiencing is when the connection was cut for the first email(in the build version). it stops on DEBUG SMTP: trying to connect to host... its not going to enter the catch block because no error occured

0

There are 0 answers