Tengo una pregunta de dos partes relacionada con el envío de resultados de consulta como archivos adjuntos utilizando sp_send_dbmail.sp_send_dbmail adjuntar archivos almacenados como varbinary en la base de datos
Problema 1: Solo se abrirán los archivos .txt básicos. Cualquier otro formato como .pdf o .jpg está dañado.
Problema 2: Al intentar enviar varios archivos adjuntos, recibo un archivo con todos los nombres de los archivos pegados.
estoy ejecutando SQL Server 2005 y tengo una tabla que almacena los documentos cargados:
CREATE TABLE [dbo].[EmailAttachment](
[EmailAttachmentID] [int] IDENTITY(1,1) NOT NULL,
[MassEmailID] [int] NULL, -- foreign key
[FileData] [varbinary](max) NOT NULL,
[FileName] [varchar](100) NOT NULL,
[MimeType] [varchar](100) NOT NULL
También tengo una mesa con cosas MassEmail de correo electrónico estándar. Aquí está el script SQL Send Mail. Por brevedad, he excluido declaraciones de declaración.
while ((select count(MassEmailID) from MassEmail where status = 20)>0)
begin
select @MassEmailID = Min(MassEmailID) from MassEmail where status = 20
select @Subject = [Subject] from MassEmail where MassEmailID = @MassEmailID
select @Body = Body from MassEmail where MassEmailID = @MassEmailID
set @query = 'set nocount on; select cast(FileData as varchar(max)) from Mydatabase.dbo.EmailAttachment where MassEmailID = '+ CAST(@MassEmailID as varchar(100))
select @filename = ''
select @filename = COALESCE(@filename+ ',', '') +FileName from EmailAttachment where MassEmailID = @MassEmailID
exec msdb.dbo.sp_send_dbmail
@profile_name = 'MASS_EMAIL',
@recipients = '[email protected]',
@subject = @Subject,
@body [email protected],
@body_format ='HTML',
@query = @query,
@query_attachment_filename = @filename,
@attach_query_result_as_file = 1,
@query_result_separator = '; ',
@query_no_truncate = 1,
@query_result_header = 0;
update MassEmailset status= 30,SendDate = GetDate() where MassEmailID = @MassEmailID
end
Soy capaz de leer correctamente los archivos de la base de datos, así sé que los datos binarios no están dañados.
Los archivos .txt solo se leen cuando lanzo FilaData a varchar. Pero claramente los encabezados originales se pierden. También vale la pena señalar que los tamaños de archivos adjuntos son diferentes a los archivos originales. Eso es muy probablemente debido a una codificación incorrecta. Así que espero que haya una forma de crear encabezados de archivos usando el tipo mimet almacenado, o alguna forma de incluir encabezados de archivos en los datos binarios.
Tampoco estoy seguro de los valores de los últimos parámetros, y sé que la fusión no es del todo correcta, ya que antepone el primer nombre de archivo con una coma. Pero una buena documentación es casi imposible de encontrar. ¡Por favor ayuda!
Gracias por su respuesta. Parece que podría funcionar, pero las restricciones de seguridad prohíben ejecutar xp_cmdshell, especialmente con los archivos cargados por el usuario. Parece que tendré que tomar un enfoque diferente. –
cualquier suerte sobre este tema. –