在LNMP(Linux+Nginx+MySQL+PHP)架构中设置邮件服务,需通过安装MTA(邮件传输代理)、IMAP/POP3服务器及配置PHP邮件功能实现。以下是基于Postfix+Dovecot的经典配置流程(适用于Ubuntu/Debian系统,CentOS系统可将apt替换为yum):
mail.yourdomain.com指向服务器公网IP);更新系统包列表并安装Postfix(MTA)、Dovecot(IMAP/POP3)及邮件工具:
sudo apt update
sudo apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils -y
安装过程中,Postfix会提示选择配置类型,选择“Internet Site”(适用于公开邮件服务器),并填写域名(如yourdomain.com)。
编辑Postfix主配置文件/etc/postfix/main.cf,修改以下关键参数:
sudo nano /etc/postfix/main.cf
myhostname = mail.yourdomain.com # 邮件服务器主机名
mydomain = yourdomain.com # 邮件域名
myorigin = $mydomain # 发件人域名
inet_interfaces = all # 监听所有网络接口
inet_protocols = ipv4 # 仅使用IPv4(若需IPv6,可改为“all”)
mydestination = $myhostname, localhost.$mydomain, $mydomain, localhost # 接收邮件的域名
mynetworks = 127.0.0.0/8 [::1]/128 # 允许本地网络发送邮件
home_mailbox = Maildir/ # 邮件存储格式(Maildir,每用户一个目录)
smtpd_tls_security_level = may # 启用TLS(可选但推荐)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem # SSL证书路径
smtpd_tls_key_file = /etc/letsencrypt/live/mail.yourdomain.com/privkey.pem # SSL私钥路径
smtpd_sasl_auth_enable = yes # 启用SASL认证(需用户密码)
smtpd_sasl_security_options = noanonymous # 禁止匿名登录
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # 限制接收规则
保存后重启Postfix:
sudo systemctl restart postfix
sudo systemctl enable postfix # 设置开机自启
编辑Dovecot主配置文件/etc/dovecot/dovecot.conf,确保以下参数存在:
sudo nano /etc/dovecot/dovecot.conf
mail_location = maildir:~/Maildir # 邮件存储路径(与Postfix一致)
protocols = imap pop3 # 启用IMAP/POP3协议
编辑SASL认证配置/etc/dovecot/conf.d/10-auth.conf,开启密码认证:
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes # 禁止明文认证(强制使用加密)
auth_mechanisms = plain login # 支持PLAIN(加密)和LOGIN(加密)机制
编辑IMAP/SMTP监听配置/etc/dovecot/conf.d/10-master.conf,开启LMTP(用于邮件投递):
sudo nano /etc/dovecot/conf.d/10-master.conf
service lmtp {
inet_listener lmtp {
port = 24 # LMTP默认端口
}
}
编辑SSL配置/etc/dovecot/conf.d/10-ssl.conf,启用SSL:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.yourdomain.com/privkey.pem
保存后重启Dovecot:
sudo systemctl restart dovecot
sudo systemctl enable dovecot # 设置开机自启
若需通过PHP发送邮件(如WordPress找回密码、站内通知),需修改PHP配置文件:
sudo nano /etc/php/7.4/fpm/php.ini # 根据PHP版本调整路径(如7.4/8.0)
找到sendmail_path参数,修改为:
sendmail_path = /usr/sbin/sendmail -t -i
保存后重启PHP-FPM:
sudo systemctl restart php7.4-fpm
telnet连接SMTP端口(25或587),手动发送测试邮件:telnet localhost 25
HELO localhost
MAIL FROM: <your-email@yourdomain.com>
RCPT TO: <recipient@example.com>
DATA
Subject: Test Email
This is a test email from your LNMP mail server.
.
QUIT
mail.yourdomain.com,端口587,加密STARTTLS,用户名your-email@yourdomain.com,密码your-password;mail.yourdomain.com,端口993,加密SSL/TLS,用户名/密码同上。允许邮件服务端口通过防火墙(以UFW为例):
sudo ufw allow 25/tcp # SMTP(邮件发送)
sudo ufw allow 143/tcp # IMAP(邮件接收,明文)
sudo ufw allow 993/tcp # IMAPS(邮件接收,加密)
sudo ufw allow 587/tcp # Submission(邮件提交,加密)
sudo ufw allow 465/tcp # SMTPS(邮件发送,加密)
sudo ufw enable # 开启防火墙
mail.yourdomain.com的MX记录值为服务器IP);/var/mail/vhosts/(邮件存储目录)和Postfix/Dovecot配置文件;通过以上步骤,LNMP环境即可支持邮件发送与接收功能,满足网站站内通知、用户注册等场景需求。