Skip to main content

支持中心的即时邮件列表管理器

项目描述

介绍

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>

修改租户配置

  1. 使用修改后的租户配置文件:

    # amanectl tenant update <tenant_name> --yamlfile <tenant_configuration_file>
  2. 使用命令行选项:

    # amanectl tenant update <tenant_name> <option> <new-value> [<option> <new-value> ...]

如何启动服务

运行 amane_smtpd 如下:

# amane_smtpd &

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

amane-1.0.1-py2.py3-none-any.whl (40.3 kB 查看哈希

已上传 py2 py3