Pages

Tuesday, July 9, 2013

Configure GMAIL in grails mail plugin

Configure GMAIL in  grails mail plugin

I am using acegi (0.5.3), mail (1.0-SNAPSHOT) plugin in GRAILS (1.3.6)

For Mail plugin  refer here, http://grails.org/plugin/mail 

Application was configured to use the settings from SecurityConfig.groovy

The code looks as follows.

import in.cdac.chn.cloudportal.Authentication.User

security {

    // see DefaultSecurityConfig.groovy for all settable/overridable properties
    def authenticateService  
    active = true

    loginUserDomainClass = "in.cdac.chn.cloudportal.Authentication.User"
    authorityDomainClass = "in.cdac.chn.cloudportal.Authentication.Role"
    requestMapClass = "in.cdac.chn.cloudportal.Authentication.Requestmap"
    defaultRole='ROLE_USER'
    algorithm = "MD5"
    cacheUsers = false
   
    useMail=true
    mailHost='smtp.domain.in'
    mailUsername=null
    mailPassword=null
    mailProtocol='smtp'
    mailFrom=" Cloud Portal<Somebody@domain.com>"
    mailPort=25
    javaMailProperties=null
    AdminMail= Cloud Portal<Somebody@domain.com>"
   
    useSecurityEventListener = true

    onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
           
           
        //def principal =
        User.withTransaction {
            def user = User.findById(appCtx.authenticateService.userDomain().id)
            user.attach()
            user.lastLoggedIn=new java.util.Date().getTime()
           
            if(user.save()){
            }
            else{
              
            }
        }
    }
}

My requirement is to take the configuration specified in Config.groovy.
After searching , finally I got a solution for the requirement.
I referred this link,

http://stackoverflow.com/questions/3664032/grails-mail-plugin-not-working



My Config.groovy looks as follows.

grails {
   mail {
     host = "smtp.gmail.com"
     port = 465
     username = "some@gmail.com"
     password = "password"
     mailProtocol="smtp"
     props = ["mail.smtp.auth":"true",                       
              "mail.smtp.socketFactory.port":"465",
              "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
              "mail.smtp.socketFactory.fallback":"false"]

    }
}


I modified the SecurityConfig.groovy as follows.

import in.cdac.chn.cloudportal.Authentication.User
import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH


security {

    // see DefaultSecurityConfig.groovy for all settable/overridable properties
    def authenticateService  
    active = true

    loginUserDomainClass = "in.cdac.chn.cloudportal.Authentication.User"
    authorityDomainClass = "in.cdac.chn.cloudportal.Authentication.Role"
    requestMapClass = "in.cdac.chn.cloudportal.Authentication.Requestmap"
    defaultRole='ROLE_USER'
    algorithm = "MD5"
    cacheUsers = false
   
    useMail=true
   

    println "------------------------------------------------------------------"
    println  "Time of Deployment of Portal -> " + new java.util.Date().toString()
    println "-----------------------------------------------------------------"
   
    mailHost=CH.config.grails.mail.host
    println "MailHost -> ${mailHost}"
   
    mailUsername=CH.config.grails.mail.username
    println "mailUsername-> ${mailUsername}"
   
    mailPassword=CH.config.grails.mail.password

   
    mailProtocol=CH.config.grails.mail.mailProtocol
    println "mailProtocol-> ${mailProtocol}"
   
    mailFrom=CH.config.grails.mail.username
    println "mailFrom-> ${mailFrom}"
   
    mailPort=CH.config.grails.mail.port
    println "mailPort-> ${mailPort}"
   
    javaMailProperties=CH.config.grails.mail.props
   
    println "javaMailProperties-> ${javaMailProperties}"
   
    AdminMail=CH.config.grails.mail.default.from
    println "AdminMail-> ${AdminMail}"
   
    println "-----------------------------------------------------------------"
    useSecurityEventListener = true

    onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
           
           
        //def principal =
        User.withTransaction {
            def user = User.findById(appCtx.authenticateService.userDomain().id)
            user.attach()
            user.lastLoggedIn=new java.util.Date().getTime()
           
            if(user.save()){
            }
            else{
              
            }
        }
    }
}
That is it!, It worked. I spent nearly 2 hours for this (: ( )

No comments:

Post a Comment