2012-09-18 45 views
3

我只是想驗證控制器中的電子郵件地址,我認爲這很簡單。我做的方法如下:控制器中的電子郵件驗證Grails

def emailTheAttendees(String email) { 
    def user = lookupPerson() 
    if (!email.isEmpty()) { 
     def splitEmails = email.replaceAll("//s+","").split(",") 
     splitEmails.each { 
      def String currentEmail = it 
      sendMail { 
       to currentEmail 
       System.out.println("what's in to address:"+ currentEmail) 
       subject "Your Friend ${user.username} has invited you as a task attendee" 
       html g.render(template:"/emails/Attendees") 
      } 
     } 
    } 

} 

這工作,併發送電子郵件到有效的電子郵件地址:

def emailValidCheck(String emailAddress) { 
    EmailValidator emailValidator = EmailValidator.getInstance() 
    if (!emailAddress.isAllWhitespace() || emailAddress!=null) { 
     String[] email = emailAddress.replaceAll("//s+","").split(",") 
     email.each { 
      if (emailValidator.isValid(it)) { 
      return true 
      }else {return false} 
     } 
    } 
} 

這正與Sendmail的功能,我的代碼是在這裏使用,但是如果我隨意放置一些不是地址的東西,只會破壞sendMail異常。我不明白爲什麼它沒有正確驗證,甚至進入了正在保存方法中調用的emailTheAttendees()方法。

+3

我看到了一個電子郵件正則表達式一次。它像4頁長。 –

+0

您的email.each閉包中的返回僅返回閉包的當前迭代。 – wwwclaes

+0

@JamesKleeh - 這可能只涵蓋_common_個案! – cdeszaq

回答

3

我建議使用constraintsa command object來實現這一點。例如:

Command對象:

@grails.validation.Validateable 
class YourCommand { 
    String email 
    String otherStuffYouWantToValidate 

    static constraints = { 
     email(blank: false, email: true) 
     ... 
    } 
} 

這樣稱呼它在你的控制器:

class YourController { 
    def yourAction(YourCommand command) { 
     if (command.hasErrors()) { 
      // handle errors 
      return 
     } 

     // work with the command object data 
    } 
} 
+2

電子郵件問題:true表示它不能識別許多新的tld。 –

+1

那麼應該在Grails中解決。你提交了一個錯誤嗎?如果我沒有記錯,Grails使用apache commons進行電子郵件驗證,所以升級應該足夠了。 – Nicholas