在SQL Database Mail中配置Sendgrid时无法连接邮件服务器如何解决
解决方案
核心疑问说明
Sendgrid的SMTP接口仅支持以固定值apikey为用户名、完整SG.xxxx格式API密钥为密码的基本身份验证,没有提供其他非基本身份验证的SMTP鉴权方案,你不需要尝试其他鉴权逻辑,当前配置失败是TLS加密选项未开启导致的。
1. SSMS图形化配置修正
- 打开「配置数据库邮件」向导,选择「管理现有账户」,选中你创建的Sendgrid邮件账户进入编辑界面
- 外发邮件服务器配置保持如下参数:
- 服务器地址:
smtp.sendgrid.net - 端口:
587 - 必须勾选**「服务器需要安全身份验证(SSL)连接」**选项
- 服务器地址:
- 身份验证部分保持基本身份验证,参数不要修改:
- 用户名:
apikey(不要填你的邮箱地址) - 密码:完整的
SG.xxxx格式API密钥,注意不要带前后空格
- 用户名:
- 保存配置后重启SQL Server Agent服务,再发送测试邮件验证即可。
2. 存储过程修改配置方式
如果需要通过系统存储过程修改配置,直接执行以下SQL,替换对应占位符即可:
EXECUTE msdb.dbo.sysmail_update_account_sp @account_name = N'你创建的Database Mail账户名', @email_address = N'abc@mydomain.com', @display_name = N'自定义发件人显示名', @mailserver_name = N'smtp.sendgrid.net', @port = 587, @enable_ssl = 1, -- 此处必须设为1启用TLS加密 @username = N'apikey', @password = N'你的SG.xxxx格式完整API密钥';
执行完成后重启SQL Server Agent服务生效。
额外排查项
如果修改后仍发送失败,优先排查以下配置:
- 确认Sendgrid侧API密钥已经开启
Mail Send权限,如果你配置了API密钥的IP访问限制,需要把SQL服务器的公网出口IP加入白名单 - 执行以下SQL查看Database Mail的错误日志,定位具体报错原因:
SELECT * FROM msdb.dbo.sysmail_event_log ORDER BY log_date DESC;
- 确认SQL服务器的出站防火墙、云服务商安全组没有限制587端口的TCP访问。
内容的提问来源于stack exchange,提问作者Aj S
相关产品推荐
相关产品推荐

