在这里记一下,注册时发送出email就行了,至于如果运行配置和运行acegi在官网上就能查到。
useMail = true
mailHost = "smtp.sina.com"
mailUsername = "xxxxxxx"
mailPassword = "xxxxxxx"
mailProtocol = "smtp"
mailFrom = "xxxxxxx@sina.com"
mailPort = 25
javaMailProperties=["mail.smtp.auth":"true","mail.smtp.socketFactory.fallback":"false"]
defaultRole="user"
defaultTargetUrl = "/login/main.gsp"
其中javaMailProperties=["mail.smtp.auth":"true","mail.smtp.socketFactory.fallback":"false"]是关键,spring的email默认不进行认证的,如果只加"mail.smtp.auth":"true",也不行,问了下网友,加上后面的属性就行了。
在这里也学习到grails的service归约规则:
8. The Service Layer
Grails服务的一个重要方面是,有能力利用Spring 框架的依赖注入能力。
Grails支持 "依赖注入通过规约". 换句话说,你可以使用一个属性名表示的一个服务的类名,自动把他们注入到 controllers, tag
libraries,等等。
作为示例,给定的服务名为BookService
,
如果你像下面这样在controller中放置一个名为bookService
的属性:
class BookController {
def bookService
…
}
在这种情况下,Spring 容器将自动注入一个基于它自己配置作用域的服务实体。所有的依赖注入是通过名字的; Grails
不支持类型注入。你也可以像下面这样指定类型:
class AuthorService {
BookService bookService
}
不过, 存在副作用,即在开发模式下BookService
的改变会在加载时抛出一个错误。
依赖注入与服务
你可以使用相同的技术在一个服务中注入另一个服务。如果说,你的AuthorService
需要一个
BookService
, 可以像下面这样声明 AuthorService
:
class AuthorService {
def bookService
}
依赖注入与Domain类
你甚至可以在domain类中注入服务,这可以帮助开发出各种丰富的domain:
class Book {
…
def bookService
def buyBook() {
bookService.buyBook(this)
}
}
天苍苍,野茫茫,风吹草底见牛羊