我的个人博客

引入SMTP服务包

//引入邮件服务包
using System.Net.Mail;
using System.Net;

这两个引用用于C#接入邮件的SMTP服务

控件页面

定时器

为了给用户更好的体验,我们使用定时器,给用户看到具体剩余时间

开始创建一个功能类

新建一个类MailVeriCodeClass,里面定义好各类功能函数

首先引入必要的命名空间

//发送邮件需要引用的命名空间
using System.Net.Mail;
using System.Net;
//正则验证引用
using System.Text.RegularExpressions;

功能类代码

 public class MailVeriCodeClass
  {
       #region  邮箱验证码功能
       /// <summary>
       /// 生成随机验证码
       /// </summary>
       /// <param name="CodeLength">验证码长度</param>
       public static string CreateRandomMailCode(int CodeLength)
      {
           int randNum;
           char code;
           string randomCode = String.Empty;//随机验证码

           //生成一定长度的随机验证码      
           //Random random = new Random();//生成随机数对象
           for (int i = 0; i < CodeLength; i++)
          {
               //利用GUID生成6位随机数      
               byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
               int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
               Random random = new Random(seed);//以生成的整数作为随机种子
               randNum = random.Next();

               //randNum = random.Next();                
               if (randNum % 3 == 1)
              {
                   code = (char)('A' + (char)(randNum % 26));//随机大写字母
              }
               else if (randNum % 3 == 2)
              {
                   code = (char)('a' + (char)(randNum % 26));//随机小写字母
              }
               else
              {
                   code = (char)('0' + (char)(randNum % 10));//随机数字
              }
               randomCode += code.ToString();
          }
           return randomCode;
      }


       /// <summary>
       /// 发送邮件验证码
       /// </summary>
       /// <param name="MyEmailAddress">发件人邮箱地址</param>
       /// <param name="RecEmailAddress">收件人邮箱地址</param>
       /// <param name="Subject">邮件主题</param>
       /// <param name="MailContent">邮件内容</param>
       /// <param name="AuthorizationCode">邮箱授权码</param>
       /// <returns></returns>
       public static bool SendMailMessage(string MyEmailAddress, string RecEmailAddress, string Subject, string Body, string AuthorizationCode)
      {

           MailMessage mail = new MailMessage();
           mail.From = new MailAddress(MyEmailAddress);//发件人邮箱地址
           mail.To.Add(new MailAddress(RecEmailAddress));//收件人邮箱地址
           mail.Subject = Subject;//邮件标题
           mail.Body = Body;  //邮件内容  
           mail.Priority = MailPriority.High;//优先级

           SmtpClient client = new SmtpClient();//qq邮箱:smtp.qq.com;126邮箱:smtp.126.com              
           client.Host = "smtp.qq.com";
           client.Port = 587;//SMTP端口465或587
           client.EnableSsl = true;//使用安全加密SSL连接  
           client.DeliveryMethod = SmtpDeliveryMethod.Network;
           client.Credentials = new NetworkCredential(MyEmailAddress, AuthorizationCode);//验证发件人身份(发件人邮箱,邮箱授权码);                  

           try
          {
               client.Send(mail);
          }
           catch (Exception ex)
          {
               MessageBox.Show(ex.Message, "发送失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
          }
           return true;
      }


       /// <summary>
       /// 验证QQ邮箱
       /// </summary>
       /// <param name="mail">邮箱</param>
       /// <returns></returns>
       public static bool CheckMail(string mail)
      {
           string str = @"^[1-9][0-9]{4,}@qq.com$";
           Regex mReg = new Regex(str);

           if (mReg.IsMatch(mail))
          {
               return true;
          }
           return false;
      }
       #endregion
  }

功能类已经写好了,每个方法对应有注释,不需要动,除非你要更改smtp服务器,默认QQ邮箱

窗体类代码

首先定义全局

        /// <summary>
       /// 定义控件全局
       /// </summary>    
       int seconds1 = 60;//倒计时60s
       int seconds2 = 60 * 2;//验证码有效时间5分钟
       string strMailVeriCode;//验证码

获取验证码后计时事件

        /// <summary>
       /// 按钮控件获取验证码后计时事件
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void timer1_Tick(object sender, EventArgs e)
      {
           if (seconds1 > 0)
          {
               seconds1--;
               btnMailVeriCode.Text = "剩余" + seconds1.ToString() + "秒";
          }
           else
          {
               timer1.Stop();

               btnMailVeriCode.Text = "获取验证码";
               btnMailVeriCode.Enabled = true;
          }
      }

此事件为第一个timer控件的事件

验证码过期后事件

        /// <summary>
       /// 验证码过期事件
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void timer2_Tick_1(object sender, EventArgs e)
      {
           if (seconds2 == 0)
          {
               timer2.Stop();
               //旧的验证码过期,生成一个新的验证码
               strMailVeriCode = MailVeriCodeClass.CreateRandomMailCode(6);
          }
      }

此事件为第二个timer控件的事件

点击获取验证码(按钮点击事件)

/// <summary>
       /// 获取验证码点击事件
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void btnMailVeriCode_Click_1(object sender, EventArgs e)
      {
           string recEMailAddress = txtMail.Text.Trim();//收件人邮箱            

           strMailVeriCode = MailVeriCodeClass.CreateRandomMailCode(6);
           string strBody = "验证码:" + strMailVeriCode + ",2分钟内有效,请勿泄漏于他人。如非本人操作,请忽略。系统邮件请勿回复。";//邮件内容            
           string strSubject = "【极简科技】注册验证";//邮件标题
           string strMyEmailAddress = "747945307@qq.com";//发件人邮箱
           string strAuthorizationCode = "klxtvclkyfu*****";//邮箱授权码

           if (string.IsNullOrEmpty(recEMailAddress))//判断是否输入了邮箱
          {
               MessageBox.Show("请输入邮箱!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
               txtMail.Focus();
          }
           else if (MailVeriCodeClass.CheckMail(recEMailAddress) == false)//判断邮箱格式是否正确
          {
               MessageBox.Show("您输入的QQ邮箱有误,请重新输入!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
               txtMail.Focus();
               return;
          }
           else//发送验证码
          {
               //发送
               if (MailVeriCodeClass.SendMailMessage(strMyEmailAddress, recEMailAddress, strSubject, strBody, strAuthorizationCode) == true)
              {
                   btnMailVeriCode.Enabled = false;

                   //计时器初始化              
                   timer1.Interval = 1000;
                   timer1.Start();
                   timer2.Interval = 1000;
                   timer2.Start();

              }
               else
              {
                   txtMail.Focus();
              }
          }
      }

在这三句代码配置好SMTP服务

            string strSubject = "【极简科技】注册验证";//邮件标题
           string strMyEmailAddress = "747945307@qq.com";//发件人邮箱
           string strAuthorizationCode = "klxtvclkyfu*****";//邮箱授权码

但是注意,这里的邮箱授权码不是邮箱密码,而是SMTP授权码!

SMTP开启并获取授权码

到这然后往下看

  • 以QQ邮箱为例,首先开启上面箭头所指的SMTP服务,随便开一个都可以

  • 然后点击下面箭头指向的生成授权码,这个就是你的SMTP授权码

验证验证码是否正确

/// <summary>
/// 验证码确认按钮点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConfirm_Click_1(object sender, EventArgs e)
{
string mailVeriCode = txtMailVeriCode.Text.Trim();//邮箱验证码

//判断验证码
if (string.IsNullOrEmpty(mailVeriCode) == true)
{
MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtMailVeriCode.Focus();
}
else if (mailVeriCode.ToLower() != strMailVeriCode.ToLower())//判断邮箱验证码是否输入正确;不区分字母大小写
{
MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
txtMailVeriCode.Focus();
return;
}
else
{
MessageBox.Show("验证成功!");
}
}

这里是确认按钮的点击事件,判断验证码是否准确无误

运行实例

到这就完成了,看看效果

C#接入SMTP邮件服务的更多相关文章

  1. 免费SMTP邮件服务:Mandrill,Sendgrid,Mailjet,Postmarkapp,MailChimp

    免费的SMTP发邮件服务平常几乎都没有怎么关注,Wordpress发邮件几乎用普通的邮箱的SMTP服务就可以完成任务,但是自从用了Discourse.Ghost博客后,发现找到一个合适的.免费配额大的 ...

  2. php 中引入邮箱服务 , 利用第三方的smtp邮件服务

    项目中用短信通知有时间限制,对一些频率比较大的信息力不从心. 使用邮箱发送信息是个不错的选择\(^o^)/! 首先要注册一个邮箱,在邮箱设置里开通smtp功能. 简单介绍下smtp,大概就是第三方客户 ...

  3. centos 邮件服务 腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25 收邮件协议:pop3 端口110 iredmail安装配置 使用邮箱系统 第三十一节课

    centos   邮件服务  腾讯企业邮箱(免费) 使用iRedmail 需要有公网的centos主机 发邮件协议:smtp 端口25  收邮件协议:pop3 端口110  iredmail安装配置 ...

  4. Windows Server 2008R2 设置SMTP邮件转发服务

    最近因业务需求在Windows Server 2008R2server上设置SMTP转发服务,主要是在业务审批过程中邮件通知相关人员审批情况, 1.在server上加入服务 2.打开服务 3.新建一个 ...

  5. python SMTP邮件发送(转载)

    Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...

  6. C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏

    邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...

  7. C# SMTP邮件发送 分类: C# 2014-07-13 19:10 333人阅读 评论(1) 收藏

    邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...

  8. (转) 关于Oracle EBS邮件服务无法使用的报错

    来源http://blog.itpub.net/23850820/viewspace-1060596/ 也可以检查如下网站:http://blog.sina.com.cn/s/blog_5b021b4 ...

  9. python学习笔记(SMTP邮件发送:带附件)

    博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...

随机推荐

  1. sftp服务器搭建以及挂载新硬盘到home目录下

    前言 我身边一直有一个空闲不用的硬盘,一直空闲不用,闲暇的时候想到为什么不用起来呢,于是想起来搭建一个sftp服务器,当做云盘用了 搭建sftp服务器 SFTP称作"安全的FTP" ...

  2. Linux Centos7使用ping命令ping不通网络的解决方案

    本解决方案不配置dns,都是ping的IP地址,所以如果想ping域名,则加上DNS项的配置后自行尝试吧 我使用的虚拟机系统信息: Linux:Centos7 Network:虚拟机设置的桥接模式(自 ...

  3. 学习Docker(一)

    一.docker介绍 docker是半虚拟化,比完全虚拟化性能高,可以使用物理机性能100% Docker 镜像(Images): 用于创建 Docker 容器的模板 Docker 容器(Contai ...

  4. 学习RabbitMQ(四)

      I. 消息中间件特点: 1,异步处理模式 消息发送者可以发送一个消息而无需等待响应,消息发送者将消息发送到一条虚拟的通道或队列上,消息接收者则订阅或监听该通道,一条消息可能最终转发给一个或多个消息 ...

  5. centos 后台 运行jar包方法

    后台运行jar包方法: 1.nohup java -jar shareniu.jar & nohup意为后台不挂断运行,与是否账号退出无关 2.nohup java -jar shareniu ...

  6. jquery+html5+canvas实现图片 预览 压缩 上传

    javascirpt (function($){ $.fn.extend({ aiiUpload:function(obj) { if(typeof obj !="object") ...

  7. html5网页录音和语音识别

    背景 在输入方式上,人们总是在追寻一种更高效,门槛更低的方式,来降低用户使用产品的学习成本.语音输入也是一种尝试较多的方式,有些直接使用语音(如微信语音聊天),有些需要将语音转化为文字(语音识别).接 ...

  8. 体验js之美第八课-面向对象创建和继承终结篇

    概述 到这里我们讲说js面向对象的系列部分的最后一个课程,面向对象必须掌握两个东西一个是对象的创建一个是继承.这节课我们重点说说这两个问题最后我们说下在ES6里面面向对象怎么玩. 1对象的创建 我们第 ...

  9. vue2.0开发聊天程序(八) 初步完成

    项目地址 服务器源码地址:https://github.com/ermu592275254/chat-socket 网页源码地址:https://github.com/ermu592275254/ch ...

  10. 前端面试题整理——VUE双向绑定原理

    VUE2.0和3.0数据双向绑定的原理,并说出其区别. 代码: <!DOCTYPE html> <html lang="en"> <head> ...