【问题标题】:SQL Server sp_send_dbmail prevent html encoding in bodySQL Server sp_send_dbmail 阻止正文中的 html 编码
【发布时间】:2020-10-01 14:29:29
【问题描述】:

如何防止在使用 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

但是,如果我希望 SOURCE 仍然有 + 而不是 + 怎么办?

关于我为什么需要这样做的长篇故事,但解决这个问题对我有很大帮助。有没有办法“逃避”我身体参数中的 + ?或者关于如何防止这种编码的任何其他想法?

【问题讨论】:

    标签: html sql-server encoding sp-send-dbmail


    【解决方案1】:

    你可以尝试做一个简单的 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 |
    +-----------+
    

    【讨论】:

    • 所以我尝试了这个,但在此过程中我想我发现这里还有其他东西在起作用。当我发送电子邮件时,字符串正文会显示我想要的内容。当我在 Outlook(和 Windows 10 邮件)中收到电子邮件时,+ 符号正在被编码。在其他浏览器(Android 上的蓝色邮件、我的 ISP 提供的基于 Web 的电子邮件客户端和 iPhone 上的非库存电子邮件客户端)中不会发生这种情况。
    • 可能有某种过滤器这样做是为了“保护”。如果它是特定于电子邮件客户端的,您可以尝试搜索该客户端。也许有一个设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多