Sp_send_dbmail вставить файл mhtml в тело
У меня есть отчет SSRS, который мне нужно встроить в тело письма с использованием хранимой процедуры sp_dbmail в SQL Server. Я могу сделать это с помощью внешнего интерфейса Outlook, добавив экспорт .mhtml отчета SSRS с помощью опции "Вставить как текст" при прикреплении файла.
Есть ли способ сделать это с помощью sp_dbmail sproc?
Я использую SQL Server 2014 Standard
Ответы
Ответ 1
Да, это возможно, читая содержимое файла в переменной, а затем передавая его в 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
(см. Ответ, отправленный @Pops для получения подробной информации о том, как преобразовать mhtml
в html
).
Ответ 2
В случае, если люди задаются вопросом, так я преобразовал mhtml в html с помощью SQL.
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';