发送存储在电子邮件正文中的图像字段中的图像sp_dbsend_mail

时间:2016-02-28 14:16:19

标签: sql-server stored-procedures varchar

数据库表有一个存储为image字段的图像 - 我能从数据库中提取这个图像,即在存储过程中作为变量拉动,还是必须使用像Crystal Reports这样的东西?

我希望将其包含在已发送的电子邮件中,但如果可能的话也不确定 - 现在想要完整的解决方案,如果它可能只是朝着正确的方向指示

“澄清 -
我有一个由游标运行的选择查询,并在交付完成后向客户发送电子邮件。这每5分钟运行一次 - 我可以扩展查询以包括我找到的图像列但是我不确定如何将其显示为电子邮件正文中的图像(图像是捕获的签名)这是直接运行在服务器上,如果更容易将图像作为附件发送是好的。 - “

提前致谢

2 个答案:

答案 0 :(得分:0)

在以下具体参数中查看sp_send_dbmail的文档:

  

[@q​​uery =]'查询'

     

是要执行的查询。查询结果可以作为文件附加,也可以包含在电子邮件正文中。查询的类型为nvarchar(max),并且可以包含任何有效的Transact-SQL语句。请注意,查询是在单独的会话中执行的,因此调用sp_send_dbmail的脚本中的局部变量不可用于查询。

  

[@execute_query_database =]' execute_query_database'

     

存储过程运行查询的数据库上下文。该参数的类型为sysname,默认为当前数据库。仅当指定了@query时,此参数才适用。

  

[@attach_query_result_as_file =] attach_query_result_as_file

     

指定查询的结果集是否作为附加文件返回。 attach_query_result_as_file的类型为bit,默认值为0.

     

当值为0时,查询结果将包含在@body参数内容之后的电子邮件正文中。值为1时,结果将作为附件返回。仅当指定了@query时,此参数才适用。

  

[@q​​uery_attachment_filename =] query_attachment_filename

     

指定用于查询附件的结果集的文件名。 query_attachment_filename的类型为nvarchar(255),默认值为NULL。当attach_query_result为0时,将忽略此参数。当attach_query_result为1且此参数为NULL时,数据库邮件会创建任意文件名。

因此,请选择适当的图像进行查询,并将其传递给@query参数。为其他参数设置适当的值。如果其他查询参数适用于您的情况,请查看文档。

答案 1 :(得分:0)

所以我终于把它排序并使用我的其他代码 - 最终能够通过光标导出并在完成时删除文件夹内容 - 而dbsendmail添加了附件我也能够嵌入到电子邮件的正文中 - 任何感兴趣的人的代码如下! - 我知道它远非完美,所以任何有关清理的帮助都表示赞赏 - 真正的新手警报!希望它有意义我想做什么 - @TT感谢你的努力和抱歉 - 不清楚 - b - 不清楚 - c - 等等等等! - BR Paul

DECLARE @IMG_PATH VARBINARY(MAX),
@TIMESTAMP VARCHAR(MAX),
@ObjectToken INT,
@MYdtDate NVARCHAR(50),
@MYemail NVARCHAR(50),
@MYszBlockCapitols NVARCHAR(50),
@MYdwJobnumber NVARCHAR(50),
@MYszDelpostCode NVARCHAR(50),
@MYszDelAddrName NVARCHAR(50),
@MYszJobOrderNum NVARCHAR(50),
@MYszDelAddr4 NVARCHAR(50),
@MYszAccCode NVARCHAR(20),
@MYdtTime NVARCHAR(10),
@body NVARCHAR(4000)



DECLARE C1 CURSOR READ_ONLY
FOR
SELECT ISNULL(JobItem.dwJobNumber,' '), ISNULL(JobItem.szDelAddrName,' '), ISNULL(JobItem.szDelPostCode,' '), ISNULL(Signature.szBlockCapitols,' '), ISNULL(StirlingManager_Comp1.dbo.SalesAccounts.szReportText8,' '), Convert(varchar,Signature.dtDate,103) AS Date, Convert(varchar,Signature.dtDate,108)as Time, ISNULL(JobItem.szJobOrderNum,' '), ISNULL(JobItem.szDelAddr4,' '), ISNULL(JobItem.szAccCode,' '), ISNULL(dms_document.data,' ')
FROM         Transport_Comp1.dbo.JobItem INNER JOIN
                      Transport_Comp1.dbo.dms_document ON JobItem.dwJobItemId = dms_document.dwJobItemId LEFT OUTER JOIN
                      Transport_Comp1.dbo.Signature ON dms_document.id = Signature.dwDocumentIdFK LEFT OUTER JOIN
                      DocArchive_Comp1.dbo.dms_document AS dms_document_1 ON dms_document.id = dms_document_1.id LEFT OUTER JOIN
                      StirlingManager_Comp1.dbo.SalesAccounts ON JobItem.szAccCode = StirlingManager_Comp1.dbo.SalesAccounts.szAccountCode
WHERE     (Signature.dtDate > DATEADD(MINUTE, -800, GETUTCDATE())) AND (Signature.dtDate < DATEADD(SECOND, -0.001, GETUTCDATE())) AND (Signature.bArrived = 0) AND (StirlingManager_Comp1.dbo.SalesAccounts.szReportText8 > '')
OPEN C1

FETCH NEXT FROM C1 INTO
 @MYdwJobnumber, @MYszDelAddrName, @MYszDelPostCode, @MYszBlockCapitols, @MYemail, @MYdtDate, @MYdtTime,@MYszJobOrderNum, @MYszDelAddr4, @MYszAccCode, @IMG_PATH
WHILE (@@FETCH_STATUS = 0)
BEGIN
        SET @TIMESTAMP = 'd:\Signatures-TMP\' + @MYdwJobnumber + '.bmp'
        EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        EXEC sp_OASetProperty @ObjectToken, 'Type', 1
        EXEC sp_OAMethod @ObjectToken, 'Open'
        EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
        EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2
        EXEC sp_OAMethod @ObjectToken, 'Close'
        EXEC sp_OADestroy @ObjectToken


SET @body='<html><body><p><img src="http://www.mycompany.co.uk/wp-content/uploads/2013/12/mycompany.png" alt="" align="left"></p>
<br><br><br>
<p><span style="font-size: 9px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>My Company<br><span style="Century Gothic;">My Company address</span></span></p>
<br><br></strong>
<h1><span style="font-size: x-large; font-family: arial, helvetica, sans-serif; color: #0d3172;">DELIVERY CONFIRMATION</span></h1>
<br>
<table style="border: 2px double #0d3172; color: #0d3172; font-size: 12pt; font-family: arial, helvetica, sans-serif; width: 800px;" border="1" cellspacing="0" cellpadding="4">
    <tbody>
    <tr>
        <td><span style="font-size: small;">YOUR REFERENCE</span></td>
        <td width="590"><span style="font-size: small;"><strong>' + @MYszJobOrderNum + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">DELIVERY TO</span></td>
        <td><span style="font-size: small;"><strong>' + @MYszDelAddrName + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">TOWN</span></td>
        <td><span style="font-size: small;"><strong>' + @MYszDelAddr4 + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">POSTCODE</span></td>
        <td><span style="font-size: small;"><strong>' + @MYszDelPostCode + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">DELIVERY DATE</span></td>
        <td><span style="font-size: small;"><strong>' + @MYdtDate + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">DELIVERY TIME</span></td>
        <td><span style="font-size: small;"><strong>' + @MYdtTime + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">SIGNED FOR BY</span></td>
        <td><span style="font-size: small;"><strong>' + @MYszBlockCapitols + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">YOUR ACCOUNT CODE</span></td>
        <td><span style="font-size: small;"><strong>' + @MYszAccCode + '</strong></span></td>
    </tr>
    <tr>
        <td><span style="font-size: small;">OUR JOB NUMBER</span></td>
        <td><span style="font-size: small;"><strong>' + @MYdwJobnumber + '</strong></span></td>
    </tr>
    </tbody>
</table>
<br><br>

<p><span style="font-size: 12px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>DIGITAL SIGNATURE</p></strong></span>
<img src="cid:'+ @MydwJobNumber + '.bmp" /><p></p>

<p><span style="font-size: 12px; font-family: Verdana, Geneva, sans-serif; color: #0d3172;"><strong>Please contact our Customer Services Team if you have any questions or queries.</span></strong></span></p></body>
</html>'
                EXEC msdb.dbo.sp_send_dbmail
                @profile_name = 'SQL_Email',
                @recipients = @MYemail,
                @subject = 'EMAIL POD',            
                @file_attachments = @TIMESTAMP,
                @body=@body, 
                @body_format = 'HTML';
                print @body;    

      FETCH NEXT FROM C1 INTO
 @MYdwJobnumber, @MYszDelAddrName, @MYszDelPostCode, @MYszBlockCapitols, @MYemail, @MYdtDate, @MYdtTime,@MYszJobOrderNum, @MYszDelAddr4, @MYszAccCode, @IMG_PATH
END
EXEC xp_cmdshell 'del D:\Signatures-TMP\*.bmp'
CLOSE C1
DEALLOCATE C1