虚拟机Ubuntu邮箱配置核心在于选对方案、理清域名解析、按步骤安装MTA与收发组件,整个流程在两小时内可以完成。如果你是在虚拟机里练手或者自用,最简单的方式是用mailutils配合外部SMTP服务;如果要搭一台正式的邮件服务器,就要走Postfix + Dovecot这条路,下面按实际生产环境的标准顺序来拆解,你跟着操作即可。
准备工作:先分清你的需求再动手
动手之前,先确认三件事,否则后面容易反复折腾。
第一,你的Ubuntu版本。 18.04、20.04、22.04的配置差异不算大,但包管理器源和默认配置文件路径有细微变化,建议统一用22.04 LTS,资料最多,踩坑最少。
第二,你的使用场景。 是只想从命令行发信给外部邮箱,还是要接收邮件到本地,甚至绑定域名做完整邮件服务?这三种需求的配置复杂程度完全不同,命令行发信只需要一个mailutils加外部SMTP,本地收发则需要Postfix、Dovecot两个核心服务,绑定域名还得处理MX记录和SSL证书。
第三,你的网络环境。 虚拟机默认是NAT模式,对外访问受限,如果你的虚拟机只在内部测试,邮箱配置的很多环节(比如接收外部邮件)会无法验证,建议先切换为桥接模式,确保25端口(SMTP)、143端口(IMAP)能被外部访问到。
虚拟机Ubuntu邮箱服务器配置的完整操作路径
这一节以自建邮件服务器为标准,Ubuntu 22.04 + Postfix + Dovecot组合,这也是目前主流的配置方案。
第一步:更新系统并设置主机名
先用root权限更新系统源,这一步不能省,因为后续安装的软件包版本直接影响配置文件的语法。
sudo apt update && sudo apt upgrade -y
接着设置主机名,主机名的格式必须是mail.你的域名.com,这是邮件服务器规范,例如你的域名是example.com,执行:
sudo hostnamectl set-hostname mail.example.com
同时编辑/etc/hosts,把主机名对应到本机IP:
0.0.1 localhost
你的公网IP mail.example.com mail
第二步:安装Postfix、Dovecot及依赖组件
安装过程中系统会弹出Postfix配置界面,选择Internet Site,然后输入你的域名example.com,如果当时没填对,后续可以修复。
sudo apt install postfix dovecot-imapd dovecot-pop3d mailutils -y
mailutils是命令行邮件客户端,方便你安装完直接测试。dovecot-imapd提供IMAP协议支持,手机和电脑邮件客户端都需要它。
第三步:配置Postfix主文件
Postfix的主配置文件在/etc/postfix/main.cf,编辑之前先备份原文件,这是每个管理员的基本习惯。
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak sudo nano /etc/postfix/main.cf
需要修改的关键参数如下:
myhostname = mail.example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.localdomain, localhost, $mydomain, mail.$mydomain home_mailbox = Maildir/ mailbox_command = smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
其中home_mailbox = Maildir/这一行要重点注意,它让系统以Maildir格式存储邮件,用户的每封邮件保存在~/Maildir/目录下,每个邮件一个文件,比mbox格式更稳定,不易损坏。
修改后重载配置:
sudo systemctl reload postfix
第四步:配置Dovecot开启认证与收发
Dovecot的三个关键配置文件分别是:
/etc/dovecot/dovecot.conf主配置/etc/dovecot/conf.d/10-mail.conf邮件存储路径/etc/dovecot/conf.d/10-auth.conf认证方式
修改10-mail.conf,指定Maildir路径:
mail_location = maildir:~/Maildir
修改10-auth.conf,开启明文认证(内部网络场景下可行,生产环境建议搭配SSL):
disable_plaintext_auth = no
auth_mechanisms = plain login
重启Dovecot服务:
sudo systemctl restart dovecot
第五步:创建用户邮箱并测试发信
系统用户就是邮箱用户,为你的管理员创建一个用户:
sudo useradd -m -s /bin/bash admin sudo passwd admin
测试发信:
echo "这是测试邮件正文" | mail -s "邮件主题测试" admin@localhost
然后用mail命令查看是否收到:
su - admin mail
如果能看到测试邮件,说明本地投递已经打通。
Ubuntu 22.04配置Postfix和Dovecot的常见故障排查顺序
这是你实际操作中大概率会遇到的,按下面的顺序排查效率最高。
25端口被占用或无法监听
Postfix默认监听25端口,但很多云主机和本地网络运营商屏蔽了25端口,检查命令:
sudo netstat -tlnp | grep :25
如果端口没有监听,看Postfix日志:
tail -f /var/log/mail.log
最常见的报错是fatal: bind 0.0.0.0 port 25: Permission denied,那就说明你的网络环境封了25端口,需要改用587端口作为提交端口,在/etc/postfix/master.cf中取消submission一行的注释。
外部邮箱收不到你发的信
发出去的信到不了对方收件箱,多数是域名解析和SPF记录的问题。
确认域名的MX记录指向mail.example.com,同时添加SPF记录,TXT记录内容为:
v=spf1 mx ~all
这是在告诉对方的邮件服务器,只有你的服务器发出的信才算合法,可以很大程度降低被丢进垃圾箱的概率。
客户端连接被拒绝
手机上的邮件App或电脑Outlook连不上,先检查Dovecot监听的端口:
sudo netstat -tlnp | grep dovecot
正常应该能看到143(IMAP)和993(IMAPS),如果只有143,请在客户端选择“不加密连接”或“STARTTLS”,不要选“SSL/TLS”,否则连不上。
两个轻量方案:不折腾自建就能用
不是所有人都需要完整的自建邮件服务器,如果你的目标是让虚拟机里的Ubuntu能发邮件告警、接受定时任务输出,或者临时测试一个网站的邮件发送功能,下面两个方案更省事。
mailutils + 外部SMTP转发
这个方案把发信任务交给Gmail、QQ邮箱或企业邮局的SMTP服务器,Ubuntu只负责当发信客户端,适合监控告警、脚本通知等场景。
安装软件包:
sudo apt install mailutils postfix -y
修改/etc/postfix/main.cf,加入外部SMTP转发配置:
relayhost = [smtp.qq.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
创建/etc/postfix/sasl_passwd,填入你的邮箱账号和授权码(不是登录密码):
[smtp.qq.com]:587 你的邮箱@qq.com 授权码
然后生成hash文件并加载:
sudo postmap /etc/postfix/sasl_passwd sudo systemctl reload postfix
测试发送:
echo "服务器存储空间告警" | mail -s "告警通知" 接收方@example.com
需要注意,QQ邮箱和Gmail的SMTP都要求先开启“SMTP服务”并获取授权码,这是独立于登录密码的字符串。
Webmail一体化面板
如果你觉得命令行配置有压力,或者后续想多管理几个域名,可以用带Web界面的邮件面板,这类工具把Postfix、Dovecot、数据库、Web管理界面打包成一个整体,MySQL存用户数据,网页点几下就能建邮箱。
比较流行的有Mailu和Mailcow,安装方式基本都是拉取Docker镜像后运行,安装时间比纯命令行要快,后续维护成本也低,适合自己多开几个邮箱、不在乎“必须亲手敲配置文件”的用户。
无论是自建还是用一体化面板,都要给虚拟机预留至少2GB内存和20GB磁盘,Docker类的面板方案建议内存升到4GB。
Ubuntu邮件服务器性能优化与安全加固
这是比基础配置更高一层的要求,适合你要把服务器放到公网上长期使用。
开启SSL加密通信
用Let’s Encrypt免费证书申请:
sudo apt install certbot python3-certbot-postfix -y sudo certbot certonly --standalone -d mail.example.com
获得证书后,在Postfix的main.cf中加入:
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_tls_security_level = may
Dovecot方面,编辑/etc/dovecot/conf.d/10-ssl.conf:
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
为证书申请配置自动续期任务:
sudo crontab -e
加入一行:
0 3 certbot renew --quiet --renew-hook "systemctl reload postfix dovecot"
垃圾邮件过滤
如果服务器对外开放,垃圾邮件是个大问题,安装SpamAssassin是一个合适的起点:
sudo apt install spamassassin -y sudo systemctl enable spamassassin
然后让Postfix调用SpamAssassin检查邮件,编辑/etc/postfix/master.cf,在smtp一行末尾追加:
-o content_filter=spamassassin
文件底部新增:
spamassassin unix - n n - - pipe
user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/spamassassin
虚拟用户和数据库管理
默认的Linux系统用户当邮箱账户,安全性不够理想,后来也容易出现用户膨胀的现象,行业共识认为,搭配MySQL或SQLite做虚拟用户管理,是邮件服务器正规化的标志。
安装Postfix的MySQL支持:
sudo apt install postfix-mysql -y
建好数据库表单后,在/etc/postfix/mysql-virtual-mailbox-domains.cf中配置数据库连接信息,这项工作属于进阶操作,适合有数据库基础的用户。
邮箱配置问答
这几组问题我整理了一下,基本覆盖了你后续使用中最容易卡住的地方。
虚拟机Ubuntu配置邮箱时,DNS解析做不好会有什么后果?
后果很直接:寄到你的域名邮箱的信全部被退件,你发出去的信进入对方垃圾箱的概率极高,DNS解析是邮件服务器里最先要做的事,而且顺序不能乱,先A记录让mail.example.com可以解析到服务器地址,再MX记录告诉互联网“投递信件时找mail.example.com这个服务器”。
怎么判断我的Postfix和Dovecot服务是否正常运行?
三个命令定位问题:
sudo systemctl status postfix sudo systemctl status dovecot sudo tail -f /var/log/mail.log
第一条和第二条分别确认服务进程有没有活着,第三条是实时日志输出,如果日志里没有出现error或fatal字样,服务基本没有大问题。
虚拟机重启后邮箱服务不会自动启动怎么办?
Postfix和Dovecot在安装时默认会设置开机自启,用命令检查:
sudo systemctl is-enabled postfix sudo systemctl is-enabled dovecot
如果返回disabled,执行:
sudo systemctl enable postfix dovecot
虚拟机在宿主机重启后,如果邮件服务没有随系统自动拉起,优先检查systemctl is-enabled的状态,大多数情况下是这里关了。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/626455.html





