在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環境即可支持郵件發送與接收功能,滿足網站站內通知、用戶注冊等場景需求。