工单变更的电子邮件通知
Trac 支持通过电子邮件通知工单变更。
电子邮件通知有助于让用户及时了解感兴趣的工单,也提供了一种便捷的方式将所有工单变更发布到专用邮件列表。
默认情况下禁用,通知可以在 trac.ini 中激活和配置。
接收通知邮件
当报告新工单或添加评论时,在 报告人、受让人/所有者 或 抄送 字段中输入有效的电子邮件地址或您的 Trac 用户名。当工单发生变更时,Trac 可能会向您发送电子邮件,具体取决于您的通知偏好设置方式。
权限组也可以输入到抄送(CC)字段中,以通知该组的所有成员。
如何使用您的用户名接收通知邮件
要接收通知邮件,您可以输入完整的电子邮件地址或您的 Trac 用户名。要通过简单的用户名或登录名接收通知,您需要在您的偏好设置中指定一个有效的电子邮件地址。
或者,可以在 TracIni 文件中设置一个默认域名(smtp_default_domain
),详见下面的配置选项。在这种情况下,默认域名将附加到用户名后面,这对于“内网”类型的安装可能很有用。
当使用 apache 和 mod_kerb 进行 Kerberos / Active Directory 认证时,用户名会是(username@EXAMPLE.LOCAL
)的形式。为了避免这被解释为电子邮件地址,请将 Kerberos 域添加到(ignore_domains
)中。
工单附件通知
从 1.0.3 版本开始,当工单附件被添加或删除时,Trac 将发送通知。通常,附件通知在环境中默认是启用的。要禁用某个环境的附件通知,必须禁用 TicketAttachmentNotifier
组件。
[components] trac.ticket.notification.TicketAttachmentNotifier = disabled
配置 SMTP 通知
重要:必须配置 [trac] base_url 选项,以便正确生成通知消息中的链接。
配置选项
以下是 trac.ini 中 [notification]
部分的可用选项
[notification]
admit_domains | 逗号分隔的域名列表,应被视为电子邮件地址的有效域名(如 localdomain)。 | (无默认值) |
ambiguous_char_width | 通知邮件表格中应使用的模糊字符宽度。 如果为 | single |
batch_subject_template | 类似于 | ${prefix} 批量修改: ${tickets_descr} |
default_format.email | 分发电子邮件通知的默认格式。 | text/plain |
email_address_resolvers | 逗号分隔的电子邮件解析器组件列表,按其调用顺序排列。如果某个电子邮件地址被解析,则其余解析器将不会被调用。 | SessionEmailResolver |
email_sender | 实现 通知系统使用此组件发送电子邮件。Trac 目前提供 | SmtpEmailSender |
ignore_domains | 逗号分隔的域名列表,不应被视为电子邮件地址的一部分(用于带有 Kerberos 域的用户)。 | (无默认值) |
message_id_hash | 用于创建唯一 Message-ID 头的哈希算法。(自 1.0.13 起) | md5 |
mime_encoding | 指定电子邮件的 MIME 编码方案。 支持的值包括: | none |
sendmail_path | sendmail 可执行文件的路径。 sendmail 程序必须接受 | sendmail |
smtp_always_bcc | 始终发送通知的电子邮件地址的逗号分隔列表。地址不公开(密送:Bcc:)。 | (无默认值) |
smtp_always_cc | 始终发送通知的电子邮件地址的逗号分隔列表。所有收件人都可以看到地址(抄送:Cc:)。 | (无默认值) |
smtp_default_domain | 未指定主机/域名的地址要附加的默认主机/域名。完全限定的地址不会被修改。对于在用户设置中找不到电子邮件地址的所有用户名/登录名,都会附加默认域名。 | (无默认值) |
smtp_enabled | 启用电子邮件通知。 | disabled |
smtp_from | 通知电子邮件中使用的发件人地址。
| trac@localhost |
smtp_from_author | 使用变更的作者作为通知电子邮件的发件人(例如,新工单的报告人、评论的作者)。如果作者未设置电子邮件地址,则改用 | disabled |
smtp_from_name | 通知电子邮件中使用的发件人姓名。 | (无默认值) |
smtp_password | 用于 SMTP 服务器认证的密码。 | (无默认值) |
smtp_port | 用于电子邮件通知的 SMTP 服务器端口。 | 25 |
smtp_replyto | 通知电子邮件中使用的回复地址(Reply-To)。
| trac@localhost |
smtp_server | 用于电子邮件通知的 SMTP 服务器主机名。 | localhost |
smtp_subject_prefix | 添加到通知电子邮件主题行开头的文本。 如果未定义此设置,则使用 | __default__ |
smtp_user | 用于 SMTP 服务器认证的用户名。 | (无默认值) |
ticket_subject_template | 一个 Jinja2 文本模板片段,用于获取通知主题。 模板变量在TracNotification页面上有文档说明。 | ${prefix} #${ticket.id}: ${summary} |
use_public_cc | 收件人(To)和抄送(Cc)字段中的地址对所有收件人可见。 如果禁用此选项,收件人将被放入密送(Bcc)列表。 | disabled |
use_short_addr | 允许不带主机/域名的电子邮件地址(即仅用户名)。 SMTP 服务器应接受这些地址,并附加一个 FQDN 或使用本地投递。另请参阅 | disabled |
use_tls | 使用 SSL/TLS 通过 SMTP 发送通知。 | disabled |
配置示例 (SMTP)
[notification] smtp_enabled = true smtp_server = mail.example.com smtp_from = notifier@example.com smtp_replyto = myproj@projects.example.com smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
配置示例 (sendmail
)
[notification] smtp_enabled = true email_sender = SendmailEmailSender sendmail_path = /usr/sbin/sendmail smtp_from = notifier@example.com smtp_replyto = myproj@projects.example.com smtp_always_cc = ticketmaster@example.com, theboss+myproj@example.com
订阅者配置
默认订阅在 [notification-subscriber] 部分中配置。
[notification-subscriber]
通知订阅由插件控制。所有 INotificationSubscriber
组件都负责此功能。这些组件可能允许通过 trac.ini
文件中的此部分进行配置。
有关更多详细信息,请参阅 TracNotification。
可用订阅者
订阅者 | 描述 |
---|---|
AlwaysEmailSubscriber | |
CarbonCopySubscriber | 我在抄送(CC)字段中列出的工单被修改 |
NewTicketSubscriber | 任何工单被创建 |
TicketOwnerSubscriber | 我拥有的工单被创建或修改 |
TicketPreviousUpdatersSubscriber | 我之前更新过的工单被修改 |
TicketReporterSubscriber | 我报告的工单被修改 |
TicketUpdaterSubscriber | 我更新了一个工单 |
每个用户都可以在其通知偏好设置中覆盖这些默认值。
例如,要取消订阅自己更改和评论的通知,应在其他订阅规则上方添加“从不通知:我更新了一个工单”规则。
等号(=
)左侧的订阅规则名称可以是任何内容,在此配置文件之外没有意义。等号(=
)右侧的订阅者名称必须是上表中列出的订阅者之一。
可以配置默认订阅的以下属性
.distributor
(默认:email
)- 其他值需要插件。例如
on-site
需要 th:OnSiteNotificationsPlugin。
- 其他值需要插件。例如
.priority
(默认:100
)- 较小的值会覆盖较大的值。
- 如果您使用
0
,则用户将无法覆盖此规则。
.adverb
(默认:always
)never
可用于禁用其他具有更高值的订阅规则。
.format
(默认:text/plain
)- 其他值需要插件。例如
text/html
需要 th:TracHtmlNotificationPlugin。
- 其他值需要插件。例如
配置示例 (默认订阅)
[notification-subscriber] always_notify_owner = TicketOwnerSubscriber always_notify_owner.distributor = email always_notify_owner.priority = 100 always_notify_owner.adverb = always always_notify_owner.format = text/plain always_notify_previous_updater = TicketPreviousUpdatersSubscriber never_notify_updater = TicketUpdaterSubscriber never_notify_updater.adverb = never never_notify_updater.priority = 0 notify_cc_html = CarbonCopySubscriber notify_cc_html.format = text/html
自定义电子邮件主题
电子邮件主题可以通过 ticket_subject_template
选项进行自定义,该选项包含一个 Genshi 文本模板片段。默认值为
${prefix} #${ticket.id}: ${summary}
模板中提供以下变量
changes
:工单变更(由 Ticket.get_change 准备)。env
:项目环境(参见 env.py)。prefix
:在smtp_subject_prefix
中定义的前缀。summary
:工单摘要,如果摘要被编辑,则显示旧值。ticket
:工单模型对象(参见 model.py)。可以通过在字段名后附加一个点来引用单个工单字段,例如${ticket.milestone}
。
自定义电子邮件内容
通知电子邮件内容是根据 trac/ticket/templates
中的 ticket_notify_email.txt
生成的。您可以通过将自己的 ticket_notify_email.txt
版本添加到环境的模板目录来添加。默认值为
${ticket_body_hdr} ${ticket_props} # if ticket.new: ${ticket.description} # else: # if changes_body: ${_('Changes (by %(author)s):', author=change.author)} ${changes_body} # endif # if changes_descr: # if not changes_body and not change.comment and change.author: ${_('Description changed by %(author)s:', author=change.author)} # endif ${changes_descr} -- # endif # if change.comment: ${_('Comment:') if changes_body else _('Comment (by %(author)s):', author=change.author)} ${change.comment} # endif # endif ${'-- '} ${_('Ticket URL: <%(link)s>', link=ticket.link)} ${project.name} <${project.url or abs_href()}> ${project.descr}
有关其他模板自定义方法,请参阅 cookbook。
电子邮件示例
#42: testing ---------------------------+------------------------------------------------ Id: 42 | Status: assigned Component: report system | Modified: Fri Apr 9 00:04:31 2004 Severity: major | Milestone: 0.9 Priority: lowest | Version: 0.6 Owner: anonymous | Reporter: jonas@example.com ---------------------------+------------------------------------------------ Changes: * component: changeset view => search system * priority: low => highest * owner: jonas => anonymous * cc: daniel@example.com => daniel@example.com, jonas@example.com * status: new => assigned Comment: I'm interested too! -- Ticket URL: <http://example.com/trac/ticket/42> My Project <http://myproj.example.com/>
使用 GMail 作为 SMTP 中继主机
使用以下配置片段
[notification] smtp_enabled = true use_tls = true mime_encoding = base64 smtp_server = smtp.gmail.com smtp_port = 587 smtp_user = user smtp_password = password
其中 user 和 password 匹配现有的 GMail 账户,即您用来登录 https://gmail.com 的账户。
或者,您可以使用 smtp_port = 25
。
您不应使用 smtp_port = 465
。这样做可能会导致您的工单提交死锁。端口 465 保留给 SMTPS 协议,Trac 不支持该协议。有关详细信息,请参见 #7107。
故障排除
如果通知不起作用,请检查日志以查找错误消息。
通知错误并非总是通过网页界面报告,因此提交更改或创建工单的用户可能不会收到通知失败的消息。Trac 管理员需要查看日志以查找错误消息和跟踪信息。
权限拒绝错误
典型错误消息
... File ".../smtplib.py", line 303, in connect raise socket.error, msg error: (13, 'Permission denied')
此错误通常来自服务器上的安全设置:许多 Linux 发行版不允许网页服务器(Apache 等)向本地 SMTP 服务器发送电子邮件。
许多用户在手动尝试联系 SMTP 服务器成功时感到困惑
telnet localhost 25
这是因为普通用户可以连接到 SMTP 服务器,但网页服务器不能。
sudo -u www-data telnet localhost 25
在这种情况下,您需要配置您的服务器,以便网页服务器被授权发布到 SMTP 服务器。实际设置取决于您的 Linux 发行版和当前的安全策略。您可以在 Trac 邮件列表存档中找到帮助。
相关邮件列表(ML)主题
适用于 Fedora 10 中的 SELinux
$ setsebool -P httpd_can_sendmail 1
疑似垃圾邮件错误
某些 SMTP 服务器可能会拒绝 Trac 发送的通知电子邮件。
默认的 Trac 配置使用 Base64 编码向收件人发送电子邮件。整个电子邮件正文都被编码,这有时会在敏感的电子邮件服务器上触发误报垃圾邮件检测。在这种情况下,请使用 mime_encoding
选项将默认编码更改为“quoted-printable”。
引用可打印(Quoted printable)编码对于使用拉丁字符集的语言效果更好。对于亚洲字符集,请坚持使用 Base64 编码。