SQL sp_send_dbmail отправляет электронное письмо с вложением, файл PDF поврежден

У меня есть хранимая процедура для отправки электронной почты, которая будет вызываться при вставке записи в таблицу. Я хотел прикрепить документ, добавленный в таблицу, и отправить электронное письмо. Я могу получить прикрепленный файл, но он поврежден, когда я его открываю (говорит, что файл был поврежден).

Кто-нибудь может мне помочь, пожалуйста! вот код, я исключил объявления объявлений для простоты.

Select @query = 'set nocount on; select cast(Document as varchar(max)) from dbo.myTable where ID = '+ CAST(@ID as varchar(100))

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Profile1', 
  @recipients = @RecipientEmail,
  @subject = @Subject,
  @body = @Body,
  @importance = 'HIGH',
  @query_attachment_filename = 'att.pdf',
  @attach_query_result_as_file = 1,
  @query_result_no_padding=1,
  @query = @query,
  @query_no_truncate = 1,
  @query_result_header  = 0,
  @exclude_query_output = 0,
  @append_query_error = 1,
  @query_result_width = 32767,
  @body_format ='HTML'

Я ценю любую помощь. Заранее спасибо.


person Dagim Belayneh    schedule 28.05.2016    source источник


Ответы (3)


Единственный способ сделать это — временно экспортировать файл в локальную папку, а затем прикрепить его к электронному письму.

set @Pid=CAST(@ID as varchar(100)) 
SELECT @query= 'BCP "SELECT Document from myDB.dbo.myTable where ID ='+@Pid+'" queryout "E:\Log_Files\Attached.pdf" -T -N'
        EXEC xp_cmdshell @query; --, NO_OUTPUT;      


  EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Profile1', 
  @recipients = @InviteeEmail,
  @subject = @ReferenceNo,
  @body = @PublicationContent,
  @importance = 'HIGH',
  @file_attachments = 'E:\Log_Files\Attached.pdf',
  @body_format ='HTML' --because

END
Go

Подробнее об утилите BCP можно прочитать здесь.

person Dagim Belayneh    schedule 03.06.2016

Использование SQL Server 2014. Дайте имя таблицы в 3-х частях. servername.dbname.dbo.tblname

DECLARE @Body VARCHAR(8000)
DECLARE @Qry varchar(8000)

SET @Body ='Hi All,'

SET @Qry='set nocount on;select * from tbl_name'

DECLARE
@tab char(1) = CHAR(9)
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'mailid',
@blind_copy_recipients='mailid',
@body= @Body,
@query=@Qry,
@subject='Send db mailer with attachment',
@attach_query_result_as_file = 1,
@query_attachment_filename='filename.xls',
@query_result_separator=@tab,
@query_result_no_padding=1
person Balaji Dinakaran    schedule 27.06.2017

Кажется, что только текстовые файлы поддерживаются в качестве вложений из-за того, как они закодированы. Для решения и дополнительной информации вы можете посмотреть эту ранее заданный вопрос.

person Fredrik Lundvall    schedule 28.05.2016
comment
Спасибо, что напомнили мне, посмотрите еще раз. Это действительно сработало. - person Dagim Belayneh; 02.06.2016