Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отправка письма  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
Отправляю запросом письмо. с помощью msdb.dbo.sp_send_dbmail.
Задача - просто создать письмо и прикрепить к нему мой файлик. Возможно ли это сделать? Прикрепляется мой файл - только как результат выборки, т.е. все что в нем было убивается и записывается результат. если не указывать запрос - то файл не присоединяется.

отправляю след образом

        ADOQueryTemp.SQL.Text := 'DECLARE @sub VARCHAR(100) ' +
          'DECLARE @qry VARCHAR(1000) ' +
          'DECLARE @msg VARCHAR(250) ' +
          'DECLARE @query NVARCHAR(1000) ' +
          'DECLARE @query_attachment_filename NVARCHAR(520) ' +

          'SELECT @sub = ' + QuotedStr('TEST XML ATTACHMENT') + ' ' +
          'SELECT @msg = ' + QuotedStr('Please refer to the attached spread sheet for the report.') + ' ' +
          'SELECT @query = ' + QuotedStr('SET NOCOUNT ON; Select top 10 * from master..sysobjects WITH(NOLOCK)') + ' ' +

          'SELECT @query_attachment_filename = ' + QuotedStr(DM.PkZip.ZipName) + ' ' +

          'EXEC msdb.dbo.sp_send_dbmail ' +
          '            @profile_name = ' + QuotedStr('XXX') + ', ' +
          '            @recipients = ' + QuotedStr('XXX') + ', ' +
          '            @copy_recipients = ' + QuotedStr('XXX') + ', ' +
          '            @body = @msg, ' +
          '            @subject = @sub, ' +
          '            @query = @query, ' +
          '            @query_attachment_filename = @query_attachment_filename, ' +
          '            @attach_query_result_as_file = 1 ' +
          '            @query_result_header = 1, ' +
          '            @query_result_width = 256 , ' +
          '            @query_result_separator = ' + QuotedStr('   ') + ' , ' +
          '            @query_result_no_padding =1; ';
14 май 12, 12:37    [12549201]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
user89
Member

Откуда:
Сообщений: 2083
Nakeshi,
результат SQL-запроса можно отправить по почте без вложения отдельным файлом.
Несколько вариантов:
Database mail
14 май 12, 12:45    [12549253]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
результат у меня получается отправить. интересует возможность создать письмо и прикрепить именно мой файл, которых хранится на винте.
14 май 12, 12:47    [12549272]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nakeshi
интересует возможность создать письмо и прикрепить именно мой файл, которых хранится на винте.

Ну так уберите в вашем примере выполнение запроса и прикрепление его результата
14 май 12, 13:03    [12549424]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
файл тогда не присоединяется - создается просто письмо. что убрать можно ?
14 май 12, 14:03    [12550038]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nakeshi
файл тогда не присоединяется - создается просто письмо. что убрать можно ?

Нужно показать, как вы пытаетесь отправить файл
14 май 12, 15:55    [12551076]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
Glory
Nakeshi
файл тогда не присоединяется - создается просто письмо. что убрать можно ?

Нужно показать, как вы пытаетесь отправить файл


вот такой запрос формирует и отправляет просто письмо без вложения. Письмо приходит - приаттаченного файла нет.

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@query_attachment_filename = '\\XXX\XXX.csv';


Задача - в это письмо приаттачить файл, который лежит у меня на сети.

Если делаю вот так - то письмо приходит уже с файлом, но мой шаблон полностью перезаписан результатом указанной в query выборки.

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@query = 'select * from XXX',
	@query_attachment_filename = '\\XXX\XXX.csv',		
	@attach_query_result_as_file = 1,
 	@query_result_header = 1,
        @query_result_width = 256 ,
	@query_result_separator = '	' ,
	@query_result_no_padding =1;
16 май 12, 10:57    [12561060]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
разобрался, прошу прощения. не заметил ключ

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@file_attachments = '\\XXX\XXX.csv';
16 май 12, 11:00    [12561083]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nakeshi
Задача - в это письмо приаттачить файл, который лежит у меня на сети.

Вы читали вообще описание параметров процедуры ?

[@query_attachment_filename = ] query_attachment_filename
Specifies the file name to use for the result set of the query attachment. query_attachment_filename is of type nvarchar(255), with a default of NULL. This parameter is ignored when attach_query_result is 0. When attach_query_result is 1 and this parameter is NULL, Database Mail creates an arbitrary filename.
16 май 12, 11:03    [12561107]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
в продолжении темы спрошу
а можно ли сделать отправку бинарника? не выгружая его на дисковую систему???
т.е.

declare @file varbinary(max)
select @file = file from table where id = 1

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@file_attachments = @file;


знаю что не совместимые типы данных, но может как-то есть способ обойти.
повторюсь - без выгрузки бинарника на диск
3 авг 12, 09:43    [12956344]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Glory
Member

Откуда:
Сообщений: 104760
Двоичник
а можно ли сделать отправку бинарника?

что такое "бинарник" ?
Двоичник
не выгружая его на дисковую систему???

А где тогда физически располагется ваш "бинарник" ?
3 авг 12, 11:27    [12957109]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2994
Двоичник
в продолжении темы спрошу
а можно ли сделать отправку бинарника? не выгружая его на дисковую систему???
т.е.

declare @file varbinary(max)
select @file = file from table where id = 1

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@file_attachments = @file;


знаю что не совместимые типы данных, но может как-то есть способ обойти.
повторюсь - без выгрузки бинарника на диск


скорее всего вам поможет параметр
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
Указывает, возвращается ли результирующий набор запроса как прикрепленный файл. Аргумент attach_query_result_as_file имеет тип bit и значение по умолчанию 0.
3 авг 12, 11:34    [12957151]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
HandKot
скорее всего вам поможет параметр
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
Указывает, возвращается ли результирующий набор запроса как прикрепленный файл. Аргумент attach_query_result_as_file имеет тип bit и значение по умолчанию 0.


не помог :(
вопрос актуален.

на почту пришло это

template_text
-------------
0xD0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000010000007100000000000000001000007300000001000000FEFFFFFF0000000070000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF

(1 rows affected)
3 авг 12, 12:33    [12957605]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2994
покажите как вызывали, скорее всего не правильно указали параметры
3 авг 12, 12:38    [12957643]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
HandKot
покажите как вызывали, скорее всего не правильно указали параметры


 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'Mail Profile dev',      
	@recipients = 'my@mail.ru',           
	@copy_recipients = 'XXX',            
    @body = 'Test',
    @query = 'select template_text from table where id = 1 ',
	@subject = 'Test',
	@attach_query_result_as_file = 1;    


как-то вот так.
3 авг 12, 12:52    [12957761]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
ой не, вот так :) напутал. простите



EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Mail Profile dev',
@recipients = 'my@mail.ru',
@copy_recipients = 'XXX',
@body = 'Test',
@subject = 'Test',
@query = 'select template_text from db_name.dbo.table where id = 1',
@query_attachment_filename = 'XXX.doc',
@attach_query_result_as_file = 1,
@query_result_header = 1,
@query_result_width = 256 ,
@query_result_separator = ' ' ,
@query_result_no_padding =1;

просстите за фолспост выше
3 авг 12, 12:53    [12957775]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Nakeshi,

У меня job'а отсылает уведомления таким вот образом, может подойдёт вариант:

declare @e_mail varchar (100)
select  @e_mail =  var0 FROM dbo.getOption (null,'REST_NOTIFY',null)
exec  proc_generate_excel_with_columns 'new', 'vw_QtyLessThanLimit', 'D:\flyfiles\rest.xls'
exec [dbo].[SendEmail] @e_mail,N'Остатки',



Вот процедура, которая формирует файл:

ALTER procedure [dbo].[proc_generate_excel_with_columns]
(
	@db_name	nvarchar(100),
	@table_name	nvarchar(100),	
	@file_name	nvarchar(100)
)
as

--Generate column names as a recordset
declare @columns nvarchar(max), @sql nvarchar(max), @data_file nvarchar(100)
select 
	@columns=coalesce(@columns+',','')+column_name+' as '+column_name 
from 
	information_schema.columns
where 
	table_name=@table_name
select @columns=''''''+replace(replace(@columns,' as ',''''' as '),',',',''''')

--Create a dummy file to have actual data
select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.xls'

--Generate column names in the passed EXCEL file
set @sql='exec master..xp_cmdshell ''bcp " select * from (select '+@columns+') as t" queryout "'+@file_name+'" -C WIN1251 -R  -c -T'''
exec(@sql)

--Generate data in the dummy file
set @sql='exec master..xp_cmdshell ''bcp "select * from '+@db_name+'..'+@table_name+'" queryout "'+@data_file+'" -C WIN1251  -R -c -T'''
exec(@sql)

--Copy dummy file to passed EXCEL file
set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''
exec(@sql)

--Delete dummy file 
set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''
exec(@sql)



А вот та, которая отправляет:
ALTER  PROCEDURE [dbo].[SendEmail]
@e_mail nvarchar (200),
@subject nvarchar (100),
@message nvarchar (4000),
@file_to_send nvarchar (4000) =  ''
AS
BEGIN
declare @sql varchar (2000), @_body nvarchar (400),
@_subject nvarchar (200)

if @e_mail is null return 1

set @_subject = '.....'

if ISNULL (@file_to_send,'') = ''
execute msdb..sp_send_dbmail @profile_name = 'mail_profile',
@body = @message,
@subject = @subject,
@recipients = @e_mail
else
execute msdb..sp_send_dbmail @profile_name = 'mail_profile',
@body = @message,
@subject = @subject,
@recipients = @e_mail,
@file_attachments = @file_to_send
END


IMHO, Я бы на твоём месте сделал процедуры на сервере и дёргал их из Delphi, а не городил на клиенте SQL.
3 авг 12, 13:13    [12957979]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
Romka-Fes,

но ведь у вас @file_to_send - это адрес к файлу на дисковом пространстве на сервере или доступное серверу к файлу.
а у меня он в таблице varbinary
вот в чем разница то. я категорически не хочу выгружать файл из БД на диск сервака. и отправлять именно профилем сервера.
есть способ отправлять через SMTP но там нужна авторизация от кого слать письма. а у меня нет такогологина. политика безопасности компании не разглашает пароли к таким служебным учеткам.
3 авг 12, 13:35    [12958226]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Двоичник,

а почему "категорически не хочу" выгружать на диск?
Если у вас нет паранойи, это не значит что за вами никто не следит?
И в чём принципиальная разница с точки зрения безопасности?
Если у кого-то есть доступ к диску, то явно не составит труда получить и доступ к SQL Server.
Кроме того, файл можно сформировать на диске, отправить и потом удалить.
автор
...и отправлять именно профилем сервера...
...есть способ отправлять через SMTP но там нужна авторизация.
есть способ отправлять через SMTP но там нужна авторизация от кого слать письма. а у меня нет такогологина. политика безопасности компании не разглашает пароли к таким служебным учеткам.

а что в вашем профиле почтовом на SQl Server указано, смотрели? Да, там учётка почтовая (адрес), и если требуется авторизация (не AD), то там и пароль указан. И по SMTP он отправляется PLAIN TEXT. Или у вас всё через SSL ходит? :)
3 авг 12, 14:41    [12958813]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
учетка там действительно есть. но пароль я не знаю. и мне его не сообщают. политика безопасности.
а параноя не у меня, а у наших безопасников. как только речь идет о подобных брешах с созданием файла и его же удалением - возникает мысль, а нельзя ли будет удалить какой0нить системный файл и тем самым поставить систему раком?

давайте не будем обсуждать мои проблемы в среде. а предложите, пожалуйста, вариант отправки бинарного файла из переменной.
спасибо
3 авг 12, 14:45    [12958844]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 292
up
6 авг 12, 08:32    [12966039]     Ответить | Цитировать Сообщить модератору
 Re: Отправка письма  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2994
Двоичник
в продолжении темы спрошу
а можно ли сделать отправку бинарника? не выгружая его на дисковую систему???
т.е.

declare @file varbinary(max)
select @file = file from table where id = 1

 EXEC msdb.dbo.sp_send_dbmail        
	@profile_name = 'XXX',      
	@recipients = 'XXX',           
	@copy_recipients = 'XXX',            
        @body = 'Test',
	@subject = 'Test',
	@file_attachments = @file;


знаю что не совместимые типы данных, но может как-то есть способ обойти.
повторюсь - без выгрузки бинарника на диск


оказывается, что нельзя
 sp_send_dbmail 
В результате >>>двоичные данные посылаются в шестнадцатеричном формате<<<
6 авг 12, 10:46    [12966463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить