下面给你一份从零部署 Debian 邮件服务器的实用指南,适合小型企业 / 个人服务器使用。内容以 Postfix + Dovecot + MariaDB + Let’s Encrypt 为例,支持 SMTP / IMAP / 加密 / 虚拟用户。
example.com)hostnamectl set-hostname mail.example.com
在 DNS 中添加:
| 类型 | 主机名 | 值 |
|---|---|---|
| A | 服务器IP | |
| MX | @ | mail.example.com |
| TXT | @ | v=spf1 mx ~all |
| TXT | _dmarc | v=DMARC1; p=none |
| TXT | mail._domainkey | (后面 DKIM 生成) |
apt update
apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \
dovecot-lmtpd dovecot-mysql mariadb-server \
certbot python3-certbot-nginx
安装 Postfix 时:
example.commysql -u root -p
CREATE DATABASE mailserver;
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
USE mailserver;
CREATE TABLE domains (
id INT AUTO_INCREMENT PRIMARY KEY,
domain VARCHAR(50) NOT NULL
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL,
domain VARCHAR(50)
);
CREATE TABLE aliases (
id INT AUTO_INCREMENT PRIMARY KEY,
source VARCHAR(100),
destination VARCHAR(100)
);
示例用户:
INSERT INTO domains VALUES (1,'example.com');
INSERT INTO users (email,password,domain)
VALUES ('user@example.com', ENCRYPT('password'), 'example.com');
/etc/postfix/main.cfmyhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-users.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
示例 /etc/postfix/mysql-users.cf
user = mailuser
password = 强密码
hosts = localhost
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s'
/etc/dovecot/conf.d/10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
/etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
/etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=mailserver user=mailuser password=强密码
default_pass_scheme = ENCRYPT
password_query = SELECT password FROM users WHERE email='%u';
user_query = SELECT '/var/mail/%d/%n' AS mail FROM users WHERE email='%u';
certbot certonly --standalone -d mail.example.com
自动续期:
certbot renew --dry-run
apt install opendkim opendkim-tools
生成密钥并配置 TXT 记录(略,可单独写一节)
systemctl restart postfix dovecot
systemctl enable postfix dovecot
测试:
telnet mail.example.com 25
openssl s_client -connect mail.example.com:993
如果你愿意,我可以: ✅ 给你 一键脚本 ✅ 讲 DKIM / DMARC 详细配置 ✅ 教你 用 Roundcube 做 Web 邮箱 ✅ 或只做 最简单的发信服务器
你打算用在什么场景?