支持中心的即时邮件列表管理器
项目描述
介绍
Amane 是一个即时邮件列表管理员。它的基本思想来自 QuickML(https://github.com/masui/QuickML),但并不相同。QuickML 是一个常见的易于使用的邮件列表管理器,但 Amane 已被开发为通过电子邮件管理请求。所以Amane是一种类似Redmine的票务管理系统。
QuickML 和 Amane 之间的区别
创建新邮件列表的邮件目的地
QuickML:第一个邮件帐户将用于后续发帖。
Amane:它有一个特定的邮件帐户来创建新的。收到邮件后,将创建并使用一个新的邮件帐户。
在 Amane,您可以定义员工自动注册新的邮件列表。它们不能通过成员删除邮件删除。
Amane 支持多租户。每个租户都有一个邮件帐户来创建邮件列表、主题前缀、工作人员、各种消息模板。
在 Amane 上,每个帖子都会有一个系统消息作为附件。它可以包含基本的邮件列表用法和成员列表。
Redmine和Amane之间的区别
Redmine 是基于 Web 的,但 Amane 是基于邮件的。
Redmine 用户可以自定义工单状态,但 Amane 用户不能。
Redmine 用户可以定义票证的重要性,但 Amane 用户不能。
Redmine 用户可以定义工单工作流程,但 Amane 用户不能。
如何使用天音
- 创建新工单
将邮件发送到特定的邮件地址(例如,询问@ example.com * 1)以创建新邮件。Amane 将使用自己的邮件地址(例如 ml-000001 @example.com)创建一个新的邮件列表,并将初始邮件转发给成员,包括收件人:、抄送:和发件人:除了 *1。
- 发新帖
向邮件列表地址发送邮件(例如ml -000001 @ example.com)。
- 注册新会员
将新地址为 Cc: 的邮件发送到邮件列表地址。
- 注销会员
向邮件列表地址发送一封带有空主题:和要删除的地址作为抄送:的邮件。
- 关闭票
向邮件列表地址发送一封带有“主题:关闭”的邮件。
如何安装天籁
运行以下命令:
# yum install mongodb-server # pip install amane
如何配置 Amane
Amane 有 2 个配置文件。
Amane 配置文件 (/etc/amane/amane.conf)
如下所示的 YAML 文件:
db_name: amane db_url: mongodb://localhost/ relay_host: localhost relay_port: 25 listen_address: 192.168.0.1 listen_port: 25 log_file: /var/log/amane.log domain: example.com
db_url, db_name ... MongoDB 的 URI 和 DB 名称
relay_host, relay_port ... 发送帖子的外部 SMTP 服务器(中继主机)的 IP 地址和端口号
listen_address, listen_port ... amane_smptd 将监听的 IP 地址和端口号
log_file ... Amane 命令使用的日志文件的路径
domain ... amane_smtpd 将处理的邮件地址的域名
租户配置文件
如下所示的 YAML 文件:
admins:
- staff1@staff.example.com
- staff2@staff.example.com
charset: iso-2022-jp
ml_name_format: ml-%06d
new_ml_account: ask
days_to_close: 7
days_to_orphan: 7
readme_msg: |
Please send posts to {{ ml_address }}.
To register new members: send a post with their mail addresses as Cc:
To unregister members: send a post with their mail addresses as Cc: and empty Subject:
To close a mailing list: send a post with "Subject: close"
Current members (except staffs):
{{ members | join('\r\n') }}
welcome_msg: |
{{ mailfrom }} has created a new ticket. Please send further posts to {{ ml_address }}.
To register new members: send a post with their mail addresses as Cc:
To unregister members: send a post with their mail addresses as Cc: and empty Subject:
To close a mailing list: send a post with "Subject: close"
Current members (except staffs):
{{ members | join('\r\n') }}
add_msg: |
{{ mailfrom }} has registered members below:
{{ cc | join('\r\n') }}
To register new members: send a post with their mail addresses as Cc:
To unregister members: send a post with their mail addresses as Cc: and empty Subject:
To close a mailing list: send a post with "Subject: close"
Current members (except staffs):
{{ members | join('\r\n') }}
remove_msg: |
{{ mailfrom }} has unregistered members below:
{{ cc | join('\r\n') }}
Current members and staffs only can register them again.
To register new members: send a post with their mail addresses as Cc:
To unregister members: send a post with their mail addresses as Cc: and empty Subject:
To close a mailing list: send a post with "Subject: close"
Current members (except staffs):
{{ members | join('\r\n') }}
goodbye_msg: |
{{ mailfrom }} has closed this ticket. Please send a post {{ new_ml_address }} for a new ticket.
Current members (except staffs):
{{ members | join('\r\n') }}
reopen_msg: |
{{ mailfrom }} has reopened this ticket.
To register new members: send a post with their mail addresses as Cc:
To unregister members: send a post with their mail addresses as Cc: and empty Subject:
To close a mailing list: send a post with "Subject: close"
Current members (except staffs):
{{ members | join('\r\n') }}
report_subject: Daily status report
report_msg: |
Today's status:
New Tickets
===========
{% for m in new -%}
- ml_name: {{ m.ml_name }} subject: {{ m.subject }}
created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
{% endfor %}
Open Tickets
============
{% for m in open -%}
- ml_name: {{ m.ml_name }} subject: {{ m.subject }}
created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
{% endfor %}
Orphaned Tickets
================
{% for m in orphaned -%}
- ml_name: {{ m.ml_name }} subject: {{ m.subject }}
created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
{% endfor %}
Recently Closed Tickets
=======================
{% for m in closed -%}
- ml_name: {{ m.ml_name }} subject: {{ m.subject }}
created: {{ m.created }} updated: {{ m.updated }} by: {{ m.by }}
{% endfor %}
orphaned_subject: This ticket will be closed soon
orphaned_msg: |
This message was sent automatically.
This ticket will be closed 7 days later if no post is sent.
closed_subject: This ticket was closed
closed_msg: |
This message was sent automatically.
This ticket was closed because it was inactive in the past week.
Please send a post to {{ new_ml_address }} for a new ticket.
admins … 员工邮件地址列表
charset … 消息正文的默认字符集。例如:us-ascii
ml_name_format ... 新创建的邮件列表帐户的格式。例如,“ml-%06d”会产生类似“ml-000001@<domain>”的邮件地址。
new_ml_account … 用于创建新邮件列表的邮件帐户
days_to_orphan … 距离上一个帖子的天数,系统会将未结工单状态更改为“孤立”
days_to_close ... 系统将关闭“孤立”工单的天数
welcome_msg ... 新票的附加文本文件模板
readme_msg ... 普通帖子的附加文本文件模板
remove_msg ... 删除成员的帖子附加文本文件的模板
reboot_msg ... 重新打开工单的附加文本文件模板
goodbye_msg ... 关闭票的帖子附件文本文件的模板
report_subject, report_msg ... 员工每日状态报告的主题和消息模板
orphaned_subject, orphaned_msg ... 关于使票证自动成为孤儿的通知邮件的主题和消息模板
closed_subject, closed_msg ... 自动关闭工单的通知邮件的主题和消息模板
您可以向数据库注册一个新租户,如下所示:
# amanectl tenant create <tenant_name> --yamlfile <tenant_configuration_file>
修改租户配置
使用修改后的租户配置文件:
# amanectl tenant update <tenant_name> --yamlfile <tenant_configuration_file>
使用命令行选项:
# amanectl tenant update <tenant_name> <option> <new-value> [<option> <new-value> ...]
如何启动服务
运行 amane_smtpd 如下:
# amane_smtpd &