网络编程
位置:首页>> 网络编程>> 数据库>> 如何用SQLMail建立一个电子刊物自动处理系统?

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

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

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

如何用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

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

0
投稿

猜你喜欢

  • 在编写 XMLHttpRequest 请求时,需要掌握服务器端返回的内容。针对 Firefox 浏览器,我们常用的 Firebug 就能非常
  • 阅读上一章:[翻译]标记语言和样式手册 Chapter 15 为body指定样式Chapter 16 下一步现在你知道了如何使用标准改进你的
  • 14个超酷的js显示时间效果,一定有你想要的。正常时间显示运行效果图:<title>正常显示的时钟 - asp之家 - http
  • XML有很多相关的技术,将这些技术结合起来,才能充分发挥XML的强大功能。这些技术包括:Xlink与Xpointer(设置XML的超链接)、
  • 表单验证做网站程序多多少少都会碰到,其中emai地址的合法性验证也算是一个典型的例子,网页表单的验证我们一般是先在客户端使用javascri
  • l当今世界,技术发展迅猛,不论是什么行业,大多数关键数据都是放置于数据库中进行管理的,一来目前数据库技术已经相当成熟,二来其管理功能非常强大
  • 对于个人用户来说,除了病毒和木马,网页中的隐形代码也开始严重地威胁着我们的安全,但大多数人却缺乏自我保护意识,对隐形代码的危害认识不够,甚至
  • 哎~工作忙死了!!!!!!今天在百度老年看到一个手写输入法,颇感新鲜。so把其框下!请不要用在商业用途,学习之用,版权百度所有。看代码!注:
  • 从信息组织角度来看,段落内行之间的关系要比段落之间的关系低一个级别,所以在呈现上段落之间的“段距”应该大于段落之内的“行距”,如此才能一目了
  • asp正则表达式检测字符串是否是数字及字母。<% '函数:CheckString(strng) '
  • 在查看Mysql对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open、close、seek等,在Win3
  • 相同记录行如何取最大值我想这个东西在作一些相关采购系统或成本报价系统应该很有用的吧取当前的最有效的价格.记录下来与大家分享!--测试数据&n
  •  <!--#include file="config.asp" -->&nbs
  • ▲ SHOW执行下面这个命令可以了解服务器的运行状态mysql >show status;该命令将显示出一长列状态
  • 常见到网上博文有错误理论,包括身边很多朋友都曾认同“可访问性(Accessibility)是为残障人士准备”的观点。其实在互联网技术领域远不
  • 最近看到一个词叫css reset。什么叫做css reset呢?我理解为重置css,也就是重置默认样式。我在HTML下的默认样式中讲到,一
  • 直接调用系统的颜色显示在网页上本来是件很好玩滴事,但是,也有个缺点,就是可用的色太少 比如Bindows在它的启动画面一点点应用。=。= 上
  • 这些导航菜单来自于Dribbble网站,出自于世界各地的优秀设计师之手,涵盖了各种不同的风格,个个都非常精美。这里我将这些导航菜单展示出来,
  • 新闻系统、blog系统等都可能用到将动态页面生成静态页面的技巧来提高页面的访问速度,从而减轻服务器的压力,本文为大家搜集整理了ASP编程中常
  • 为什么使用事务 当对多个表进行更新的时候,某条执行失败。为了保持数据的完整性,需要使用事务回滚。 显示设置事务  代码如下:beg
手机版 网络编程 asp之家 www.aspxhome.com