http://social.microsoft.com/Forums/it-IT/3ba417d6-6548-48ed-9e9f-1a6549edc569
大家好,
在此提供一个示例展示如何使用数据库邮件发送会议邀请。
创建CLR 存储过程,用来生成.ics文件:
1. 在 Visual Studio中,创建一个Visual C# SQL CLR Database Project,请看:
2. 添加一个数据库引用,请看:
3. 创建一个CLR存储过程,命名为CLROutLook,请看:
4. 使用System.IO.File.WriteAllLines 方法,创建一个.ics 文件,请看:
[Microsoft.SqlServer.Server.SqlProcedure] public static void CLROutlook(string MeetingLocation,string MeetingSubject,string MeetingDescription,DateTime BeginDate,DateTime EndDate) { // Put your code here String[] contents = { "BEGIN:VCALENDAR", "PRODID:-//Flo Inc.//FloSoft//EN", "BEGIN:VEVENT", "DTSTART:" + BeginDate.ToUniversalTime().ToString("yyyyMMdd\THHmmss\Z"), "DTEND:" + EndDate.ToUniversalTime().ToString("yyyyMMdd\THHmmss\Z"), "LOCATION:" + MeetingLocation, "DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + MeetingDescription, "SUMMARY:" + MeetingSubject, "PRIORITY:3", "END:VEVENT", "END:VCALENDAR" }; System.IO.File.WriteAllLines(@"E:MeetingOutLookMeeting.ics", contents); }
注明:我们需要使用System.IO 命名空间,在SQL Server 中,CLR集成不支持该命名空间,当我们部署该CLR 存储过程时,我们可以打开该工程文件属性,设置权限,如下图:
5. 我们也可以使用T-SQL 语句来注册该程序集,请参阅下面的语句:
--Set the database to TRUSTWORTHY mode ALTER DATABASE Test SET TRUSTWORTHY ON; GO CREATE ASSEMBLY CLROutLook FROM 'E:CLROutLookCLROutLookCLROutLookinDebugCLROutLook.dll' WITH PERMISSION_SET = UNSAFE
6. 创建存储过程,请参阅下面的语句:
CREATE PROCEDURE [dbo].[CLROutlook] @MeetingLocation [nvarchar](4000), @MeetingSubject [nvarchar](4000), @MeetingDescription [nvarchar](4000), @BeginDate [datetime], @EndDate [datetime] WITH EXECUTE AS CALLER AS EXTERNAL NAME [CLROutLook].[StoredProcedures].[CLROutlook] GO
配置数据邮件:
1. 配置文件和邮件账号:
2. 使用sp_send_dbmail 发送邮件:
--create a .ics file DECLARE @MeetingLocation NVARCHAR(50) DECLARE @MeetingSubject NVARCHAR(50) DECLARE @MeetingDescription NVARCHAR(500) DECLARE @BeginDate DATETIME DECLARE @EndDate DATETIME SET @MeetingLocation='3106' SET @MeetingSubject='SQL Replication Training' SET @MeetingDescription='Replication is a set of technologies for copying and distributing data and database objects from one database to another and then synchronizing between databases to maintain consistency' SET @BeginDate='2010-12-25 10:00:000' SET @EndDate='2010-12-25 11:00:000' EXEC dbo.CLROutlook @MeetingLocation,@MeetingSubject,@MeetingDescription,@BeginDate,@EndDate GO --Send Email EXEC msdb.dbo.sp_send_dbmail @profile_name = 'TestProfile', @recipients = 'Test@example.com', @subject = 'SQL Replication Training invitation', @file_attachments='E:MeetingOutLookMeeting.ics'
结果为:
关于数据库邮件的小贴士:
1. 关于数据库邮件的更多信息,请参阅:
数据库邮件
http://msdn.microsoft.com/zh-cn/library/ms175887(v=SQL.90).aspx
谢谢。