发送HTML电子邮件通知

时间:2014-07-15 21:26:40

标签: sql-server reporting-services ssis html-email

看起来非常简单的东西现在让我疯狂。我需要提出一些针对SQL Server数据库运行查询的内容,以便最近从我们仓库发货。根据标记为最近发布的内容,它会查找该客户的电子邮件地址,并通过电子邮件向他们发送货件通知,就像Amazonevery other company一样。

电子邮件正文中包含货件中的物品,跟踪号码和超链接以及其他一些订单详情。它需要是HTML。

使用SSRS是有意义的,因为它允许我选择在电子邮件正文中发送报告,但我永远无法弄清楚如何动态设置To:email。显然SSRS有一个称为数据驱动订阅的功能,但像往常一样,我碰巧有一个更便宜的SQL Server版本,但不包括它。

我认为,没什么大不了的。我会做SSIS。所以我写了我的任务和发送电子邮件,但我只能将报告作为附件发送。显然,SSIS无法发送HTML。

所以现在我回到原点。

我现在处于可以获取SSIS生成.pdf,.html或.txt文件的位置,将其保存在文件夹中并将其作为附件发送。

如何根据查询结果在电子邮件正文中发送SSRS或Crystal报表?我是否需要抛弃SSIS并使用完全不同的东西?

2 个答案:

答案 0 :(得分:1)

您可以使用脚本组件并通过将IsBodyHTML设置为true

来使用SmtpClient对其进行自定义
           SmtpClient client = new SmtpClient("smtp.gmail.com");
           MailMessage message = new MailMessage();
           message.IsBodyHtml = true;

           client.EnableSsl = true;
           client.Credentials = new NetworkCredential("XXX", "param123");
           message.From = new MailAddress("XXXX@gmail.com");
           message.Subject = subject;
           message.Body = mailBody ;
           client.Send(message);

然后,您可以使用

等HTML标记撰写邮件正文
mailBody = "<br/>";

答案 1 :(得分:0)

如果您的电子邮件的HTML内容相对简单,您应该在MSDN documentation for sp_send_dbmail上查看示例“C.发送HTML电子邮件”。

这显示了如何从SELECT查询生成HTML表并将其作为电子邮件的正文发送,例如(摘自MSDN页面):

DECLARE @tableHTML  NVARCHAR(MAX) ;

SET @tableHTML =
    N'<H1>Work Order Report</H1>' +
    N'<table border="1">' +
    N'<tr><th>Work Order ID</th><th>Product ID</th>' +
    N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
    N'<th>Expected Revenue</th></tr>' +
    CAST ( ( SELECT td = wo.WorkOrderID,       '',
                    td = p.ProductID, '',
                    td = p.Name, '',
                    td = wo.OrderQty, '',
                    td = wo.DueDate, '',
                    td = (p.ListPrice - p.StandardCost) * wo.OrderQty
              FROM AdventureWorks.Production.WorkOrder as wo
              JOIN AdventureWorks.Production.Product AS p
              ON wo.ProductID = p.ProductID
              WHERE DueDate > '2004-04-30'
                AND DATEDIFF(dd, '2004-04-30', DueDate) < 2 
              ORDER BY DueDate ASC,
                       (p.ListPrice - p.StandardCost) * wo.OrderQty DESC
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) +
    N'</table>' ;

EXEC msdb.dbo.sp_send_dbmail @recipients='danw@Adventure-Works.com',
    @subject = 'Work Order List',
    @body = @tableHTML,
    @body_format = 'HTML' ;

生成的电子邮件非常简单,但如果您了解HTML

,则可以进行调整