在 WSL 的 Debian 12 中启动 SMTP 服务(以 Postfix 为例),请按以下步骤操作:
1. 安装 Postfix
bash
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
编辑主配置文件:
bash
sudo nano /etc/postfix/main.cf
确保以下关键配置:
conf
inet_interfaces = loopback-only # 只允许本地连接
inet_protocols = ipv4 # 仅使用 IPv4(避免 WSL 兼容性问题)
mydestination = $myhostname, localhost.$mydomain, localhost
保存并退出(Ctrl+X
→ Y
→ Enter
)。
3. 启动 Postfix
bash
sudo service postfix start
-
设置开机自启 (WSL 需额外配置):
bashsudo nano /etc/rc.local
添加以下内容:
bash#!/bin/sh service postfix start exit 0
保存后赋予可执行权限:
bashsudo chmod +x /etc/rc.local
4. 测试 SMTP 服务
方法 1:本地发送测试邮件
bash
echo "Test email body" | mail -s "Test Subject" your-local-username@$(hostname)
-
查看邮件日志:
bashtail -f /var/log/mail.log
-
读取邮件:
bashmail
方法 2:使用 telnet
手动测试
bash
sudo apt install telnet
telnet localhost 25
连接后输入:
plaintext
EHLO localhost
MAIL FROM: <test@localhost>
RCPT TO: <your-local-username@localhost>
DATA
Subject: Test
This is a test email.
.
QUIT
5. 常见问题解决
-
端口占用 :确保
25
端口空闲:bashsudo ss -tulnp | grep :25
-
防火墙:WSL 无需额外配置防火墙。
-
邮件发送失败 :
- 检查日志:
tail -f /var/log/mail.log
- 确保配置中
inet_interfaces = loopback-only
。
- 检查日志:
6. 外部邮件发送配置(可选)
若需发送到外部邮箱(如 Gmail),需配置中继:
-
编辑
/etc/postfix/main.cf
,添加:confrelayhost = [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
-
创建认证文件:
bashsudo nano /etc/postfix/sasl_passwd
内容:
plaintext[smtp.gmail.com]:587 [email protected]:your-app-password
-
生成权限文件:
bashsudo postmap /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd*
-
重启 Postfix:
bashsudo 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 中)
bash
sudo nano /etc/postfix/main.cf
进行以下修改:
conf
# 允许监听所有网络接口(包括 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:
bash
sudo service postfix restart
步骤 2:获取 WSL 的 IP 地址(在 Debian 中)
bash
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 →
- 打开命令提示符:
cmd
telnet 172.27.112.214 25
- 手动输入 SMTP 命令:
plaintext
EHLO windows
MAIL FROM: <test@windows>
RCPT TO: <your_linux_username> # 使用 Linux 用户名
DATA
Subject: Test from Windows
This is a test email
. # 单独一行输入点结束
QUIT
方法 2:使用 PowerShell 脚本
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 = $To
From = $From
Subject = $Subject
Body = $Body
SmtpServer = $SmtpServer
Port = $Port
}
Send-MailMessage @Message -UseSsl:$false
方法 3:使用 Python 脚本
保存为 send_mail.py
:
python
import smtplib
smtp_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!")
运行:
cmd
python send_mail.py
步骤 4:在 Debian 中查收邮件
bash
# 查看邮件日志
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 地址变化问题:
bash# 在 WSL 中创建固定主机名 sudo nano /etc/hosts 127.0.0.1 wsl-host # 添加这一行
在 Windows 中发送邮件到
wsl-host
代替 IP
安全说明(测试环境适用)
- 此配置开放了 SMTP 端口到本地网络,仅适用于开发测试
- 生产环境需要:
- 启用 SMTP 认证
- 配置 TLS 加密
- 限制
mynetworks
范围 - 使用更安全的邮件服务配置
注意:WSL 的 IP 地址在每次重启后可能变化,如需固定 IP,需配置 WSL 网络或使用 DNS 解析。