前言

昨天晚上和师傅聊天,说到机房重构的时候添加新功能,比如找回密码进行密码验证,扫码登录一类的东西,今天早上开始试着实现一下。大概用了两个小时的时间实现了这个功能,一开始看到代码很是烦躁,不知在哪开始下手,通过多篇博客的总结,分析和实践,最终实现了这个功能,也算是一大幸事

实现过程

首先在UI层创建一个验证的窗体(因为开始是实验,做了一个简单的),然后在邮箱号内输入数据库中对应的卡号注册时的邮箱号,然后在邮箱内会收到一封验证码,在验证码框输入即可验证。输入错误后,就会提示错误,正确后就会提示正确。

代码

using System;
using System.Net;
using System.Net.Mail;
using System.Windows.Forms;namespace UI
{public partial class frmE_Mail : Form{public frmE_Mail(){InitializeComponent();}//定义一个全局的string类型的验证码string code= "";//定义一个字符创,里面包含所需要的验证码元素string a = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//定义一个时间,用于倒计时int time;private void button1_Click(object sender, EventArgs e){//实例化一个随机数Random b = new Random();yzm = "";//循环6次得到一个随机的六位数的验证码for (int i = 0; i < 6; i++){code= code+ a.Substring(b.Next(0, a.Length), 1);}//创建服务器对象SmtpClient smtp = new SmtpClient("smtp.qq.com");//创建邮件对象准备发送MailAddress mail1 = new MailAddress("邮箱账号@qq.com");try{//获取文本框的收件人的邮箱MailAddress mail2 = new MailAddress(textBox1.Text);//创建邮件对象,准备发送【mail1是发件人地址,mail2是收件人地址】MailMessage mess = new MailMessage(mail1,mail2);//邮件的标题mess.Subject = "邮件验证码";//邮件的内容mess.Body = "您的验证码为" + code+ ",请在30分钟内验证,系统邮件请勿回复!";//创建互联网安全证书NetworkCredential cred = new NetworkCredential("邮箱账号@qq.com", "此为授权码");//证书绑定到服务器对象以便服务器验证smtp.Credentials = cred;//开始发送smtp.Send(mess);//发送完成后按钮不可用button1.Enabled = false;//激活timer事件timer1.Enabled = true;//倒计时30秒time = 30;MessageBox.Show("发送成功");}catch{MessageBox.Show("输入正确的邮箱格式!");}}private void button2_Click(object sender, EventArgs e){if (code== textBox2.Text){MessageBox.Show("正确");}else{MessageBox.Show("错误");}}private void timer1_Tick(object sender, EventArgs e){time--;button1.Text = "time";if (time <= 0){button1.Text = "发送";timer1.Enabled = false;button1.Enabled = true;}}}
}

注意: 实现此功能,需要开启POP3/SMTP服务(发件者的服务)。具体步骤如下:

进入发送人qq邮箱→→设置→→账户→→开启POP3/SMTP服务

开启之后会有一个授权码,保存住,代码中会需要。

知识点:

       1、原理: 

  例如A使用163邮箱发送邮件给B(qq邮箱)。首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smtp服务器上,163的Smtp服务器会根据B的邮箱账号,把邮件通过Smtp协议发给QQ邮箱的Smtp服务器。QQ的Smtp服务器接收到邮件消息后会将之存储在QQ邮箱的邮件存储设备上。当B登陆QQ邮箱后,如果有新邮件,POP3服务器就会从QQ邮箱的邮件存储设备上读出邮件并通过POP3/IMAP服务发送给邮件客户端的B。

关于SMTP 、POP3和IMAP(POP3和IMAP的区别)【研究不是很透彻】:

他们是邮件协议。
        smtp是发送协议,pop3和IMAP是接收协议.
        POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
        而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
        同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

2、SmtpClient、MailAddress和MailMessage

使用 SmtpClient 类和 MailMessage 类需引入 System.Net.Mail 命令空间,

SmtpClient:有三个重载

            //创建服务器对象
            SmtpClient smtp = new SmtpClient("smtp.qq.com");

MailAddress: 就是创建'发件者’对象。
            //创建邮件对象准备发送
            MailAddress ab = new MailAddress("1163140194@qq.com");

MailMessage: 此处的用法是

      1、微软已经帮我们封装好了发送邮件的类 MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。MailMessage常用的一些属性有:

  1.From:发件人邮箱地址。

  1.2、To:收件人的邮箱地址。

     1.3、CC:抄送人邮箱地址。

  1.4、Subject:邮件标题。

  1.5、Body:邮件内容。

1.6、Attachments:邮件附件

2、还需要用到SmtpClient类进行发送邮件。SmtpClient类的意思是:允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。SmtpClient类常用的一些属性和方法:

  2.1、Host: 获取或设置用于 SMTP 事务的主机的名称或 IP 地址。

  2.2、EnableSsl:是否使用安全套接字层加密连接。

  2.3、UseDefaultCredentials:是否随请求一起发送。

  2.4、Credentials:获取或设置用于验证发件人身份的凭证。

  2.5、Send():发送。

使用C#实现邮箱验证相关推荐

  1. 邮箱验证功能原理 语法 属性

    邮箱验证功能原理 1 [已解决问题] 浏览: 3508次 很多地方都在注册账号的时候使用邮箱验证功能.注册后发送一封邮件到注册邮箱里面.然后点击 邮箱里面的链接 激活邮箱. 还有手机验证 这些的原理是 ...

  2. iOS开发-UITextField手机号和邮箱验证

    不管是网页是手机,用户注册登录的时候绝大数时候都需要手机号码和邮箱地址,而且有些App会限制只能使用手机号注册,iOS方面邮箱正则比较简单,不过手机号码验证找了一下网上的,发现三大运营商的号码段有所变 ...

  3. 通过邮箱验证注册——.net代码

    在写一些面向用户的网站类的程序时,必不可少的一个就是注册,通常情况下,我们会选择邮箱验证后注册,或者手机发送验证码注册.上篇文章中已经简单的描述了手机验证注册,这篇主要介绍一下邮箱验证. 邮箱验证的步 ...

  4. php ajax邮箱,PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)

    前 言 直接上代码有点不厚道.于是按照天朝传统,整段描述吧....(本人语言表达能力有限,大家忍着看) 功 能 在网站注册用户时使用,主要为了无刷新异步验证用户输入的用户名或者Email是否已注册. ...

  5. php邮箱验证laravel接口,Email认证 | Laravel 中文文档 - 码农教程

    简介 许多 web 应用要求用户在使用之前进行 Email 地址验证.Laravel 不强迫你在每个应用中重新实现它,Laravel提供了方便的方法来发送和验证电子邮件验证请求. Model 预备 开 ...

  6. 邮箱验证 ——ACM

    邮箱验证 POJ 注册的时候需要用户输入邮箱,验证邮箱的规则包括: 1)有且仅有一个'@'符号 2)'@'和'.'不能出现在字符串的首和尾 3)'@'之后至少要有一个'.',并且'@'不能和'.'直接 ...

  7. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  8. lt;++mysql_php+js+mysql设计的仿webQQ-lt;1gt;邮箱验证

    最近用php+js+mysql做了一个仿webQQ的课程设计,收获很多,现在将关键的技术总结一下,供大家学习交流. <1>邮箱验证 用户在注册的时候,会在文本框里输入邮箱,这个时候通过文本 ...

  9. Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块)

    Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块) 记录大创项目中,在express中使用第三方模块nodemailer完成邮箱验证功能,含客户端请求验证邮件和服 ...

  10. layui自带验证体系:手机号验证、邮箱验证、必填项非空验证、数字验证(含代码、案例)

    layui自带验证体系:手机号验证.邮箱验证.必填项非空验证.数字验证(含代码.案例) 案例 · 截图: 实例代码: <!DOCTYPE html> <html> <he ...

最新文章

  1. 展示动图_DNF:多GIF动图展示,暗夜使者个性武器幻化推荐
  2. Three.js的绘制流程(三)----地形
  3. python的两种循环结构_python分支和循环结构
  4. Linux内核社区迁移到github?
  5. 2022百度职业资格考试培训行业洞察
  6. Python 使用requests发送POST请求
  7. 计算机发展史和数字电路
  8. 三层架构之抽象工厂加反射mdash;mdash;实现数据库转换
  9. 中文在线语音识别技术获重大突破!百度输入法准确率超行业最高水平15%
  10. lan pci 联想开机_我的联想电脑开机老显示DHCP
  11. button3 电脑上mouse,鼠标侧键设置工具(X-Mouse Button Control)
  12. 华氏度和摄氏度的相互转化
  13. 迪卡侬中国与阿里云达成合作;咖世家与恒天然在中国推出益生菌咖啡;默克高性能材料业务更名为电子科技 | 美通企业日报...
  14. BAT资深算法工程师「Deep Learning」读书系列分享(一) | 分享总结
  15. Javascript代码优化的8个知识点 1
  16. 恒生电子股份有限公司--软件测试--《社招、校招jd、校招行程,招聘动态》整理
  17. 计算机专业教师资格证教学设计,教师资格证教案
  18. 2020 BAPC Preliminaries 题解
  19. 知物由学 | 驱动反外挂另辟蹊径,让游戏避免看不见的漏洞攻击
  20. LoRa技术的行业发展前景如何?

热门文章

  1. Android线性与相对布局
  2. canvas实现图片标记
  3. 一名前端开发者的2020年终总结
  4. 计算机绘制表格教案,计算机基础教案——Word表格制作技术
  5. phpHiveAdmin 软件开发和知识整理 (hive 读取后台log)
  6. 哪些人能创建百度百科词条,创建百科有什么规则
  7. Centos6安装和使用ClamAV杀毒软件
  8. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类
  9. Linux(ubunto)安装flash教程
  10. 2020年中科院软件所夏令营经历