通過Groovy實現郵件通知(其實是轉發到ANT)十分容易,先上代碼:
?1?ant?=?new?AntBuilder()
?2?
?3?def?mail(subject,?body,?attachment?=?[dir:".",files:[]])?{
?4?????ant.mail(mailhost:"mail.com",?mailport:"1025",?user:"mailer",?password:"123",?subject:"${subject}")?{
?5?????????from(address:"nobody@mail.com")
?6?????????to(address:"nobody@mail.com")
?7?????????message("${body}")
?8?????????attachments()?{
?9?????????????if?(attachment.files)?{
10?????????????????fileset(dir:"${attachment.dir}")?{
11?????????????????????attachment.files.each?{
12?????????????????????????include(name:it)
13?????????????????????}
14?????????????????}
15?????????????}
16?????????}
17?????}
18?}
19?
20?attachment?=?[dir:"/tmp",?files:["some.properties","some.sql"]]
21?mail("Test?mail?message?at?${new?Date()}",?"This?is?a?test?message.",?attachment)
22?
這個簡單的例子很好的展示了如下Groovy特性:
1- Groovy腳本可以不需要定義任何class,方法定義和實際調用也可以混在一起,十分順手。
2- 定義變量不需要指定類型,只要賦值即可,不過運行期依然是強類型。
3- 方法參數可以有默認值。
4- List和Map的構建直接在語義層面提供支持,如[a:1,b:2]和[1,2]。
5- GString使得我們可以方便的在String中引用變量甚至是表達式,如"${a.b.c}"或"${new Date()}"。
6- 邏輯判斷在true/false基礎上有所擴展,[](0個元素的List)和null均做false處理。
7- Closure支持,方便我們在外圍代碼處“當場”指定處理邏輯,省去了大多數在Java中需要匿名內部類來處理的麻煩,如attachment.files.each { .... },只有一個傳入參數時,可直接用it指代。
8- 與ANT的無縫集成,以及對Builder模式的良好支持,使得我們可以寫出上述初看上去有些不可思議的代碼。
P.S. 雖然Groovy自己已經bundle了ANT,可以直接使用其中的絕大多數功能,不過為了調用ANT的mail task,還需要將ANT發行版中帶有的ant-javamail.jar以及JavaMail API對應的jar包(可以從Sun網站下載)加到classpath。如果你的JDK版本低于6.0,還需要activation.jar。