当前位置: 代码网 > it编程>数据库>MsSqlserver > sqlserver2008自动发送邮件

sqlserver2008自动发送邮件

2024年05月19日 MsSqlserver 我要评论
这两天都在搞这个东西,从开始的一点不懂,到现在自己可以独立的完成这个功能!在这个过程中,csdn的好多牛人都给了我很大的帮助,在此表示十二分的感谢!写这篇文章,一是为了巩固一下,二嘛我也很希望我写的这

这两天都在搞这个东西,从开始的一点不懂,到现在自己可以独立的完成这个功能!在这个过程中,csdn的好多牛人都给了我很大的帮助,在此表示十二分的感谢!写这篇文章,一是为了巩固一下,二嘛我也很希望我写的这点小东西能帮助遇到同样问题的朋友们!当然这里有一部分是从网上的摘录的
实现一个类似于注册平台的功能:比如注册了一个用户,就会向注册邮箱里发送一封邮件。首先是要搭建一个自动发送邮件的平台,这个用sql server 2008(sql server 2005也有)的database mail就能很方便的实现。这个完成了以后就能够发送简单的邮件了,但是这样在应用中往往是不够,我们还要需要建一个job来实现自动发送的功能。
database mail的构建有两种方法,一是用configure database mail,另外一种是用sql语句完成。
这两种方法中的服务器名字,我刚开始以为是随便起一个就可以的,(以为sql server的database mail会自动把这个服务器名申请为一个可用的smtp服务器)后来貌似不是的。这里好像必须要是一个存在并且可用的smtp服务器名
如果想要删除建立好的profile和account可以用如下语句

完成了database mail的搭建。下面我们就要开始完善自动发送邮件的功能。
我们要实现发送邮件的格式是:
尊敬的×××:---------------------------------------------titlename
感谢您的注册,你的用户名是××,密码是××--------------------------object
你的满意是我们最大的动力。----------------------------------------------------conclusion
某某公司             ----------------------------------------------------------inscribe
首先我们可以建两个表:一个是autosendemail记录用户id和email的信息;一个是emailtext,一个static table,里面存储的是我们要发送的邮件的格式。
autosendemail的主要字段有userid,emailaddress,emailtextid(emailtext的一个外键)。这里的userid对应的是一个user表,里面存有用户的登录名及登录密码。
emailtext的主要字段有emailtextid,subject(主题),titlename(称呼),object(内容),conclusion(结束语),inscribe(落款)。可能看到这里,有人会认为emailtext表没必要设计的这么麻烦。有emailtextid,subject和一个body就够了,确实,但是这样的话,内容中的排版格式比较麻烦。这样设计一是为了格式方便,一个是为了和发送其他邮件格式统一。插入一行数据到emailtext表中
insert into emailtext (emailtextid,subject,titlename,object,conclusion,inscribe) values(1,'注册成功','尊敬的<username>:','
 感谢您申请注册某某公司会员!  你的注册帐号为<loginname>,密码为<password>,请妥善保管您的密码!','
 感谢您对我们公司的支持!如果任何意见或建议,欢迎来电咨询:123-456789。请不要回复此邮件!',' 某某公司')
 这样,用job每次遍历autosendemail,从中得到userid和emailtextid,然后根据userid可以得到相应的登录名和登录密码。同时根据emailtextid,取出里面的titlename(称呼),object(内容),conclusion(结束语),inscribe(落款)四个字段,用得到的登录名和登录密码去替换<username> ,<loginname>,<password>这样就可以拼凑成一封邮件的完整body。
为此,先建立一个procedure

上面代码用了一个sql里的替换函数replace,该函数的用法是
用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
语法 replace ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
参数 'string_expression1' 待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据。
'string_expression2' 待查找的字符串表达式。string_expression2 可以是字符数据或二进制数据。
'string_expression3' 替换用的字符串表达式。string_expression3 可以是字符数据或二进制数据。
返回类型
如果 string_expression(1、2 或 3)是支持的字符数据类型之一,则返回字符数据。如果 string_expression(1、2 或 3)是支持的 binary 数据类型之一,则返回二进制数据。
  msdb.dbo.sp_send_dbmail存储过程是用于执行发送邮件的,返回值为0或是1。0代表发送成功,1为发送失败
邮件的格式是用html形式显示
有了这个存储过程,那么只要用个建个job就可以了。job主要是为了实现某些需要数据库自动处理的功能。
job里的command输入如下代码:

这里用游标遍历autosendemail表,job设定为每分钟遍历一次,如果发送成功,就把该行记录给删除。否则保留在表中,下次遍历时,再次发送。
这样一个简单的应用型发送邮件功能就实现好了!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com