前端不说了。主要讲后端。通过postman模拟前端请求。

参考文章:.NET发送邮箱(验证码)_紫晶城的博客-CSDN博客 但实践过程中发现一些问题,现已解决。故在此做一个记录。

第1步:设置发件邮箱开启POP3服务。我这边是126邮箱。

第2步:写后端代码:

接口:SendEmailVerificationCode4Register

        /// <summary>/// 注册页面,发送邮箱验证码/// </summary> /// <param name="phoneNum"></param>/// <returns></returns>[HttpPost]public ActionResult SendEmailVerificationCode4Register(SendEmailVerificationCode4RegisterModel emailVerifyModel){var result = new ResultDto();//定义一个接口响应对象,其实就是一个object,方便把结果返回给前端#region 一些数据验证//非空验证if (emailVerifyModel == null){return Json(result.Error("传入参数为空"));}if (string.IsNullOrWhiteSpace(emailVerifyModel.Email)){return Json(result.Error("邮箱不能为空"));}if (string.IsNullOrWhiteSpace(emailVerifyModel.UserName)){return Json(result.Error("用户名不能为空"));}//验证邮箱格式if (!RegexHelper.IsEmail(emailVerifyModel.Email)){return Json(result.Error("邮箱格式不正确"));}//系统用户表:var existSysUser = _sysUserDbContext.SysUsers.FirstOrDefault(m => (m.UserName == emailVerifyModel.UserName || m.Email == emailVerifyModel.Email) && !m.Deleted);if (existSysUser != null){if (existSysUser.UserName == emailVerifyModel.UserName){return Json(result.Error("用户名已存在"));}return Json(result.Error("邮箱已存在"));}#endregion//开始发送邮件var verifyCode = SendEmailVerificationCode(emailVerifyModel.Email);result.Data = new{verifyCode};return Json(result.OK("发送成功"), JsonRequestBehavior.AllowGet);}

SendEmailVerificationCode:

        private string SendEmailVerificationCode(string emailTo){string verifyCode = GenerateVerifyCode();//发送验证码string content = "****提醒您:您正在使用邮箱安全验证服务,您本次操作的验证码是:" + verifyCode;string subject = "【****】登录注册用户信息提示";EmailHelper.SendEmail1(emailTo, subject, content);return verifyCode;}/// <summary>/// 生成4位数字验证码/// </summary>/// <returns></returns>public static string GenerateVerifyCode(){Random rad = new Random();//实例化随机数产生器rad;int value = rad.Next(1000, 10000);//用rad生成大于等于1000,小于等于9999的随机数;//随机生成4位验证码string verifyCode = value.ToString();return verifyCode;}

EmailHelper.SendEmail:

        /// <summary>/// 发送邮箱/// </summary>/// <param name="mailTo">收件人</param>/// <param name="mailSubject">邮件主题</param>/// <param name="mailContent">邮件内容</param>/// <returns></returns>public static void SendEmail1(string mailTo, string mailSubject, string mailContent){try{SmtpClient mailClient = new SmtpClient("smtp.126.com");mailClient.EnableSsl = true;mailClient.UseDefaultCredentials = false;//Credentials登陆SMTP服务器的身份验证.mailClient.Credentials = new NetworkCredential("你的发件邮箱@126.com", "pop3授权密码");//邮箱,pop3授权密码(注意不是你的126邮箱登录密码)MailMessage message = new MailMessage(new MailAddress("你的发件邮箱@126.com"), new MailAddress(mailTo));//发件人,收件人message.IsBodyHtml = true;// message.Bcc.Add(new MailAddress("tst@qq.com")); //可以添加多个收件人message.Body = mailContent;//邮件内容message.Subject = mailSubject;//邮件主题//Attachment 附件//Attachment att = new Attachment(@"C:/hello.txt");//message.Attachments.Add(att);//添加附件//Console.WriteLine("Start Send Mail....");//发送....mailClient.Send(message); // 发送邮件}catch (Exception e){Logger logger = LogManager.GetCurrentClassLogger();logger.Error(LoggerHelper.GetErrorMsg(e, "EmailHelper", "SendEmail1", null));}}

第3步,执行。

运行结果:

期间遇到两次报错:

  1. 报错1:

    1. 报错信息:邮件发送问题,邮箱不可用,服务器响应为【此处是一段乱码】
    2. 报错代码:mailClient.Send(message); // 发送邮件
    3. 出错原因:经排查,发现是POP3服务未开启。开启后此报错即可解决。
  2. 报错2:
    1. 报错信息:不允许使用邮箱名称。 服务器响应为:authentication is required
    2. 错误代码(依然是):mailClient.Send(message); // 发送邮件
    3. 出错原因:经排查,发现是这段代码中的密码,我用了邮箱的登录密码,而不是POP3授权密码。改成POP3授权密码即可解决。
mailClient.Credentials = new NetworkCredential("你的发件邮箱@126.com", "pop3授权密码");//邮箱,pop3授权密码(注意不是你的126邮箱登录密码)

.NET发邮件(验证码)相关推荐

  1. 一种发短信验证码,二种发邮件验证码

    前台: <divclass="rightcon bgwhite"> <input type="text"name="bae017&q ...

  2. SpringBoot-Mail 发邮件(单发、群发、加附件、HTML格式)

    我们处理异常通常会写入日志,但我们无法及时知道.如果能够将异常信息发送到邮箱,我们可以在第一时间发现这个异常.除此以外,还可以用来给用户发验证码以及各种离线消息等等. 说明:本Demo是用Spring ...

  3. Python基础笔记_Day12_Python元类、type动态创建类、Python动态创建方法、Python运算符、Python发邮件、短信

    Day12_Python元类.type动态创建类.Python动态创建方法.Python运算符重载.Python发邮件.短信 12.01_Python语言基础(类对象)(熟悉) 12.02_Pytho ...

  4. Python发邮件遇到的巨坑

      因网站需要,准备添加一个邮箱绑定的功能.使用的是django框架,因为它已经封装好了发邮件的模块,想来不会太难.结果一试,553.553.553-然后,一天过去了- 1.使用QQ邮箱发邮件   上 ...

  5. springboot项目系列-论坛系统06整合rabbitmq实现异步发邮件

    springboot项目系列-博客系统06整合rabbitmq实现异步发邮件 今天突发奇想,既然会了rabbitmq为何不用,之前的注册发邮件功能是使用springboot的异步任务做的,但是想想以后 ...

  6. Java 发邮件-带附件且正文html格式

    入职新公司不久,接到一个给用户发邮件的需求,有两点需要说明的:1)正文需要格式化:2)需要带附件. 大概了解了一下需求,我马上开始思考,现有项目中是否有类似的接口可以支持,如果可以支持,那我就不用再开 ...

  7. springboot 简单发邮件 QQ邮箱

    文章目录 pom yaml 发邮件 pom <dependency> <groupId>org.springframework.boot</groupId>< ...

  8. 利用exchangelib快速上手使用python发邮件

    前言 之前一直知道使用python smtp发邮件,但是最近发现一个神器exchangelib,用这个神器发邮件,简直简单的不能再简单了,官方文档在这里 实例 只需要将下面的xxx改成你的信息就可以了 ...

  9. 公司内部exchange2010 下删除误发邮件

    1.Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 2.get-mailbox | search-mailbox -Search ...

  10. 自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!

    5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg (10.71 KB, 下载次数: 0) 2018-9-3 02:21 上传 关注<一碳科技>,获取更多知识! 前言 相信年夜家都 ...

最新文章

  1. 如何构建可解释的推荐系统?| 深度
  2. 中小学计算机报名网址,小学网上报名系统_小学网上在线报名解决方案_海之睿报名系统...
  3. 特性,物料特性,批次特性(转自SAPNow)
  4. Silverlight Tips(1)
  5. 从源码构建 MyBatis Generator(MBG)
  6. C++指向成员函数的指针
  7. Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学
  8. serverless 构建_使用Serverless,StepFunctions和StackStorm Exchange构建社区注册应用程序-Episode…...
  9. mysq5.7 主主同步
  10. C/C++网络编程工作笔记0003---客户服务端程序说明
  11. android学习笔记---发送状态栏通知
  12. 更改收藏夹路径和桌面路径
  13. 【统计学】10个必知必会的统计学问题 (附答案)
  14. tune声场测试软件_(整理)SmaartLive实用声场测试软件的规范使用.
  15. 尚学堂python开发工具_尚学堂百战程序员分享:Python的数据模型
  16. 【Linux】进程间通信之消息队列
  17. php提取网页mp3,怎样提取网页视频中的音频文件
  18. 东非大裂谷 - 树dp
  19. 【MAC M1芯片】PS已解决在M1苹果电脑上出现“液化”和WEB等黑屏问题
  20. 人类不良习惯影响宠物健康

热门文章

  1. jupyter notebook 代码自动补全 加 显示变量功能 以及让3d图片可以旋转
  2. readlink /var/lib/docker/overlay2: invalid argument的解决方案
  3. 20165309 实验四 Android程序设计
  4. 睦星科技Kolmostar获1000万美元 A 轮融资,将推出更多元的GNSS定位解决方案
  5. java 接口耗时分析_性能优化案例(2019-案例78)-接口性能耗时问题分析
  6. java面试-多线程常见面试题
  7. mac os sierra卸载java_如何删除Install macOS High Sierra.app
  8. 网络适配器不见了网络连接不见了的解决方法
  9. android sqlite数据库代码,android sqlite数据库代码
  10. 2019小程序创业如何把握正确方向