sp отправить dbmail вставить файл mhtml в тело

У меня есть отчет SSRS, который мне нужно встроить в тело электронной почты с помощью sp_dbmail, хранящегося в SQL Server. Я могу сделать это, используя переднюю часть Outlook, прикрепив.mhtml экспорт отчета SSRS с помощью опции "вставить как текст" при присоединении файла.

есть ли способ сделать это с помощью sp_dbmail sproc?

Я использую стандарт SQL Server 2014

2 ответов


да, можно прочитав содержимое файла в переменную, а затем передает их 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, вам необходимо преобразовать до html(см. ответ, опубликованный @Pops для получения подробной информации о том, как конвертировать mhtml to html).


если людям интересно, вот как я преобразовал 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';