SMTP测试环境搭建指南
更新时间: 2026/02/04
在Gitcode上查看源码本模块用于指导如何搭建本地SNMP Trap测试环境
下载 hMailServer
通过hMailServer官网 https://www.hmailserver.com/download 下载,默认安装即可
配置 hMailServer
启动 hMailServer
启动需要选择用户,使用默认用户,输入安装时填写的密码即可启动
添加域名(即发送和接收邮箱的域名)
此处以 openubmc.com 为例
添加邮箱账户(后续配置客户端邮箱需要使用到此处的邮箱名和密码)
此处以 sender@openubmc.com, receiver0@openubmc.com 为例
添加路由
添加SSL证书(启用TLS协议时需要配置SMTP服务器证书)
若没有SSL证书则点击此处跳转到制作证书
设置IP地址范围(作为防火墙以及流量控制)
默认有ipv4的地址范围, 直接设置即可
若需要使用ipv6, 则需要手动添加ipv6范围
设置TPC/IP端口(SMTP服务器会对设置的端口进行监听)
需要配置的端口有:25, 110, 143, 465
若需要使用ipv6, 则需要额外再配置ipv6地址的端口,只需要将ip地址修改为 :: 即可。此处仅展示25端口,其他三个端口需要同样方式修改
配置客户端(接收邮箱)
此处以 outlook 邮箱为例, 添加账户: 文件 -> 信息 -> 添加账户(打开高级选项, 选中让我手动设置我的账户)
账户类型选择 IMAP
接收邮件使用143端口, 加密方法需要与 hMailServer 中设置的 25 端口一致。待发邮件使用465端口, 加密方法需要与 hMailServer 中设置的 465 端口一致
BMC发送邮件通知测试
进入邮件通知页面: 维护诊断 -> 告警上报 -> 邮件通知
需要配置的内容如下:
- 配置SMTP服务器地址为启动hMailServer的服务器IP
- 配置端口为25, 不启用TLS
- 配置发件用户名、密码和邮件地址
- 配置接收告警的邮件地址, 并设置状态为开启
点击测试即可发送邮件通知
使用加密发送邮件通知
加密发送则使用465端口,此处校验端服务器证书需要提前导入对应的CA证书,CA证书可以自己自制,参考制作证书
使用ipv6协议发送邮件通知
前提
- BMC开启了ipv6使能,并正确配置ipv6地址,BMC能通过ipv6地址与SMTP服务器的ipv6地址通信
- hMailServer 版本大于或等于5.4(可以通过 Help->About 查询当前版本)
配置iprange
见设置IP地址范围中的ipv6部分
配置ipv6地址的端口
见设置TPC/IP端口中的ipv6部分
发送邮件通知测试
制作证书
- 此处使用 OpenSSL 创建一个自签名的 CA(证书颁发机构)证书,并用它签发一个用于 SMTP 服务器的证书
创建项目目录
bash
# 进入项目目录后创建子目录
mkdir -p ca/private ca/certs ca/csr smtp-server/private smtp-server/csr smtp-server/certs config生成 CA 私钥
bash
openssl genrsa -out ca/private/ca.key 4096
chmod 600 ca/private/ca.key # 仅 root 可读写创建 CA 自签名证书
bash
# 创建 CA 请求配置文件
cat > config/ca-req.cnf <<EOF
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
C = CN
ST = GuangDong
L = DongGuan
O = MyOrg Internal CA
CN = MyOrg Root CA
EOF
# 生成 CA 的 CSR
openssl req -new \
-key ca/private/ca.key \
-out ca/csr/ca.csr \
-config config/ca-req.cnf
# 创建 CA 证书扩展配置
cat > config/ca.ext <<EOF
[ ca_cert ]
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, keyCertSign, cRLSign
subjectKeyIdentifier = hash
EOF
# 自签名生成合规的 CA 证书(有效期 10 年)
openssl x509 -req \
-in ca/csr/ca.csr \
-signkey ca/private/ca.key \
-sha256 \
-days 3650 \
-out ca/certs/ca.crt \
-extfile config/ca.ext \
-extensions ca_cert为 SMTP 服务器生成私钥
bash
openssl genrsa -out smtp-server/private/smtp-server.key 2048
chmod 600 smtp-server/private/smtp-server.key生成 SMTP 服务器的 CSR
bash
# 创建 SMTP 服务器 CSR 配置(含 SAN)
cat > config/smtp-req.cnf <<EOF
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
C = CN
ST = GuangDong
L = DongGuan
O = MyOrg
CN = smtp.example.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = smtp.example.com
DNS.2 = mail.example.com
# DNS.3 = your-backup-host.example.com # 按需添加
# IP.1 = 192.168.1.100 # 如需支持 IP 地址
EOF
openssl req -new \
-key smtp-server/private/smtp-server.key \
-out smtp-server/csr/smtp-server.csr \
-config config/smtp-req.cnf创建 X.509 扩展配置文件
bash
cat > config/smtp.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = smtp.example.com
DNS.2 = mail.example.com
# DNS.3 = your-backup-host.example.com
# IP.1 = 192.168.1.100
EOF使用 CA 签发 SMTP 服务器证书
bash
openssl x509 -req \
-in smtp-server/csr/smtp-server.csr \
-CA ca/certs/ca.crt \
-CAkey ca/private/ca.key \
-CAcreateserial \
-out smtp-server/certs/smtp-server.crt \
-days 730 \
-sha256 \
-extfile config/smtp.ext最终产物
| 文件路径 | 描述 | 用途/重要性 |
|---|---|---|
ca/private/ca.key | CA 私钥,4096位长度 | 非常重要 - 创建自签名CA证书和签发服务器证书所需的核心私钥,必须妥善保管 |
ca/certs/ca.crt | 自签名的CA根证书,有效期10年 | 非常重要 - 用于客户端信任以及签发其他证书,需要导入到客户端的信任存储库中 |
smtp-server/private/smtp-server.key | SMTP服务器私钥,2048位长度 | 非常重要 - 配合SMTP服务器证书使用的私钥,确保安全传输,必须妥善保管 |
smtp-server/csr/smtp-server.csr | SMTP服务器的证书签名请求(CSR),包含公钥和标识信息 | 可选保留 - 签发证书后可删除,用于向CA申请证书时提供身份验证信息 |
smtp-server/certs/smtp-server.crt | 由内部CA签发的SMTP服务器证书,适用于SMTP服务,有效期2年 | 重要 - 部署于SMTP服务器上,与私钥一起使用来加密通信,并通过客户端验证服务器的身份 |
补充说明
ca/private/ca.key和smtp-server/private/smtp-server.key: 这些是敏感的私钥文件,应该严格保护其访问权限,避免未经授权的访问。ca/certs/ca.crt: 该证书需被分发并导入到所有希望连接至受保护的SMTP服务器的客户端的信任存储区中,以便建立信任链。smtp-server/certs/smtp-server.crt: 该证书与对应的私钥一起部署在SMTP服务器上,为邮件传输提供加密和身份验证服务。