2017-03-17 12 views
11

Mam raport SSRS, który muszę umieścić w treści wiadomości e-mail za pomocą sp_dbmail przechowywane proc w SQL Server. Mogę to zrobić za pomocą przedniego końca programu Outlook, dołączając eksport .mhtml raportu SSRS przy użyciu opcji "Wstaw jako tekst" podczas dołączania pliku.sp_send_dbmail osadzić plik mhtml w ciele

Czy jest sposób, w jaki mogę to zrobić za pomocą sprocedunku sp_dbmail?

Używam SQL Server 2014 Standardowy

Odpowiedz

6

Tak, to jest możliwe odczytanie zawartości pliku do zmiennej, a następnie przekazując go do sp_send_dbmail. Oto w jaki sposób można to zrobić:

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'; 

To będzie osadzać zawartość c:\test\test.html do ciała pocztowego. Oczywiście możesz dodać więcej do ciała.

UPDATE:

ta działa tylko wtedy, gdy plik czytasz zawiera HTML zawartość. Jeśli chcesz sprawić, by działało na mhtml, musisz przekonwertować plik mhtml na html (Zobacz odpowiedź wysłaną przez @Pops, aby uzyskać szczegółowe informacje na temat konwertowania mhtml na html).

+0

Dzięki za odpowiedź. Kiedy spróbuję tego co zasugerowałeś, osadza on tekst pliku .mhtml (jak to, co zobaczyłbym, gdybym go otworzył w notatniku). Nie przedstawia raportu tak, jak by wyglądał, gdybym otworzył plik w IE. – Pops

+0

Czy możesz umieścić minimalny przykład pliku '.mhtml' (Twój raport)? Czy ustawiłeś '@body_format = 'html''? – ahoxha

+0

Widzę, gdzie jest problem. Działa tylko wtedy, gdy plik jest HTML, ale nie MHTML. – ahoxha

4

W przypadku, gdy ludzie zastanawiają się, w ten sposób przekonwertowałem mhtml na html przy użyciu 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'; 
Powiązane problemy