在Fossil修改机票时发送电子邮件通知

时间:2014-05-20 00:05:15

标签: version-control tcl bug-tracking fossil

每当用户创建故障单或故障单更新时,我都需要收到电子邮件通知。 Fossil有一个名为ticket hook的东西,可以在UI admin -> transfers -> Ticket中访问。我尝试了here中的以下代码:

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代码?

2 个答案:

答案 0 :(得分:4)

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 you@example.com -servers $smtp_host
    mime::finalize $t
}

您需要传递更多字段,插入更多逻辑来生成消息,选择将消息发送给谁(邮件列表是一个好的开始!)等等,但是这样做了这一切的核心。您可能还需要将包含Tcllib包的目录显式lappend到全局auto_path;该脚本将非常特定于您的配置。


或者您可以制作一个侦听该端口的脚本,将通知推送到使用示例脚本并使用该脚本。但这会更容易被滥用; 不推荐。

答案 1 :(得分:0)

我只是遵循IFTTT方法,我们使用IFTTT服务将Fossil scm的rss feed连接到Gmail频道。它奏效了。

请参阅: http://lists.fossil-scm.org:8080/pipermail/fossil-users/2013-August/013330.html https://ifttt.com/recipes/109526

https://ifttt.com/recipes/109526 - >用于新票证的电子邮件通知,可以修改(更改关键字或简单短语)以发送任何故障单修改的电子邮件。