Mailman

来自 Arch Linux 中文维基

本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队

附注: 需要翻译。(在 Talk:Mailman# 中讨论)

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

安装[编辑 | 编辑源代码]

安装mailman3软件包。

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

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

配置[编辑 | 编辑源代码]

All configuration for Mailman takes place in /etc/mailman.cfg. The schema explaining all possible configuration options and setting the defaults is stored in /usr/lib/python3.8/site-packages/mailman/config/schema.cfg.

The configuration is also accessible via the command line. Run the following command as the mailman user (e.g. using sudo or su):

[mailman]$ mailman conf

数据库[编辑 | 编辑源代码]

Mailman by default uses an SQLite database in /var/lib/mailman/data/, but can be configured to use MariaDB or PostgreSQL.

SQLite[编辑 | 编辑源代码]

The default location for the SQLite database is already reflected in the schema.cfg and therefore does not have to be set in Mailman's configuration.

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

MariaDB[编辑 | 编辑源代码]

Install the python-pymysql package and configure a database on MariaDB.

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

PostgreSQL[编辑 | 编辑源代码]

Install the python-psycopg2 package and create a database using PostgreSQL.

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

REST API[编辑 | 编辑源代码]

Mailman exposes its REST API based on the settings in the [webservice] section of the configuration. Make sure to replace the default values for admin_user and admin_pass (do not use the example values below).

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

ARC[编辑 | 编辑源代码]

By default DMARC and DKIM are disabled. The configuration takes place in the [ARC] section of the configuration file. Make sure to set necessary values and read the documentation about the defaults.

/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[编辑 | 编辑源代码]

To connect a mail-transfer-agent (MTA), it is necessary to configure the [mta] section in the configuration file. Upstream documentation covers examples for postfix, exim and sendmail, but other MTAs are technically possible.

Postfix[编辑 | 编辑源代码]

To connect to a local postfix instance the following configuration section can be used:

/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

The postfix configuration has to be extended to ensure compatibility (see upstream notes).

/etc/postfix/main.cf

[..]
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
[..]

Additionally, postfix needs to be made aware of mailman's transport maps. Depending on the postfix configuration these may look similar to the following.

注意: The following examples assume that existing values for transport_maps, local_recipient_maps, relay_domains, virtual_mailbox_domains and virtual_alias_maps are merged with the additional values.
/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
[..]

If postmap is not directly accessible by mailman for creating the default hash-based alias maps, it is possible to generate regular expression based alias maps instead. To overwrite the default Python-class based configuration, mailman allows the use of a configuration file. Create the following file:

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

Add the file to the [mta] section in mailman's configuration file.

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

Afterwards the regexp based exports can then be used in the postfix configuration.

/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
[..]

注意: Make sure to create the new alias maps after changing their type (e.g. from hash to regexp): [mailman]$ mailman aliases

To connect to a local postfix instance with a virtual mail setup, first set an alias domain. Afterwards alter the respective configuration.

/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:用于每天向管理员发送待处理请求的通知。

安装[编辑 | 编辑源代码]

与邮件服务器集成[编辑 | 编辑源代码]

这篇文章的某些内容需要扩充。

原因: Example for setup with mail server (based on upstream documentation). (在 Talk:Mailman 中讨论)

与 Hyperkitty 集成[编辑 | 编辑源代码]

Mailman does not automatically archive mails on its own. The Hyperkitty web application is used for this purpose. Based on a plugin, mailman is able to send mails to a Hyperkitty instance for archival.

Install the mailman3-hyperkitty package and configure /etc/mailman-hyperkitty.cfg.

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

Afterwards, make mailman aware of the plugin:

/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 的自定义工具进行连接。

参见[编辑 | 编辑源代码]