分享:用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触发器(附源码)相关推荐

  1. 用Java写了一个类QQ界面聊天小项目,可在线聊天(附源码)

    作者: AC路上 blog.csdn.net/weixin_44048140/article/details/109612049 1.功能实现 1.修改功能(密码.昵称.个性签名) 2.添加好友.删除 ...

  2. 太赞了,用Java写了一个类QQ界面聊天小项目,可在线聊天(附源码)~

    点击上方 "后端架构师"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「后端架构师」,收看更多精彩内容 每日英文 Sometime yo ...

  3. iphone换android 短信,iPhone用户换手机后出了大问题 iPhone用户更换为Android手机短信失踪介绍...

    之前有消息称,当iPhone用户将手机更换为Android手机后,有可能出现其他联系人无法成功向Android手机发送短信的问题.目前,据BusinessInsider网站报道,苹果正被一位前iPho ...

  4. java后台实现用户密码登录和手机短信登录

    1.账号密码登录:获取用户名.密码,检验是否存在该账号,以及该账号是否有效(未冻结.未删除),检验密码是否正确 public Result<JSONObject> login(@Reque ...

  5. 今天分享一个用Python来爬取小说的小脚本!(附源码)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于大邓和他的Python ,作者:大邓 Python爬取知乎数据案例讲解视频 http ...

  6. 用python爬小说_今天分享一个用Python来爬取小说的小脚本!(附源码)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  7. python爬取天气预报数据并保存为txt格式_今天分享一个用Python来爬取小说的小脚本!(附源码)...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章天气预报数据分析与统计之美 ,作者:❦大头雪糕❦ Python GUI制作小说下载器教学讲 ...

  8. 用python写的登录界面的脚本_记录 制作校园网登陆脚本 python编写 附源码

    5 importos6 importre7 8 classAOA(object):9 #获取本机IP 10 defget_ip(self):11 try:12 s =socket.socket(soc ...

  9. 编写了一个通过手机短信平台收发短信的软件

    看过我写的"使用Ajax技术编写的一个网站"这篇博客的网友也许已经知道我现在是做什么工作的了.由于工作的原因,需要在网络上从事一些进行商业营销的活动,以帮助工作的开展.比如:介绍公 ...

  10. java qq聊天界面_【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!...

    原标题:[附源码]用Java写了一个类QQ界面聊天小项目,可在线聊天! 目录: 1.功能实现 2.模块划分 3.使用到知识 4.部分代码实现 5.运行例图 1.功能实现 1.修改功能(密码.昵称.个性 ...

最新文章

  1. CodeForces - 1401 F Reverse and Swap(线段树, 区间翻转, 区间交换,清晰易懂)
  2. Django之Form组件
  3. Java中的LongAdder和AtomicLong有什么区别?
  4. java dao service实例_浅谈Action+Service +Dao 功能
  5. vscode怎样导入数据_【Python开发】用VSCode+Jupyter notebook 编写 Python
  6. python函数降低编程复杂度_Python-面向对象编程
  7. 解决IE6、IE7、IE8、Firefox兼容的两种方案
  8. 理解高性能Python
  9. linux和windows下TIME_WAIT过多的解决办法
  10. c语言程序设计立体化教程,C语言程序设计立体化教程
  11. 开机时无法进入系统,提示windows system32/winload.exe 无法加载
  12. python成绩分析系统_用Python编写学生成绩分析系统
  13. 程序员请万分珍重你的第一份工作,否则后悔了概不负责
  14. 《编程珠玑,字字珠玑》45678读书笔记——编程技巧
  15. 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...
  16. 贺新春丨大年初六 六六大顺
  17. TXT文件编码格式解析
  18. 【Python】利用zipfile.ZipFile和write()创建压缩包
  19. 如何进入他人计算机硬盘,手机如何访问电脑硬盘
  20. 如何选择PMP、IPMP、CPMP?

热门文章

  1. CCS软件的C语言取模注意点
  2. java rcp 教程 书,Eclipse RCP Tutorial(中文教程)
  3. [笔记][原创]74HC595芯片使用方法介绍
  4. 学校实训密码锁设计(基于STC51单片机)报告
  5. wpa_supplicant中配置TTLS网络的phase2参数
  6. 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.8 Cisco FabricPath...
  7. 3D动态视频屏保热带鱼水族馆
  8. jdk1.8中使用aspectjweaver报错 Invalid byte tag in constant pool 18
  9. bin文件用cad打开_bin文件如何打开 XP系统中的打开的技巧
  10. win7 IIS误删default website的恢复方法