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

amane的Python项目详细描述


简介

Amane是一个即时邮件列表管理员。它的基本思想来自 quickml(https://github.com/masui/QuickML)但不一样。 quickml是一个常用的易于使用的邮件列表管理器,但是amane有 已开发为通过电子邮件管理请求。所以阿曼尼是 像雷德明这样的票务管理系统。

quickml和amane之间的差异

  • 邮件目的地以创建新的邮件列表
    • quickml:第一个邮件帐户将用于进一步的帖子。
    • 阿曼:它有一个特定的邮件帐户来创建新的。 收到邮件后,将创建并使用新的邮件帐户。
  • 在Amane上,您可以定义员工来注册新邮件 自动列出。不能通过成员移除来移除它们 邮件。
  • Amane支持多租户。每个租户都有一个邮件帐户 创建邮件列表、主题前缀、工作人员、各种邮件 模板。
  • 在amane上,每个帖子都有一个系统消息作为附件。它 可以包含基本邮件列表用法和成员列表。

雷德明和阿曼的区别

  • redmine是基于web的,而amane是基于邮件的。
  • redmine用户可以自定义票证状态,但amane用户不能。
  • redmine用户可以定义票据的重要性,但是amane用户 不能。
  • redmine用户可以定义票据工作流,但amane用户不能。

如何使用amane

创建新票据
将邮件发送到特定的邮件地址(例如ask@example.com*1) 创建一个新的。Amane将创建一个新的邮件列表 邮件地址(例如ml-000001@example.com)并转发首字母 邮寄给会员,包括地址:收件人:,抄送:和发件人:除*1以外。
发表新文章
将邮件发送到邮件列表地址(例如ml-000001@example.com)。
注册新成员
将新地址作为cc:的邮件发送到邮件列表地址。
注销成员
发送一封主题为空的邮件,并将地址作为cc: 发送到邮件列表地址。
关闭票据
发送一封邮件,邮件列表地址应为“主题:关闭”。

如何安装amane

运行以下命令:

# yum install mongodb-server
# pip install amane

如何配置amane

阿曼尼有两份确认文件。

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
  • 数据库URL、数据库名称…MongoDB的uri和数据库名称
  • 中继主机,中继端口…的IP地址和端口号 用于发送邮件的外部SMTP服务器(中继主机)
  • 监听地址,监听端口…IP地址和端口号 Amane_smptd会听的
  • 日志文件…amane命令使用的日志文件的路径
  • 域…电子邮件地址的域名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.
  • 管理员…员工邮件地址列表
  • 字符集…消息正文的默认字符集。例如: 美国ascii
  • ml_name_format…新建邮件列表帐户的格式。为了 例如,“ml-%06d”将导致如下邮件地址 “ml-000001@<;域>;”。
  • 新的电子邮件帐户…用于创建新邮件列表的邮件帐户
  • days_to_orphan…从系统将 将未结票的状态更改为“孤立”
  • 天关闭…系统将关闭“孤儿”票的天
  • 欢迎消息…新的附加文本文件的模板 门票
  • 自述信息…通常附加文本文件的模板 帖子
  • 删除所附文章文本文件的模板 删除成员
  • 重新打开消息…重新打开的附加文本文件的模板 门票
  • 再见消息…模板Of所附的帖子文本文件 关闭票
  • 报表主题、报表消息…每日的主题和消息模板 员工状态报告
  • 孤立的主题,孤立的消息…的主题和消息模板 关于自动生成孤立票的通知邮件
  • 关闭的主题,关闭的消息…主题和消息模板 关于自动关闭门票的通知邮件

您可以向数据库注册新租户,如下所示:

# 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 &

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中调用Paint组件方法   多层次POM中的java覆盖依赖项/插件管理   java模式识别   JavaSpringMVC+Log4j2定义了Log4j2。未标识非类路径位置中的属性文件   java我们如何将IntelliJ IDEA中的maven和gradle项目与源代码浏览支持集成?   Maven mvn exec:java在Windows上工作,但不是Ubuntu 20   java在Jaxb2Marshaller上使用带有packagesToScan属性的JAXBElement时没有端点适配器   java删除方法和节点   java如何为某些场景创建正则表达式模式   java如何通过gridView中的intent()传递ArrayList数据。setOnItemClickListener()   java UnsupportedClassVersionError 1.7/1.5   java为什么JVM参数是http。tomcat servlet没有使用proxyHost?   java将ArrayList从字母顺序排序到最频繁/最不频繁   java动态字段列表迭代   java如何将字节转换为位?   hadoop java。mapreduce作业中的lang.NullPointerException   javasocketIO无法与Android中的LocationListener一起使用   java在卸载时清除内部存储   java池回收错误2个精灵同时碰撞到一个精灵