VirtualBox

工单变更的电子邮件通知

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,则与 US-ASCII 字符宽度相同。大多数用户预期如此。如果为 double,则为 US-ASCII 字符宽度的两倍。CJK(中日韩)用户预期如此。

single
batch_subject_template

类似于 ticket_subject_template,但用于批量修改。(自 1.0 起

${prefix} 批量修改: ${tickets_descr}
default_format.email

分发电子邮件通知的默认格式。

text/plain
email_address_resolvers

逗号分隔的电子邮件解析器组件列表,按其调用顺序排列。如果某个电子邮件地址被解析,则其余解析器将不会被调用。

SessionEmailResolver
email_sender

实现 IEmailSender 的组件名称。

通知系统使用此组件发送电子邮件。Trac 目前提供 SmtpEmailSender 用于连接 SMTP 服务器,以及 SendmailEmailSender 用于运行 sendmail 兼容的可执行文件。

SmtpEmailSender
ignore_domains

逗号分隔的域名列表,不应被视为电子邮件地址的一部分(用于带有 Kerberos 域的用户)。

(无默认值)
message_id_hash

用于创建唯一 Message-ID 头的哈希算法。(自 1.0.13 起

md5
mime_encoding

指定电子邮件的 MIME 编码方案。

支持的值包括:none,默认值,如果文本是纯 ASCII 则使用 7 位编码,否则使用 8 位。base64,适用于任何类型的内容,但可能与敏感的反垃圾邮件/反病毒引擎引起一些问题。qpquoted-printable,如果无法使用 8 位编码,则最适合欧洲语言(比 base64 更紧凑)。

none
sendmail_path

sendmail 可执行文件的路径。

sendmail 程序必须接受 -i-f 选项。

sendmail
smtp_always_bcc

始终发送通知的电子邮件地址的逗号分隔列表。地址不公开(密送:Bcc:)。

(无默认值)
smtp_always_cc

始终发送通知的电子邮件地址的逗号分隔列表。所有收件人都可以看到地址(抄送:Cc:)。

(无默认值)
smtp_default_domain

未指定主机/域名的地址要附加的默认主机/域名。完全限定的地址不会被修改。对于在用户设置中找不到电子邮件地址的所有用户名/登录名,都会附加默认域名。

(无默认值)
smtp_enabled

启用电子邮件通知。

disabled
smtp_from

通知电子邮件中使用的发件人地址。

smtp_fromsmtp_replyto 至少必须设置一个,否则 Trac 将拒绝发送通知邮件。

trac@localhost
smtp_from_author

使用变更的作者作为通知电子邮件的发件人(例如,新工单的报告人、评论的作者)。如果作者未设置电子邮件地址,则改用 smtp_fromsmtp_from_name。(自 1.0 起

disabled
smtp_from_name

通知电子邮件中使用的发件人姓名。

(无默认值)
smtp_password

用于 SMTP 服务器认证的密码。

(无默认值)
smtp_port

用于电子邮件通知的 SMTP 服务器端口。

25
smtp_replyto

通知电子邮件中使用的回复地址(Reply-To)。

smtp_fromsmtp_replyto 至少必须设置一个,否则 Trac 将拒绝发送通知邮件。

trac@localhost
smtp_server

用于电子邮件通知的 SMTP 服务器主机名。

localhost
smtp_subject_prefix

添加到通知电子邮件主题行开头的文本。

如果未定义此设置,则使用 [$project_name] 作为前缀。如果不需要前缀,则指定一个空选项将禁用它。

__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 或使用本地投递。另请参阅 smtp_default_domain。请勿在公共 SMTP 服务器上使用此选项。

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

其中 userpassword 匹配现有的 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 编码。


另请参阅:TracTicketsTracIniTracGuideTracDev/NotificationApi

最后修改 2 年前 最后修改于 2023/06/02 10:32:55 AM
注意: 查看 TracWiki 获取使用维基的帮助。

© 2025 Oracle 支持 隐私 / 请勿出售我的信息 使用条款 商标政策 自动化访问礼仪