sp_send_dbmail在主体中嵌入了mhtml文件

时间:2017-03-17 21:54:30

标签: html sql sql-server ssrs-2012 sp-send-dbmail

我有一份SSRS报告,我需要使用SQL Server中的sp_dbmail存储过程将其嵌入到电子邮件正文中。通过使用"插入文本"附加SSRS报告的.mhtml导出,我可以使用Outlook的前端执行此操作。附加文件时的选项。

有没有办法可以使用sp_dbmail sproc做到这一点?

我使用的是SQL Server 2014 Standard

2 个答案:

答案 0 :(得分:7)

是的,可以通过将文件内容读入变量,然后将其传递给sp_send_dbmail来实现。以下是如何做到的:

declare @htmlBody varchar(max)

SELECT @htmlBody=BulkColumn
FROM   OPENROWSET(BULK N'c:\test\test.html',SINGLE_BLOB) x;



EXEC msdb.dbo.sp_send_dbmail
    @profile_name = N'Email', -- you should use the profile name of yours, whatever is set up in your system.
    @recipients = 'recipient_email_id',
    @subject = 'Test',
    @body = @htmlBody,
    @body_format = 'html',
    @from_address = 'sender_email_id';

这会将c:\test\test.html的内容嵌入电子邮件正文中。当然,你可以在身体上添加更多。

更新:

仅当您正在阅读的文件包含 HTML 内容时,此功能才有效。如果您希望将其设为mhtml,则需要将mhtml文件转换为html(有关如何转换mhtml的详细信息,请参阅@Pops发布的答案到html)。

答案 1 :(得分:4)

如果人们想知道,这就是我使用SQL将mhtml转换为html的方式。

declare @source varchar(max), 
@decoded varchar(MAX)

SELECT @source =BulkColumn
FROM   OPENROWSET(BULK N'c:\test\test.mhtml',SINGLE_BLOB) x;

SET @source = SUBSTRING(@source,CHARINDEX('base64',@source,1)+10,LEN(@source))
SET @source = SUBSTRING(@source,1,CHARINDEX('-',@source,CHARINDEX('base64',@source,1)+10)-5)
SET @decoded = cast('' AS xml).value('xs:base64Binary(sql:variable("@source"))', 'varbinary(max)')

EXEC msdb.dbo.sp_send_dbmail
@profile_name = N'Email', -- you should use the profile name of yours, whatever is set up in your system.
@recipients = 'recipient_email_id',
@subject = 'Test',
@body = @decoded,
@body_format = 'html',
@from_address = 'sender_email_id';