3

每当用户创建票证或票证更新时,我都需要收到电子邮件通知。Fossil 有一个叫做票钩的东西,可以在 UI 中从admin -> transfers -> Ticket. 我从这里尝试了以下代码:

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 代码用于发送可以共享的电子邮件通知?

4

2 回答 2

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
}

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


或者,您可以制作一个脚本来侦听您推送通知以使用示例脚本并使用它的端口。不过,这会更容易被滥用;不建议。

于 2014-05-20T17:52:05.073 回答
0

我只是遵循 IFTTT 方法,我们使用 IFTTT 服务将 Fossil scm 的 rss 提要连接到 Gmail 频道。有效。

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

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

于 2014-07-28T12:10:55.817 回答