Mailman
Mailman 是一个邮件列表管理系统。它与邮件服务器结合使用。
安装
Mailman 可以与 Postorius(用于配置)和 Hyperkitty(用于存档)结合使用。
mailman
用户身份运行,因此任何对 mailman
可执行文件的调用都必须以 mailman
用户身份完成。配置
Mailman 的所有配置都在 /etc/mailman.cfg
中进行。解释所有可能的配置选项并设置默认值的架构存储在 /usr/lib/python3.8/site-packages/mailman/config/schema.cfg
中。
配置也可以通过命令行访问。以 mailman
用户身份运行以下命令(例如,使用 sudo 或 su)
[mailman]$ mailman conf
数据库
Mailman 默认使用 SQLite 数据库,位于 /var/lib/mailman/data/
,但可以配置为使用 MariaDB 或 PostgreSQL。
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_user
和 admin_pass
的默认值(不要使用下面的示例值)。
/etc/mailman.cfg
[webservice] admin_user: my_new_admin_user_name admin_pass: my_new_admin_user_password
ARC
默认情况下,DMARC 和 DKIM 处于禁用状态。配置在配置文件的 [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]
部分。上游文档涵盖了 postfix、exim 和 sendmail 的示例,但技术上其他 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 的传输映射。根据 postfix 配置,这些可能类似于以下内容。
transport_maps
、local_recipient_maps
、relay_domains
、virtual_mailbox_domains
和 virtual_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
以创建默认的基于哈希的别名映射,则可以改为生成基于正则表达式的别名映射。要覆盖默认的基于 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
之后,基于 regexp
的导出即可在 postfix 配置中使用。
/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 [..]
运行
存在多个带有计时器的 systemd 服务,负责列表管理的各个方面
mailman3-digests.timer
:用于向订阅者发送每日摘要mailman3-gatenews.timer
:用于每小时轮询 NNTP 服务器以获取新闻mailman3-notify.timer
:用于向管理员发送有关待处理请求的每日通知
设置
与邮件服务器集成
与 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
用户身份运行以下命令(例如,使用 sudo 或 su)
[mailman]$ mailman import21 LISTSPEC PICKLE_FILE
在此处,LISTSPEC
表示要导入的列表的完全限定名称(例如 list@example.com
),而 PICKLE_FILE
表示列表的 config.pck
文件的路径。
REST API
Mailman 公开了一个 REST API,可以使用基于 python-mailmanclient 的自定义工具进行接口。
参见
- Mailman 文档 - 上游文档
- Mailmanclient 文档 - 上游文档
- 连接到 Mailman - 关于 mailman3-hyperkitty 的上游文档
- Mailman 套件文档 - 整个 Mailman 套件(Mailman、Hyperkitty 和 Postorius)的(高级)上游文档