简体   繁体   English

SQL Server SP_SEND_DBMAIL 图像文件附件

[英]SQL Server SP_SEND_DBMAIL Image file attachment

I am using a trigger on a table to send an email using sp_send_dbmail.我在表上使用触发器来使用 sp_send_dbmail 发送电子邮件。

I want to include a file attachment in the email of an image type.我想在图像类型的电子邮件中包含文件附件。

The raw data for the jpeg is stored in the ndl_Image column which is of type binary. jpeg 的原始数据存储在二进制类型的 ndl_Image 列中。

I have the following code:-我有以下代码:-

DECLARE @ReferenceID varchar(max)
DECLARE @Recipient varchar(Max)
DECLARE @Body varchar(max)
DECLARE @Subject varchar(max)
DECLARE @Q varchar(max)

--Get the EntryId and FormID for the inserted data.
SET @ReferenceID = 40
SET @Recipient = (SELECT ndl_CategorySendTo FROM ndl_config WHERE ndl_CategoryName = 'Dead Animal')
SET @Body = '<html>A new request has been created.</html>'
SET @Subject = 'NDL Report It: New Request #'+@ReferenceID
SET @Q = 'SELECT ndl_Image from dbo.ndl_data where ndl_ID ='+@ReferenceID
--Execute the stored procedure to send mail.
EXEC msdb.dbo.sp_send_dbmail

--Pass it the following paramaters.
@recipients=@Recipient,
@body=@Body, 
@subject=@Subject,
@profile_name='NDLProfile',
@body_format ='HTML',
    @execute_query_database='NDL_MX',
@query = @Q,
@attach_query_result_as_file = 1,
@query_attachment_filename = 'image.jpg'

This works ok but seems to return the query as a text file if i comment out the last line.这工作正常,但如果我注释掉最后一行,似乎将查询作为文本文件返回。

How can I get the attachment as a jpeg file????如何将附件作为 jpeg 文件获取????

Thanks.谢谢。

I don't think this is possible. 我不认为这是可能的。 As specified in the documentation for SP_SEND_DBMAIL : SP_SEND_DBMAIL的文档中所述

"When a query is specified, the result set is formatted as inline text. Binary data in the result is sent in hexadecimal format. "[emphasis added] “当指定查询时,结果集的格式为内联文本。 结果中的二进制数据以十六进制格式发送。 ”[强调添加]

The sample below will imbed images into the < img > tag, which will work for jpeg, png, and such.下面的示例将图像嵌入到 <img> 标签中,该标签适用于 jpeg、png 等。 It won't solve PDFs, but it does work with images, at least.它不会解决 PDF,但至少可以处理图像。

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 )

-- ================================

 declare @eRecipient nvarchar(max) = 'me@example.com';
 declare @eSubject nvarchar(max) = 'Testing!';
 declare @FileName nvarchar(2000);
 declare @MimeType nvarchar(200);
 declare @attachText nvarchar(max);
 declare @eBody nvarchar(max) =  '<html><head><style>table, th, td {border-collapse: collapse;border: 1px solid black;} img {width: 100%; max-width: 640px;}</style></head>' + 
                             '<body><h1>Data with pics!</h1><table>' + 
                             '<tr><th>Some text</th><th>Some Pics</th></tr>';
 

  declare c1 cursor for
    select FileName,
        MimeType, 
          /* MimeType should be something like 'image/jpeg' or 'image/png' */
        cast('' as xml).value('xs:base64Binary(sql:column("FileData"))', 'varchar(max)') attachText
          /* the above uses XML commands to convert the binary attachment to UUencoded text */
    from EmailAttachment
    order by 1;

open c1;
fetch next from c1 into @FileName, @MimeType, @attachText
while @@FETCH_STATUS = 0
begin
    set @eBody = @eBody + '<tr><td>Filename: ' + @FileName + 
       '</td><td><img src="data:' + @contentType + ';base64,' +
        @AttachText + '="></td></tr>';
    /* note that the img tag contents the encoded image data, the mime type, and that it ends in an = sign. */
    fetch next from c1 into @FileName, @MimeType, @attachText
end;
close c1;
deallocate c1;
set @eBody = @eBody + '</table></body></html>';

exec msdb.dbo.sp_send_dbmail
    @recipients = @eRecipient, @body = @eBody, @subject = @eSubject, @body_format='HTML'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM