在 WSL 的 Debian 12 中啟動 SMTP 服務(以 Postfix 為例),請按以下步驟操作:
1. 安裝 Postfix
sudo apt update
sudo apt install postfix mailutils
- 安裝過程中會彈出配置窗口:
- General type of mail configuration:選擇
Internet Site
(默認) - System mail name:輸入您的域名(如
localhost
或yourdomain.com
),測試時可保留默認值。
- General type of mail configuration:選擇
2. 配置 Postfix
編輯主配置文件:
sudo nano /etc/postfix/main.cf
確保以下關鍵配置:
inet_interfaces = loopback-only # 只允許本地連接
inet_protocols = ipv4 # 僅使用 IPv4(避免 WSL 兼容性問題)
mydestination = $myhostname, localhost.$mydomain, localhost
保存并退出(Ctrl+X
→ Y
→ Enter
)。
3. 啟動 Postfix
sudo service postfix start
- 設置開機自啟(WSL 需額外配置):
添加以下內容:sudo nano /etc/rc.local
保存后賦予可執行權限:#!/bin/sh service postfix start exit 0
sudo chmod +x /etc/rc.local
4. 測試 SMTP 服務
方法 1:本地發送測試郵件
echo "Test email body" | mail -s "Test Subject" your-local-username@$(hostname)
- 查看郵件日志:
tail -f /var/log/mail.log
- 讀取郵件:
mail
方法 2:使用 telnet
手動測試
sudo apt install telnet
telnet localhost 25
連接后輸入:
EHLO localhost
MAIL FROM: <test@localhost>
RCPT TO: <your-local-username@localhost>
DATA
Subject: Test
This is a test email.
.
QUIT
5. 常見問題解決
- 端口占用:確保
25
端口空閑:sudo ss -tulnp | grep :25
- 防火墻:WSL 無需額外配置防火墻。
- 郵件發送失敗:
- 檢查日志:
tail -f /var/log/mail.log
- 確保配置中
inet_interfaces = loopback-only
。
- 檢查日志:
6. 外部郵件發送配置(可選)
若需發送到外部郵箱(如 Gmail),需配置中繼:
- 編輯
/etc/postfix/main.cf
,添加:relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_use_tls = yes
- 創建認證文件:
內容:sudo nano /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 your-email@gmail.com:your-app-password
- 生成權限文件:
sudo postmap /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd*
- 重啟 Postfix:
sudo service postfix restart
說明:
- WSL 限制:Postfix 僅在 WSL 運行時有效,關閉終端后服務停止(需通過
/etc/rc.local
實現自啟)。 - 安全性:默認配置僅允許本地訪問,暴露端口需謹慎。
- 其他 SMTP 服務(如 Exim)可類似安裝,但 Postfix 是 Debian 默認推薦。
在 Win 10 上,如何發送一個郵件給 Debian 12 的 SMTP 服務 ?
要從 Windows 10 主機發送郵件到 WSL 中的 Debian 12 SMTP 服務(Postfix),需要完成以下步驟:
先決條件
- 已按照之前說明在 WSL Debian 中安裝并配置 Postfix
- 關鍵修改:需要讓 Postfix 監聽 WSL 的網絡接口而不僅是 loopback
步驟 1:修改 Postfix 配置(在 WSL Debian 中)
sudo nano /etc/postfix/main.cf
進行以下修改:
# 允許監聽所有網絡接口(包括 WSL 虛擬接口)
inet_interfaces = all# 允許來自本地網絡的客戶端
mynetworks = 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16# 接收任意域名的郵件(測試用)
mydestination = $myhostname, localhost.$mydomain, localhost
保存后重啟 Postfix:
sudo service postfix restart
步驟 2:獲取 WSL 的 IP 地址(在 Debian 中)
ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1
示例輸出:172.27.112.214
(記錄這個 IP)
步驟 3:在 Windows 10 上發送郵件
方法 1:使用 Telnet(推薦測試)
- 在 Windows 功能中啟用 Telnet 客戶端
- Win+R →
optionalfeatures
→ 勾選 “Telnet Client”
- Win+R →
- 打開命令提示符:
telnet 172.27.112.214 25
- 手動輸入 SMTP 命令:
EHLO windows
MAIL FROM: <test@windows>
RCPT TO: <your_linux_username> # 使用 Linux 用戶名
DATA
Subject: Test from WindowsThis is a test email
. # 單獨一行輸入點結束
QUIT
方法 2:使用 PowerShell 腳本
$SmtpServer = "172.27.112.214" # 替換為你的 WSL IP
$Port = 25
$From = "test@windows"
$To = "your_linux_username@localhost" # 替換為你的 Linux 用戶名
$Subject = "Test from PowerShell"
$Body = "This is a test email body"$Message = @{To = $ToFrom = $FromSubject = $SubjectBody = $BodySmtpServer = $SmtpServerPort = $Port
}Send-MailMessage @Message -UseSsl:$false
方法 3:使用 Python 腳本
保存為 send_mail.py
:
import smtplibsmtp_server = "172.27.112.214" # 替換為你的 WSL IP
port = 25
sender = "test@windows"
receiver = "your_linux_username" # 替換為你的 Linux 用戶名message = f"""\
Subject: Test from Python
To: {receiver}
From: {sender}This is a test email from Python."""with smtplib.SMTP(smtp_server, port) as server:server.sendmail(sender, receiver, message)
print("Email sent!")
運行:
python send_mail.py
步驟 4:在 Debian 中查收郵件
# 查看郵件日志
tail -f /var/log/mail.log# 查看收到的郵件
mail
輸入郵件編號查看內容,按 q
退出。
故障排除
-
連接被拒絕:
- 檢查 Postfix 是否運行:
sudo service postfix status
- 確認監聽地址:
sudo ss -tuln | grep :25
- 臨時關閉 WSL 防火墻:
sudo ufw disable
- 檢查 Postfix 是否運行:
-
郵件未送達:
- 檢查接收者用戶名是否正確
- 查看郵件隊列:
sudo mailq
- 檢查日志:
sudo grep 'status=sent' /var/log/mail.log
-
IP 地址變化問題:
# 在 WSL 中創建固定主機名 sudo nano /etc/hosts 127.0.0.1 wsl-host # 添加這一行
在 Windows 中發送郵件到
wsl-host
代替 IP
安全說明(測試環境適用)
- 此配置開放了 SMTP 端口到本地網絡,僅適用于開發測試
- 生產環境需要:
- 啟用 SMTP 認證
- 配置 TLS 加密
- 限制
mynetworks
范圍 - 使用更安全的郵件服務配置
注意:WSL 的 IP 地址在每次重啟后可能變化,如需固定 IP,需配置 WSL 網絡或使用 DNS 解析。