用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码)
分享:用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码)
欢迎大家批评指正
//针对SqlServer2005及已上版本
//CLR开发测试环境 VS2008 + Windows7
//SqlServer测试版本:SqlServer2005
//项目名:SendSMSTrigger
//编译后会产生2个类库:SendSMSTrigger.dll SendSMSTrigger.XmlSerializers.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Net.Mail;
public class SendSMSTrigger
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="tomail">收件人邮件地址</param>
/// <param name="title">标题</param>
/// <param name="content">邮件正文</param>
/// <param name="FormUser">发件人账号</param>
/// <param name="userPwd">发件人密码</param>
public static void sendEmail(string tomail, string title, string content, string FormUser, string userPwd)
{
MailAddress from = new MailAddress(FormUser + "@bwsyq.com");
MailAddress to = new MailAddress(tomail);
MailMessage MyMessage = new MailMessage(from, to);
MyMessage.Priority = MailPriority.Normal;
MyMessage.Priority = MailPriority.Normal;
MyMessage.IsBodyHtml = false;
MyMessage.IsBodyHtml = true;
MyMessage.Body = content;
MyMessage.BodyEncoding = System.Text.Encoding.UTF8;
MyMessage.Subject = title;
string SmtpServer = "mail.bwsyq.com";
SmtpClient client = new SmtpClient(SmtpServer);
System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FormUser, userPwd);
client.Credentials = cred;
client.Send(MyMessage);
}
/// <summary>
/// 发送手机短信
/// </summary>
/// <param name="mMobilNumber">手机号码</param>
/// <param name="sMessageContent">短信内容</param>
/// <returns></returns>
public static string SendSMS(string mMobilNumber, string sMessageContent)
{
SmsInterfaceService SmsInterfaceDemo = new SmsInterfaceService();
return SmsInterfaceDemo.clusterSend(" 短信接口用户名", " 短信接口密码",
"1360000000", mMobilNumber, sMessageContent, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), "0|0|0|0");
}
/// <summary>
/// 针对表Users的新增CLR触发器
/// </summary>
[SqlTrigger(Name = @"SendSMSTrigger", Target = "[dbo].[Users]", Event = "FOR INSERT")]
public static void SendSMS()
{
string userName;
string realName;
string eMail;
string mobilNumber;
SqlCommand command;
SqlTriggerContext triggContext = SqlContext.TriggerContext;
SqlPipe pipe = SqlContext.Pipe;
SqlDataReader reader;
switch (triggContext.TriggerAction)
{
case TriggerAction.Insert:
// Retrieve the connection that the trigger is using
using (SqlConnection connection
= new SqlConnection(@"context connection=true"))
{
connection.Open();
command = new SqlCommand(@"SELECT * FROM INSERTED;",
connection);
reader = command.ExecuteReader();
reader.Read();
userName = (string)reader[0];
realName = (string)reader[1];
eMail = (string)reader[2];
mobilNumber = (string)reader[3];
reader.Close();
if (IsValidEMailAddress(eMail))
{
//发通知邮件
sendEmail(eMail, realName + " 您好!恭喜注册成功!", " 您的用户名是:" + userName, " bwsyq@bwsyq.com", " 发件人密码");
//发手机短信
SendSMS(mobilNumber, realName + " 您好!恭喜注册成功! 您的用户名是:" + userName);
//SqlServer 管道返回信息
pipe.Send(realName + " 您好!恭喜注册成功! 您的用户名是:" + userName);
}
}
break;
default:
break;
}
}
/// <summary>
/// 验证邮件是否合法
/// </summary>
/// <param name="email">邮件地址</param>
/// <returns><c>true</c>表示邮件地址格式合法 <c>false</c>表示邮件地址格式不合法<</returns>
public static bool IsValidEMailAddress(string email)
{
return Regex.IsMatch(email, @"^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$");
}
}
--SqlServer2005 中的挂接脚本、代码、相关说明
IF OBJECT_ID(N'Users') IS NOT NULL
drop table Users
go
CREATE TABLE Users --(测试用)用户表
(
UserName nvarchar(200) NOT NULL, --用户名
RealName nvarchar(200) NOT NULL, --真实姓名
EMail nvarchar(200) NOT NULL, --邮件地址
MobilNumber varchar(20) not null --手机号码
);
GO
--建立触发器程序集
CREATE ASSEMBLY [SendSMSTrigger.XmlSerializers.dll] from 'E:\SendSMSTrigger.XmlSerializers.dll'
WITH PERMISSION_SET = UNSAFE;
go
--建立序列化处理器程序集
CREATE ASSEMBLY SendSMSTrigger from 'E:\SendSMSTrigger.dll'
WITH PERMISSION_SET = UNSAFE;
go
--提升SqlServer支持版本
EXEC sp_dbcmptlevel N'DB_EMP2', 90
go
--开通CLR权限
EXEC sp_configure 'show advanced options' , '1';
GO
RECONFIGURE;
GO
EXEC sp_configure 'clr enabled' , '1'
GO
RECONFIGURE;
GO
IF OBJECT_ID(N'trig_SendSMSTrigger') IS NOT NULL
drop TRIGGER trig_SendSMSTrigger
go
--建立SqlServer触发器并 C#触发器关联
CREATE TRIGGER trig_SendSMSTrigger
ON Users
FOR INSERT
AS
EXTERNAL NAME SendSMSTrigger.SendSMSTrigger.SendSMS
go
--测试,模拟用户注册,成功后您将收到 注册成功通知邮件和手机短信通知
insert into Users (UserName,RealName,EMail,MobilNumber)
values(' USer0001', ' 百万商业圈', ' bwsyq@bwsyq.com', ' 13818466XXX')
go
作者CSDN博客
版权所有: 百万商业圈
未经许可不得转载,有任何疑问请与我本人联系 QQ 99923309 Mail:bwsyq@bwsyq.com
开源:完全自主研发搜索引擎1.0源代码及说明,单机400万网页,任意50词以内的检索不超过 20毫秒
开源:基于百万商业圈.NET开发框架开发的并行带分词的采集器
天心天字辈ERP全部PDK源代码到了我手上的后果 - 超越天心之WEB天云
用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码)相关推荐
- 用Java写了一个类QQ界面聊天小项目,可在线聊天(附源码)
作者: AC路上 blog.csdn.net/weixin_44048140/article/details/109612049 1.功能实现 1.修改功能(密码.昵称.个性签名) 2.添加好友.删除 ...
- 太赞了,用Java写了一个类QQ界面聊天小项目,可在线聊天(附源码)~
点击上方 "后端架构师"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「后端架构师」,收看更多精彩内容 每日英文 Sometime yo ...
- iphone换android 短信,iPhone用户换手机后出了大问题 iPhone用户更换为Android手机短信失踪介绍...
之前有消息称,当iPhone用户将手机更换为Android手机后,有可能出现其他联系人无法成功向Android手机发送短信的问题.目前,据BusinessInsider网站报道,苹果正被一位前iPho ...
- java后台实现用户密码登录和手机短信登录
1.账号密码登录:获取用户名.密码,检验是否存在该账号,以及该账号是否有效(未冻结.未删除),检验密码是否正确 public Result<JSONObject> login(@Reque ...
- 今天分享一个用Python来爬取小说的小脚本!(附源码)
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于大邓和他的Python ,作者:大邓 Python爬取知乎数据案例讲解视频 http ...
- 用python爬小说_今天分享一个用Python来爬取小说的小脚本!(附源码)
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...
- python爬取天气预报数据并保存为txt格式_今天分享一个用Python来爬取小说的小脚本!(附源码)...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...
- 用python写的登录界面的脚本_记录 制作校园网登陆脚本 python编写 附源码
5 importos6 importre7 8 classAOA(object):9 #获取本机IP 10 defget_ip(self):11 try:12 s =socket.socket(soc ...
- 编写了一个通过手机短信平台收发短信的软件
看过我写的"使用Ajax技术编写的一个网站"这篇博客的网友也许已经知道我现在是做什么工作的了.由于工作的原因,需要在网络上从事一些进行商业营销的活动,以帮助工作的开展.比如:介绍公 ...
- java qq聊天界面_【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!...
原标题:[附源码]用Java写了一个类QQ界面聊天小项目,可在线聊天! 目录: 1.功能实现 2.模块划分 3.使用到知识 4.部分代码实现 5.运行例图 1.功能实现 1.修改功能(密码.昵称.个性 ...
最新文章
- CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)
- Django之Form组件
- Java中的LongAdder和AtomicLong有什么区别?
- java dao service实例_浅谈Action+Service +Dao 功能
- vscode怎样导入数据_【Python开发】用VSCode+Jupyter notebook 编写 Python
- python函数降低编程复杂度_Python-面向对象编程
- 解决IE6、IE7、IE8、Firefox兼容的两种方案
- 理解高性能Python
- linux和windows下TIME_WAIT过多的解决办法
- c语言程序设计立体化教程,C语言程序设计立体化教程
- 开机时无法进入系统,提示windows system32/winload.exe 无法加载
- python成绩分析系统_用Python编写学生成绩分析系统
- 程序员请万分珍重你的第一份工作,否则后悔了概不负责
- 《编程珠玑,字字珠玑》45678读书笔记——编程技巧
- 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...
- 贺新春丨大年初六 六六大顺
- TXT文件编码格式解析
- 【Python】利用zipfile.ZipFile和write()创建压缩包
- 如何进入他人计算机硬盘,手机如何访问电脑硬盘
- 如何选择PMP、IPMP、CPMP?
热门文章
- CCS软件的C语言取模注意点
- java rcp 教程 书,Eclipse RCP Tutorial(中文教程)
- [笔记][原创]74HC595芯片使用方法介绍
- 学校实训密码锁设计(基于STC51单片机)报告
- wpa_supplicant中配置TTLS网络的phase2参数
- 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.8 Cisco FabricPath...
- 3D动态视频屏保热带鱼水族馆
- jdk1.8中使用aspectjweaver报错 Invalid byte tag in constant pool 18
- bin文件用cad打开_bin文件如何打开 XP系统中的打开的技巧
- win7 IIS误删default website的恢复方法