看起来非常简单的东西现在让我疯狂。我需要提出一些针对SQL Server数据库运行查询的内容,以便最近从我们仓库发货。根据标记为最近发布的内容,它会查找该客户的电子邮件地址,并通过电子邮件向他们发送货件通知,就像Amazon和every other company一样。
电子邮件正文中包含货件中的物品,跟踪号码和超链接以及其他一些订单详情。它需要是HTML。
使用SSRS是有意义的,因为它允许我选择在电子邮件正文中发送报告,但我永远无法弄清楚如何动态设置To:email。显然SSRS有一个称为数据驱动订阅的功能,但像往常一样,我碰巧有一个更便宜的SQL Server版本,但不包括它。
我认为,没什么大不了的。我会做SSIS。所以我写了我的任务和发送电子邮件,但我只能将报告作为附件发送。显然,SSIS无法发送HTML。
所以现在我回到原点。
我现在处于可以获取SSIS生成.pdf,.html或.txt文件的位置,将其保存在文件夹中并将其作为附件发送。
如何根据查询结果在电子邮件正文中发送SSRS或Crystal报表?我是否需要抛弃SSIS并使用完全不同的东西?
答案 0 :(得分:1)
您可以使用脚本组件并通过将IsBodyHTML
设置为true
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
,则可以进行调整