SQL Server 2012 Database Mail提示邮件服务器故障无法发信问题咨询
SQL Server 2012 Database Mail 发信失败排查方案
账户1(587端口SSL,证书校验失败)排查
- 注意SQL Server的Database Mail运行在SQL Server服务账号的上下文下,不是当前登录用户的证书存储,如果之前是在当前用户证书存储安装的证书,SQL Server服务无法读取:
- 按下Win+R输入
mmc打开控制台,依次点击文件→添加/删除管理单元→选择「证书」→添加→选择「计算机账户」→下一步→本地计算机→完成,确认保存 - 将邮件服务器的根证书、中级证书全部导入到「本地计算机→受信任的根证书颁发机构→证书」目录下
- 导入完成后重启SQL Server服务,让服务读取新的证书存储
- 按下Win+R输入
- 确认证书的通用名称(CN)或者使用者备用名称(SAN)里包含你Database Mail配置中填写的SMTP服务器地址,不要直接填IP,要填证书绑定的域名,否则会触发域名不匹配的校验错误
- 测试环境如果使用自签名证书不需要严格校验(生产环境不推荐),可以在Database Mail配置中关闭SMTP的SSL证书校验
账户2(465端口SSL,超时)排查
- 先检查服务器出站规则是否开放465端口的TCP出站权限:
- 用管理员权限打开cmd,执行
telnet <SMTP服务器地址> 465,如果连不上说明是防火墙/安全组限制,先协调运维放开对应出站端口 - 如果telnet可以连通,检查SQL Server服务账号是否有出站访问465端口的权限,部分企业的组策略会限制服务账号的网络访问权限
- 用管理员权限打开cmd,执行
- 确认SMTP服务器的465端口是否支持隐式SSL,SQL Server 2012版本的Database Mail对隐式SSL的支持存在兼容性问题,部分云厂商/自建SMTP的465隐式SSL会识别失败,可以更换为587端口的显式SSL测试
账户3(25端口无SSL,10060连接错误)排查
- 10060是标准的网络不可达错误,先确认25端口的出站是否被封禁:
- 目前国内云厂商默认都会封禁25端口的出站防止垃圾邮件,需要到云平台的安全配置页面申请解封25端口
- 本地服务器需要检查Windows防火墙、企业出口防火墙是否开放25端口的TCP出站权限,同样先用
telnet <SMTP服务器地址> 25测试连通性
- 确认SMTP服务器是否允许25端口无SSL连接,现在大部分公共邮件服务商(腾讯、网易、Gmail等)都已经关闭了25端口的非加密连接,即使连通也会拒绝发信
通用验证步骤
所有配置修改完成后,执行以下SQL语句测试发信:
EXEC msdb.dbo.sp_send_dbmail @profile_name = '你配置的邮件配置文件名', @recipients = '测试收件邮箱地址', @body = 'Database Mail测试邮件', @subject = 'SQL Server测试邮件';
如果仍然报错,可以查询Database Mail的日志获取更详细的错误信息:
SELECT * FROM msdb.dbo.sysmail_event_log ORDER BY log_date DESC;
内容的提问来源于stack exchange,提问作者Rauf
相关产品推荐
相关产品推荐

