SQL Server sp_send_dbmail阻止正文中的html编码

问题描述

如何防止使用sql Server的sp_send_dbmail发送的电子邮件正文中的编码?

示例:

EXEC msdb.dbo.sp_send_dbmail
     @recipients='my.email@somedomain.com',@subject = 'sql email test',@body = 'this+that',@body_format = 'HTML'

我收到的电子邮件的html来源如下:

this`+`that

身体看起来很好

this+that

但是,如果我想让源仍然有+而不是+呢?

关于为什么需要执行此操作的悠久故事,但是解决此问题将极大地帮助我。有没有办法“逃脱”我的body参数中的+?还是关于如何防止这种编码的其他想法?

解决方法

您可以尝试做一个简单的XML hack:

DECLARE @source VARCHAR(255) = 'this`+`that';

DECLARE @body VARCHAR(255)= CAST ( CAST ( 'this`+`that' AS XML ) AS VARCHAR(255) );
SELECT @body AS body;

返回

+-------------+
|    body     |
+-------------+
| this`+`that |
+-------------+

但是,这不会消除您的反引号。您可以根据需要向REPLACE添加呼叫:

DECLARE @body VARCHAR(255)= REPLACE ( CAST ( CAST ( 'this`+`that' AS XML ) AS VARCHAR(255) ),'`','' );

这将导致:

+-----------+
|   body    |
+-----------+
| this+that |
+-----------+

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...