如何用SQLMail建立一个电子刊物自动处理系统?

时间:2010-06-13 14:36:00 

如何用SQLMail建立一个电子刊物自动处理系统?

下面我们用SQLMail来做一个电子刊物自动处理系统。在这个系统中,主要实现两个功能:

1、每当新一期电子刊物编好,追加到发行数据库publication中,SQLServer会自动定期执行my_publish存储过程。在这个存储过程中,它会检查发行数据库,当发现有新的记录时,便通过逐个从订阅数据库sub_info(订阅者信息数据库)中取出订阅人的邮件地址的办法,发送给每名订阅者。

2、电子刊物的订阅与取消。SQLServer同样定期执行my_subscibe存储过程,检查特定邮箱中的所有邮件,如果发现标题为subscribe的邮件,就提取发件人等相关信息,在订阅数据库中追加一条新记录;同样,如果存在标题为stopsubscribe的邮件,就将相关的记录从订阅数据库中删除。

该系统中具体用到的数据库和存储过程如下所示:
sub_info

/*订阅者信息数据库*/
emailvarchar(20)NOTNULL订阅者电子邮件地址
sub_datedatetimeNOTNULL订阅时间
othertextNULL订阅者的其他信息
publication(电子刊物出版数据库)
字段名称类型允许空值含义
pub_classchar(10)NOTNULL电子刊物期号
pub_datedatetimeNULL出版日期
titletextNOTNULL本期电子刊物标题
contenttextNOTNULL电子刊物正文
endnotetextNULL附加于刊物的其他信息
flagsmallintNULL1,标志为未出版的新刊物
my_subscribe,用于处理订阅者信息的存储过程。
CREATEPROCEDUREmy_subscribe
AS
declare@msg_idvarchar(64)
declare@subjectvarchar(255)
declare@messagevarchar(255)
declare@originatorvarchar(255)
declare@datevarchar(255)
declare@statusint
declare@mapifailureint
select@mapifailure=0
while(1=1)
begin
/*查找邮件并获取消息ID*/
exec@status=master..
xp_findnextmsg@msg_id=@msg_idOUTPUT
if@status<>0
begin
select@mapifailure=1
break
end
if@msg_idisnullbreak
/*读取邮件的信息到变量中*/
exec@status=master..xp_readmail
@msg_id=@msg_id,
@originator=@originatorOUTPUT,
@subject=@subjectOUTPUT,
@message=@messageOUTPUT,
@date_received=@dateOUTPUT
if@status<>0
begin
select@mapifailure=1
break
end
/*根据邮件标题,在订阅数据库中添加或删除记录*/
execxp_deletemail@msg_id=@msg_id
if@subject='subscribe'
insertintosqlmailsample..
sub_infovalues(@originator,@date,@message)
/*sub_info字段名称类型允许空值含义*/
else
if@subject='stopsubscribe'
deletefromsqlmailsample..sub_infowhereemail=@originator
end/*循环结束*/
if@mapifailure=1
/*错误处理代码*/
else
return(0)
GO

my_publish

/*用于分发电子刊物的存储过程*/
CREATEPROCEDUREmy_publish
AS
declare@recipientvarchar(255)
declare@subjectvarchar(255)
declare@contentvarchar(255)
declare@endnotevarchar(255)
declare@statusint
select@subject=pub_classfrom
sqlmailsample..publicationwhereflag=1
/*如果有新的记录(电子刊物)则开始分发*/
if(@subjectisnotnull)
begin
/*将数据库记录取出,经处理后存放到变量中*/
select@subject=convert(varchar
(255),title)+'('+pub_class+')',
@content=convert(varchar(255),content)
+convert(varchar(255),endnote)
fromsqlmailsample..publication
whereflag=1
updatesqlmailsample..publication
setflag=0whereflag=1
declarecurcursorforselect
emailfromsqlmailsample..sub_info
opencur
fetchcur
while(@@fetch_status=0)
begin
/*取收件人的电子邮件地址*/
fetchnextfromcurinto@recipient
/*发送电子邮件*/
if@@fetch_status=0
begin
exec@status=master..xp_sendmail
@recipients=@recipient,
@message=@content,
@subject=@subject
if@status<>0
/*错误处理代码*/
end
end
/*结束向所有订阅人发送电子刊物的循环*/
closecur
deallocatecur
end
GO

    具体的存储过程和参数说明可查阅相关文档。

标签:SQLMail,存储过程,邮件,asp
0
投稿

猜你喜欢

  • oracle 函数

    2010-07-23 13:06:00
  • 数据安全之MySQL安全的二十三条军规

    2008-12-24 16:26:00
  • 动态导航设计

    2008-09-21 13:40:00
  • 个人网站与动网整合非官方方法

    2009-07-05 18:42:00
  • 懒懒交流会:ClassName的长命名 VS. 短命名

    2009-11-28 16:08:00
  • JavaScript代码着色器

    2010-01-22 15:53:00
  • 纯ASP结合VML生成完美图-折线图

    2010-05-11 16:50:00
  • IE10增强对HTML5和CSS3的支持

    2011-09-16 20:16:28
  • 如何在SQL2000的查询中使用XML-Data?

    2010-06-18 19:26:00
  • 谈谈网页设计中的字体应用 (3) 实战应用篇·上

    2009-11-24 13:09:00
  • 影响SEO的页面制作细节

    2008-10-18 16:06:00
  • 如何编写TOP10之类的排行榜?

    2009-11-07 18:45:00
  • PHP中合并数组的常见方法分享

    2023-05-25 12:02:48
  • Sun拟10亿美元收购MySQL

    2008-01-17 11:56:00
  • MySQL表设计优化与索引 (九)

    2010-10-25 20:16:00
  • asp中常用的字符串安全处理函数集合(过滤特殊字符等)

    2011-02-20 10:40:00
  • Asp中如何设计跨越域的Cookie

    2008-10-24 09:46:00
  • 巧用特殊的空格字符

    2009-04-10 18:32:00
  • 打造设计你自己的字体 Ⅲ

    2008-03-14 07:52:00
  • SQL Server数据库对于应用程序的关系

    2010-09-08 09:42:00
  • asp之家 网络编程 m.aspxhome.com