跳转至内容

Mailman

来自 ArchWiki

Mailman 是一个邮件列表管理系统。它与 邮件服务器 配合使用。

安装

安装 mailman3 软件包。

Mailman 可以与 Postorius(用于配置)和 Hyperkitty(用于存档)配合使用。

注意 Mailman 以专用的 mailman 用户身份运行,因此任何对 mailman 可执行文件的调用都必须以 mailman 用户身份执行。

配置

本文或本章节的准确性存在争议。

原因: 以下指令无法导致 mailman3 或其任何组件的成功部署。(在 Talk:Mailman#mailman3 Instructions broken 中讨论)

Mailman 的所有配置都在 /etc/mailman.cfg 中进行。解释所有可能配置选项并设置默认值的架构存储在 /usr/lib/python3.8/site-packages/mailman/config/schema.cfg 中。

也可以通过命令行访问配置。以 mailman 用户身份运行以下命令(例如使用 sudosu

[mailman]$ mailman conf

数据库

Mailman 默认在 /var/lib/mailman/data/ 中使用 SQLite 数据库,但可以配置为使用 MariaDBPostgreSQL

SQLite

SQLite 数据库的默认位置已经反映在 schema.cfg 中,因此无需在 Mailman 配置中设置。

/etc/mailman.cfg
[database]
url: sqlite:////var/lib/mailman/data/mailman.db

MariaDB

安装 python-pymysql 软件包并在 MariaDB 上配置数据库。

/etc/mailman.cfg
[database]
class: mailman.database.mysql.MySQLDatabase
url: mysql+pymysql://myuser:mypassword@mymysqlhost/mailman?charset=utf8&use_unicode=1

PostgreSQL

安装 python-psycopg2 软件包并使用 PostgreSQL 创建数据库。

/etc/mailman.cfg
[database]
class: mailman.database.postgresql.PostgreSQLDatabase
url: postgres://myuser:mypassword@mypghost/mailman

REST API

Mailman 根据配置中 [webservice] 部分的设置公开其 REST API。请确保替换 admin_useradmin_pass 的默认值(不要使用下面的示例值)。

/etc/mailman.cfg
[webservice]
admin_user: my_new_admin_user_name
admin_pass: my_new_admin_user_password

ARC

默认情况下 DMARCDKIM 是禁用的。配置在配置文件的 [ARC] 部分进行。请确保设置必要的值并阅读有关默认值的文档。

/etc/mailman.cfg
[ARC]
enabled: yes
authserv_id: mailserver.tld
trusted_authserv_ids: subdomain.mailserver.tld, other.mailserver.tld
privkey: /path/to/privatekey.pem
selector: test
domain: mailserver.tld

MTA

要连接邮件传输代理 (MTA),需要配置配置文件中的 [mta] 部分。上游文档涵盖了 postfixeximsendmail 的示例,但技术上其他 MTA 也是可行的。

Postfix

要连接到本地 postfix 实例,可以使用以下配置部分

/etc/mailman.cfg
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: mail.example.com
lmtp_port: 8024
smtp_host: mail.example.com
smtp_port: 25

必须扩展 postfix 配置以确保兼容性(参见上游说明)。

/etc/postfix/main.cf
[..]
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
[..]

此外,postfix 需要感知 mailman 的 传输映射 (transport maps)。根据 postfix 配置的不同,它们可能类似于以下内容。

注意 以下示例假设 transport_mapslocal_recipient_mapsrelay_domainsvirtual_mailbox_domainsvirtual_alias_maps 的现有值与新增值合并。
/etc/postfix/main.cf
[..]
transport_maps = hash:/var/lib/mailman/data/postfix_lmtp
local_recipient_maps = hash:/var/lib/mailman/data/postfix_lmtp
relay_domains = hash:/var/lib/mailman/data/postfix_domains
[..]

如果 mailman 无法直接访问 postmap 来创建默认的基于 hash 的别名映射,则可以使用基于正则表达式的别名映射。为了覆盖默认的基于 Python 类的配置,mailman 允许使用配置文件。创建以下文件

/etc/postfix-mailman.cfg
[postfix]
postmap_command: /usr/bin/postmap
transport_file_type: regex

将该文件添加到 mailman 配置文件的 [mta] 部分。

/etc/mailman.cfg
[mta]
[..]
configuration: /etc/postfix-mailman.cfg

之后,可以在 postfix 配置中使用基于 regexp 的导出。

/etc/postfix/main.cf
[..]
transport_maps = regexp:/var/lib/mailman/data/postfix_lmtp
local_recipient_maps = regexp:/var/lib/mailman/data/postfix_lmtp
relay_domains = regexp:/var/lib/mailman/data/postfix_domains
[..]

注意 在更改映射类型(例如从 hash 更改为 regexp)后,请确保创建新的别名映射:[mailman]$ mailman aliases

要连接到具有 虚拟邮件 设置的本地 postfix 实例,请先 设置别名域。然后修改相应的配置。

/etc/postfix/main.cf
[..]
local_recipient_maps = regexp:/var/lib/mailman/data/postfix_lmtp
transport_maps = regexp:/var/lib/mailman/data/postfix_lmtp
virtual_mailbox_domains = regexp:/var/lib/mailman/data/postfix_domains
virtual_alias_maps = regexp:/var/lib/mailman/data/postfix_vmap
[..]

运行

启用启动 mailman3.service

存在多个带有定时器的 systemd 服务,负责列表管理的各个方面

  • mailman3-digests.timer:用于向订阅者发送每日摘要
  • mailman3-gatenews.timer:用于每小时轮询 NNTP 服务器的新闻
  • mailman3-notify.timer:用于向管理员发送关于待处理请求的每日通知

设置

与邮件服务器集成

本文章或章节需要扩充。

原因:邮件服务器 设置的示例(基于 上游文档)。(在 Talk:Mailman 中讨论)

与 Hyperkitty 集成

Mailman 本身不会自动存档邮件。为此使用 Hyperkitty Web 应用程序。基于一个插件,mailman 能够将邮件发送到 Hyperkitty 实例进行存档。

安装 mailman3-hyperkitty 软件包并配置 /etc/mailman-hyperkitty.cfg

/etc/mailman-hyperkitty.cfg
[general]
base_url: https://example.tld/hyperkitty/
api_key: super_secret_password

随后,让 mailman 感知该插件

/etc/mailman.cfg
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman-hyperkitty.cfg

技巧与提示

从 mailman < 3.0 迁移

Mailman 提供了导入基于 mailman < 3.0 的列表数据库 (config.pck) 的可能性。以 mailman 用户身份运行以下命令(例如使用 sudosu

[mailman]$ mailman import21 LISTSPEC PICKLE_FILE

这里,LISTSPEC 代表要导入的列表的全限定名(例如 list@example.com),而 PICKLE_FILE 代表该列表 config.pck 文件的路径。

注意 要导入的 mailman2 列表必须已经存在于目标 mailman 实例中。

REST API

Mailman 公开了一个 REST API,可以使用基于 python-mailmanclient 的自定义工具进行接口调用。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.