日期:2014-05-18  浏览次数:20369 次

用存储过程发邮件
各位大侠,不好意思,小弟最近需要在数据库里面用存储过程发邮件,虽然在网上也找到一些例子,不过看了一会就有点不知所云了,主要就是不知道里面某些代码到底是要做什么的,没有具体的说明,还请大家帮忙,给个简单的例子,然后告知下每个步骤及其代码的意思就可以了。
麻烦了各位。

------解决方案--------------------
不会,曾分
------解决方案--------------------
配置SQL mail ?
------解决方案--------------------
SQL code
正确配置和使用SQL mail 

使用SQL Mail收发和自动处理邮件中的扩展存储过程简介

SQL SERVER提供了通过EXCHANGE或OUTLOOK收发邮件的扩展存储过程,下面将这几个过程简单的介绍一下。 

一、启动SQL Mail 

xp_startmail @user,@password 

@user和@password都是可选的 

也可打开Enterprise Manager中的Support Services,在SQL Mail上单击右键打开右键菜单,然后按Start来启动 

二、停止SQL Mail 

xp_stopmail 

也可用上述方法中的菜单里的Stop来停止 

三、发送邮件 

xp_sendmail {[@recipients =] 'recipients [;...n]'} 
[,[@message =] 'message> 
[,[@query =] 'query> 
[,[@attachments =] attachments] 
[,[@copy_recipients =] 'copy_recipients [;...n]' 
[,[@blind_copy_recipients =] 'blind_copy_recipients [;...n]' 
[,[@subject =] 'subject> 
[,[@type =] 'type> 
[,[@attach_results =] 'attach_value> 
[,[@no_output =] 'output_value> 
[,[@no_header =] 'header_value> 
[,[@width =] width] 
[,[@separator =] 'separator> 
[,[@echo_error =] 'echo_value> 
[,[@set_user =] 'user> 
[,[@dbuse =] 'database> 

其中@recipients是必需的 

参数说明: 

参数 说明 
@recipients 收件人,中间用逗号分开 
@message 要发送的信息 
@query 确定执行并依附邮件的有效查询,除触发器中的插入表及删除表外,此查询能引用任何对象 
@attachments 附件 
@copy_recipients 抄送 
@blind_copy_recipients 密送 
@subject 标题 
@attach_results 指定查询结果做为附件发送 
@no_header 不发送查询结果的列名 
@set_user 查询联接的用户名,默认为Guset 
@dbuse 查询所用的数据库,默认为缺省数据库 

四、阅读邮件收件箱中的邮件 

xp_readmail [[@msg_id =] 'message_number> [, [@type =] 'type' [OUTPUT]] 
[,[@peek =] 'peek> 
[,[@suppress_attach =] 'suppress_attach> 
[,[@originator =] 'sender' OUTPUT] 
[,[@subject =] 'subject' OUTPUT] 
[,[@message =] 'message' OUTPUT] 
[,[@recipients =] 'recipients [;...n]' OUTPUT] 
[,[@cc_list =] 'copy_recipients [;...n]' OUTPUT] 
[,[@bcc_list =] 'blind_copy_recipients [;...n]' OUTPUT] 
[,[@date_received =] 'date' OUTPUT] 
[,[@unread =] 'unread_value' OUTPUT] 
[,[@attachments =] 'attachments [;...n]' OUTPUT]) 
[,[@skip_bytes =] bytes_to_skip OUTPUT] 
[,[@msg_length =] length_in_bytes OUTPUT] 
[,[@originator_address =] 'sender_address' OUTPUT]] 

参数说明: 

参数 说明 
@originator 发件人 
@subject 主题 
@message 信息 
@recipients 收件人 
@skip_tytes 读取邮件信息时跳过的字节数,用于顺序获取邮件信息段。 
@msg_length 确定所有信息的长度,通常与@skip_bytes一起处理长信息 

五、顺序处理下一个邮件 

xp_findnextmsg [[@msg_id =] 'message_number' [OUTPUT]] 
[,[@type =] type] 
[,[@unread_only =] 'unread_value> ) 

六、删除邮件 

xp_deletemail {'message_number'} 

如果不指定邮件编号则删除收件箱中的所有邮件 

七、自动处理邮件 

sp_processmail [[@subject =] 'subject> 
[,[@filetype =] 'filetype> 
[,[@separator =] 'separator> 
[,[@set_user =] 'user> 
[,[@dbuse =] 'dbname>






>用户在网上注册后,系统将随机产生的密码发送到用户登记的Email
>用户在论坛的帖子有回复时将内容发送到用户的Email
因为上述过程都是在存储过程中完成的,所以避免了前台程序对参数的传输处理,也不需要再用第三方的组件完成,感觉比较方便。

1.为了使用SQL mail,首先你的服务器上得有SMTP服务,我没有安装win2000 server自带的SMTP,而是用imail6.04的SMTP,感觉比较稳定,功能也比较强。
2.安装一个邮件系统,我安装了outLook 2000,我发现在配置邮件profile时,如果
不安装outLook而是用别的第三方程序,win2k中文server版在控制面板中就找不到“邮件”一项.
3.安装完outlook后再刷新控制面板,就会找到“邮件”一项,双击进行邮件的配置,为配置文件起一个名字(假设为myProfile),以便以后SQL mail使用,在该配置文件中设置各项属性。
4.启动outlook(设置为用myProfile作为默认的配置文件),测试进行收发邮件,确认outlook工作正常。
5.用当前的域帐户启动SQL server,在企业管理器的支持服务中,点击SQL mail的属性,可以看到在配置文件选择中,出现了刚才定义的myProfile配置文件(你也可以定义多个profile),选择这个配置文件进行测试,SQL将返回成功开始和结束一个MAPI会话的信息,如果出现错误或是没有找到邮件配置文件,那一定是你启动SQL server用的帐号有问题
6.现在你就可以在查询分析器中用XP_sendmail这个扩展存储过程发送SQL mail了,格式如下:
xp_sendmail {[@recipients =] 'recipients [;...n]'} 
[,][@message =] 'message> 
[,][@query =] 'query> 
[,][@attachments =] attachments] 
[,][@copy_recipients =] 'copy_recipients [;...n]'
[,][@blind_copy_recipients =] 'blind_copy_recipients [;...n]'
[,][@subject =] 'subject>
[,[@type =] 'type> 
[,][@attach_results =] 'attach_value>
[,][@no_output =] 'output_value> 
[,][@no_header =] 'header_value> 
[,][@width =] width] 
[,][@separator =] 'separato