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