SQL Server sp_send_dbmail发送邮件转短信时无正文问题求助
解决SQL Server sp_send_dbmail发送短信无法显示正文的问题
我之前也遇到过一模一样的情况——用sp_send_dbmail给短信号码发邮件,普通邮箱能正常显示正文,但短信里就是看不到内容。核心问题其实是短信网关对邮件格式的解析逻辑和普通邮箱完全不同,SQL Server的dbmail默认设置刚好踩了网关的“雷区”,给你几个亲测有效的解决办法:
1. 强制发送纯文本格式
绝大多数短信网关只支持纯文本内容,而dbmail默认会发送HTML格式的邮件。网关遇到HTML标签时,要么直接过滤掉所有内容,要么只显示一堆乱码标签。解决办法就是在调用sp_send_dbmail时明确指定@body_format='TEXT':
EXEC msdb.dbo.sp_send_dbmail @profile_name = '你的邮件配置文件名', @recipients = '138xxxxxxx@139.com', -- 替换成对应运营商的短信网关邮箱 @subject = '短信通知标题', @body = '这是要在短信里显示的正文内容', @body_format = 'TEXT'; -- 关键参数,强制纯文本发送
2. 确认短信网关邮箱地址的正确性
不同运营商的短信转邮件网关后缀不一样,用错地址可能导致网关解析异常:
- 中国移动:
手机号@139.com - 中国联通:
手机号@wo.cn - 中国电信:
手机号@189.cn
一定要确认你使用的后缀是对应运营商的官方网关地址,避免因为地址错误导致内容丢失。
3. 简化正文内容,适配短信限制
短信有严格的长度限制(单条一般70字符左右,长短信会拆分,但网关对长邮件的处理可能不稳定),而且特殊字符(比如多行换行、特殊符号)可能被网关过滤或截断。建议:
- 把正文控制在单条短信长度内,尽量简洁
- 用单个空格代替多行换行,避免多余的空白
- 去掉不必要的标点或特殊符号,只保留核心信息
4. 检查dbmail的全局默认配置
如果你的系统里大部分邮件都是发给短信网关的,可以修改dbmail的全局默认格式,避免每次调用都要加参数:
EXEC msdb.dbo.sysmail_configure_sp @parameter_name = 'default_body_format', @parameter_value = 'TEXT';
⚠️ 注意:修改全局配置会影响所有使用dbmail发送的邮件,如果你同时需要给普通邮箱发HTML邮件,建议还是在单个调用里指定@body_format参数,不要修改全局设置。
5. 排除网关本身的问题
如果上面的方法都没用,先排除是不是SQL Server的问题:用普通邮件客户端(比如Outlook、Foxmail)发一封纯文本邮件到同一个短信网关邮箱,如果还是无法显示正文,那就是运营商网关的限制,需要联系运营商确认支持的邮件格式、字符编码等细节。
内容的提问来源于stack exchange,提问作者Brian Swart
相关产品推荐
相关产品推荐

