2014-05-20 33 views
3

無論用戶何時創建票證或票證更新,我都需要收到電子郵件通知。化石有一個叫做鉤子的東西,可以從admin -> transfers -> Ticket的UI中訪問。我曾嘗試下面的代碼從hereFossil票務修改時的電子郵件通知

set project simpletask 
tclInvoke package require http 
query {SELECT title, status 
     FROM ticket 
     WHERE tkt_uuid=$uuid} { 
    set title [tclInvoke http::formatQuery $title] 
    http -asynchronous -- http://127.0.0.1/cgi-bin/tkt-hook?uuid=$uuid&title=$title&status=$status&project=$project 
} 

我期望一旦執行該代碼票被修改,但我真的不知道如何修改它來發送電子郵件,以及如何我可以指定電子郵件應發送給誰。

有沒有人有一個示例TH1代碼發送可分享的電子郵件通知?

回答

3

TH1無法自己做到這一點;它太有限了(故意如此)。如果你有在TH1啓用的Tcl調用(這不是默認啓用),那麼你可以使用類似:

### THIS IS TH1 ### 
tclInvoke source /some/dir/scripts/emailsender.tcl 
query {SELECT title, status 
     FROM ticket 
     WHERE tkt_uuid=$uuid} { 
    tclInvoke send_email $title $status $uuid 
} 

然後你只需要確保你的emailsender.tcl腳本(在上述位置)定義一個程序send_email,你想要什麼。你說的是這樣的:

### THIS IS TCL ### 
package require mime 
package require smtp 

# Where to route messages through; IMPORTANT! 
variable smtp_host smtp.example.com 

proc send_email {title status uuid} { 
    variable smtp_host 
    set t [mime::initialize -canonical text/plain \ 
      -string "state is now $status for $uuid"] 
    mime::setheader $t Subject "Change to '$title'" 
    smtp::sendmessage $t -recipients [email protected] -servers $smtp_host 
    mime::finalize $t 
} 

你需要在更多的領域傳球,插入更多的邏輯來生成消息,選擇向誰發送消息到(郵件列表是一個好的開始! )等等,但這是它的核心。您可能還需要明確lappend包含Tcllib軟件包的目錄到全球auto_path;該腳本將對您的配置非常具體。


或者你可以把監聽到你推通知使用示例腳本和工作與該端口的腳本。儘管這會更容易被濫用;不建議使用

+0

@Donald Fellows:您的解決方案應該可以工作,但是我遇到了auto_path問題。我試過以下任一種: 'set auto_path [linsert $ auto_path 0/pathtotcllib /]'and 'lappend auto_path [file join $ env(HOME)/ pathtotcllib /]' – Ari