使用C#实现邮箱验证

前言        

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

实现过程

        首先在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("[email protected]");

     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():发送。

发布了114 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/103119588
今日推荐