C#使用SMTP协议发送验证码到QQ邮箱

在程序设计中,发送验证码是常见的一个功能,用户在注册账号时或忘记密码后,通常需要发送验证码到手机短信或邮箱来验证身份,此篇博客介绍在C#中如何使用SMTP协议发送验证码到QQ邮箱

SMTP协议

SMTP 的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
发送原理:将验证码邮件发送给smtp服务器,然后再由smtp服务器发送到目标邮箱,发送之前需校验发送人身份,避免产生大量垃圾邮件

实现步骤

1、开启POP3/SMTP服务

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

在开启POP3/SMTP服务时,会生成一个授权码,保存授权码,在验证发送人身份时需填入授权码。

2、添加发送邮件方法

 /// <summary>
2 /// 发送验证码
3 /// </summary>
4 /// <param name="email">收件人邮箱</param>
5 /// <param name="content">邮件主题</param>
6 /// <param name="body">邮件内容</param>
7 public static void Sends(string email, string content, string body)
8 {
9 string smtp = "smtp.qq.com";//qq的SMTP服务器地址
SmtpClient _smtpClient = new SmtpClient();
_smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
_smtpClient.Host = smtp; //指定SMTP服务器
_smtpClient.Credentials = new System.Net.NetworkCredential("发件人地址", "授权码");//设置用于验证发件人身份的凭据
MailMessage _mailMessage = new MailMessage();
//发件人,发件人名
_mailMessage.From = new MailAddress("发件人地址", "发件人名称");
//收件人
_mailMessage.To.Add(email);
19 _mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");//标题编码
_mailMessage.Subject = content;//邮件主题
_mailMessage.Body = "验证码" + body + "用于" + content + ",请勿向任何人提供验证码!";//邮件内容
_mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文编码
23 _mailMessage.IsBodyHtml = true;//设置为HTML格式
_mailMessage.Priority = MailPriority.High;//优先级
try
{
27 _smtpClient.Send(_mailMessage);//发送邮件
}
catch (Exception ex)
{
throw;
}
33 }

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

MailMessage类:

From:发送邮件的地址
To:接收邮件的地址
Subject:邮件的标题
Priority:邮件的优先级(分别为为High,Low,Normal)
Attachments:电子邮件的数据的附件集合
Bcc:密送地址
Cc:抄送地址
Body:邮件正文
SubjectEncoding:电子邮件的主题内容使用的编码
IsBodyHtml:邮件正文是否为 Html 格式的值

SmtpClient类:

DeliveryMethod:指定如何处理待发的电子邮件
Host:SMTP 事务的主机的名称或 IP 地址
Credentials:设置用于验证发件人身份的凭据

3、调用Sends()方法

略~

4、附上生成随机验证码代码

 public string createCode()
2 {
3 string code = "";
//所有候选组成验证码的字符
char[] codeChars = new char[] {
'', '', '', '', '', '', '', '', '', '',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
for (int i = ; i < ; i++)
{
int rnd = random.Next(, );
code += codeChars[rnd];
}
return code;
}

关于C#使用SMTP协议发送验证码到QQ邮箱问题分享到此结束,如有不足之处,欢迎大家留言讨论!

C#使用SMTP协议发送验证码到QQ邮箱的更多相关文章

  1. C# WinForm 使用SMTP协议发送QQ邮箱验证码

    文章来自:https://blog.csdn.net/IT_xiao_guang_guang/article/details/104336604 前言   在程序设计中,发送验证码是常见的一个功能,用 ...

  2. 用CBrother脚本实现smtp协议发送一份邮件

    用CBrother脚本实现smtp协议发送一份邮件 之前用CBrother脚本写了一个拯救“小霸王服务器”的程序,公司人用着都挺好用,但是有时候谁重启了服务器其他人不知道,造成了多人多次重启,每个人都 ...

  3. java代码发送邮箱验证码与qq邮箱smtp服务

    发送邮箱的类封装,在此之前需要一个jar包  javax.mail.jar 下载链接https://github.com/javaee/javamail/releases/download/JAVAM ...

  4. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

  5. JavaMail使用SMTP协议发送电子邮件(详解)

    Properties props = new Properties(); props.setProperty("mail.transport.protocol", "sm ...

  6. SMTP协议解读以及如何使用SMTP协议发送电子邮件

    电子邮件协议中POP3协议用于接收邮件,SMTP协议用于发送邮件.SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议,字如其名.   相较于POP3而言 ...

  7. 使用python发送163邮件 qq邮箱

    使用python发送163邮件 def send_email(title, content): import smtplib from email.mime.multipart import MIME ...

  8. C#QQ邮箱验证

    注意: QQ邮箱的简单邮件传输协议(SMTP)使用了SSL加密,必须启用SSL加密.指定端口. QQ邮箱POP3/SMTP服务默认是关闭的,需要开启服务(设置=>账户=>开启服务). QQ ...

  9. TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)

    在 PHP 应用开发中,往往需要验证用户邮箱.发送消息通知,而使用 PHP 内置的 mail() 函数,则需要邮件系统的支持. 如果熟悉 IMAP/SMTP 协议,结合 Socket 功能就可以编写邮 ...

随机推荐

  1. flask-restful在解析的请求一定要传content-type:application/json吗?答:其实不需要!

    在处理flask-restful api请求时,因为postman发送的格式为text,没有携带content-type:application/json,在解析参数的时候,参数的值都给搞成了空,导致 ...

  2. 19-C#笔记-多态性

    # 静态多态性 --- ## 1 函数重载 和C++一样. --- ## 2 运算符重载 public static operator public static Box operator+ (Box ...

  3. swiper使用总结-坑点汇总

    1.开发中遇到个坑,ScrollableTabView(选项卡)+swiper(轮播图)在安卓下,初始化的第一页不会渲染,需要在ScrollableTabView挂载完毕后再渲染swiper. 解决方 ...

  4. JDOJ 2175: 忠诚2

    JDOJ 2175: 忠诚2 题目传送门 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让 ...

  5. 安装Vyos

      Vyos是一个开源的网络操作系统,基于Debian,相对于ROS需要购买license,Vyos就更加开放的多. 下载Vyos wget http://vyos.hecint.com/iso/re ...

  6. 【java异常】Expected one result (or null) to be returned by selectOne(), but found: 63

    OmQuotaTBBean omQuotaTBBean = mOmQuotaTBMapper.findOmQuotaTB(); 改成 List<OmQuotaTBBean> listOmQ ...

  7. eclipse scala语法用java检验 报错问题

    传送门 https://stackoverflow.com/questions/8522149/eclipse-not-recognizing-scala-code 还是 直接用eclipse的 sc ...

  8. 请简要描述margin重复问题,及解决方式

    两个相邻的盒子垂直方向上的margin会发生重叠,取较大的那个值,而不是相加. 解决: 父级设置padding代替margin 父级设置overflow:hidden 当前元素设置透明的边框 使用绝对 ...

  9. mysql 8创建远程访问用户以及连接mysql速度慢的解决方法

      mysql 8创建远程访问用户 [root@demo /]# mysql -u root -p  #登录服务器数据库 Enter password:123xxx >user mysql; & ...

  10. Nuxt.js中scss公用文件(不使用官方插件style-resources)

    项目多多少少应该都遇到有公用文件这种情况,比如说偶尔某一天产品来找你,能不能明天把网站的这个颜色给我改下?第二天再来给我换回来? 如果再css2.x时代,不使用css预处理技术,这一改只能“查找替换” ...