功能需求

因为项目需要有个忘记密码验证邮箱再重新修改密码的功能,然后我选用了很简单的一个方案,通过验证登录用户的邮箱然后发送邮件,通过这个邮件发送的链接地址来最后实现密码修改的小功能。

项目环境及实现

网上有人说目前 .NET Core 还不支持 SMTP 协议,我使用的.net core 2.1这个版本还是可以的。但是1.0,1.1的旧版本是不行的,有兴趣可以去试,我是从1.0升级上来才发现的...当然还可借助于一些第三方组件来达到目的,具体可参考资料 https://www.cnblogs.com/savorboard/p/aspnetcore-email.html, 下面我介绍一下我的方法:

简单邮件发送核心代码如下:

         public RequestResult SendEmail(EmailModel model)
{ SmtpClient client = new SmtpClient()
{
Host = model.SmtpServer, //"smtp.qq.com";
Port = ,
//通过网络发送到SMTP服务器
DeliveryMethod = SmtpDeliveryMethod.Network,
//发件人登录邮箱的用户名和密码
Credentials = new NetworkCredential(model.UserId, model.Password.Trim())
};
MailAddress fromAddress = new MailAddress(model.SendEmail, model.SendName);
MailAddress toAddress = new MailAddress(model.ReceiveEmail, model.ReceiveName);
MailMessage mailMessage = new MailMessage(fromAddress, toAddress);
mailMessage.Subject = "測試郵件";
mailMessage.Body = "einspect系統測試郵件密碼是否正確";
mailMessage.SubjectEncoding = Encoding.UTF8;
mailMessage.BodyEncoding = Encoding.UTF8;// Encoding.GetEncoding("GB2312");
mailMessage.Priority = MailPriority.High;
try
{
client.Send(mailMessage);//发送邮件
result.Message = "发送成功!";
result.IsSuccess = true;
}
catch (Exception ex)
{
// 1. 连接SMTP服务器失败
// 2. 用户名或密码验证错误
// 3. 超时
// 这三种情况导致抛出SmtpClient异常
// -------
result.Message = "测试失败!";
result.IsSuccess = false;
} return result;
}

总结经验

【另外我已把我的DEMO源码打包,欢迎下载,地址:https://download.csdn.net/download/buxaingzhangda/10874816

  • 遇到的第一个坑,邮箱不可用. has no permission 这样的错误.

英文错误为:Mailbox unavailable. The server response was: User has no permission.

【其实用.Net发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的,qq邮箱的也是需要手动开启,不然登录总是会被拒绝,验证没有权限。解决办法是进入相关邮箱去设置客户端授权密码,选择开启即可,如下截图】

  注意:最后,切忌设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。

'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.

上面是抛出的异常信息。我的解决方案是:将编码格式统一改成了UTF-8。【使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字*而不会出现乱码。*
         也在这补充一下gb2312是简体中文的码;gbk支持简体中文及繁体中文;big5支持繁体中文;utf-8支持几乎所有字符 】

    MailMessage mailMessage = new MailMessage(fromAddress, toAddress);
mailMessage.Subject = "測試郵件";
mailMessage.Body = "einspect系統測試郵件密碼是否正確";
mailMessage.SubjectEncoding = Encoding.UTF8;
mailMessage.BodyEncoding = Encoding.UTF8;// Encoding.GetEncoding("GB2312");

另外我再分享一个别人的处理方案,我嫌麻烦,想看的也可以看看,https://www.cnblogs.com/chr-wonder/p/8464204.html

  • 遇到的第三个坑,输入发件人的账号时,不是输入邮箱的完整地址.(如:你的邮箱abcd@163.com,那么你的登录账号通常就是abcd)

SmtpClient client = new SmtpClient()
{
Host = model.SmtpServer, //"smtp.qq.com";
Port = , //端口
//通过网络发送到SMTP服务器
DeliveryMethod = SmtpDeliveryMethod.Network,
//发件人登录邮箱的用户名和密码
Credentials = new NetworkCredential(model.UserId, model.Password.Trim()) // 邮箱登录账号 abcd ,密码 qvkqkyiuebjhi
};

   好了,整个过程分享完了,本人比较懒也觉得不太擅长写东西,偶尔有兴致就记录一下吧,学习的路上总是痛苦漫长的,但过程结果会给你带来快乐和成就感。让我们一起成长吧,各路大神如发现错误请帮忙指正,我会虚心修改的,最后感谢不喷,18年就要结束了,让我们用新的姿态去迎接新的一年吧!

  

在 ASP.NET Core 中发送邮件遇到的坑_学习笔记的更多相关文章

  1. Asp.net core 2.0.1 Razor 的使用学习笔记(五)

    按说这里应该写关于Role角色类的笔记,但是我还没时间实验这块,所以等以后我搞定了再来分享.现在先写其他部分. Asp.net core 2.0.1 Razor 的使用学习笔记——建立模型 按照微软官 ...

  2. Asp.net core 2.0.1 Razor 的使用学习笔记(六)

    Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6  .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成 ...

  3. 如何在 ASP.NET Core 中发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  4. Asp.net core 2.0.1 Razor 的使用学习笔记(一)

    环境:vs2017 版本:15.5.6 一.新建项目 1.文件>新建>项目>Visual c#>.NET Core>ASP.NET Core Web应用程序(“.NET ...

  5. Asp.net core 2.0.1 Razor 的使用学习笔记(三)

    ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(二)—用户账户及cookie配置 修改用户账户及cookie配置 一.修改密码强度和用户邮箱验证规则 ...

  6. Asp.net core 2.0.1 Razor 的使用学习笔记(四)

    ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(三)—用户注册 一.修改用户注册 1.打开Pages文件夹>Account>Regist ...

  7. Asp.net core 2.0.1 Razor 的使用学习笔记(二)

    ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(一)—启用用户管理 一.修改和启用默认的用户账户管理和角色管理 在Data目录中添加Applicat ...

  8. 在 ASP.NET Core 中使用 MySql 踩坑记录

    使用 Pomelo.EntityFrameworkCore.MySql 生成 MySQL 数据库 关于如何使用请查看项目文档即可 组件地址:https://github.com/PomeloFound ...

  9. ASP.NET Core中实现单体程序的事件发布/订阅

    标题:ASP.NET Core中实现单体程序的事件发布/订阅 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码: ...

随机推荐

  1. socket学习

    对应的代码: 服务端: import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机 phone.bind(( ...

  2. 变量 range while for input

    1.程序 =数据结构+算法 1.1.数字计算机的编码指令的次序 1.4.程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.为实现预期目的而进行操作的一系列语句和指 ...

  3. redis bind的坑

    启动redis时,发现外网访问不了 检查以下方面 1. ping redis 的ip 2. 检查防火墙端口是否开放3. bind bind bind指的是绑定哪个ip可以访问 bind 要填写你自己r ...

  4. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165304

    下载镜像文件 在官网上下载好64位的镜像文件后,按照网上是教程进行安装,安装成功后截图如下 接下来是安装增强功能 按照教程安装增强功能后截图如下 设置共享文件 安装搜狗 在安装搜狗时遇到了安装失败的情 ...

  5. Spring 整合WebSocket, Error during WebSocket handshake: Unexpected response code: 302 还有200的错误

    springboot 集成websocket 及其简单,,,但是管理端使用的是Spring,原生配置,发生这个错误,,,302 被重定向了...我起的是本地locallhost,把ip换成 local ...

  6. [Tools] 一种调试 Android App 接口的方式 (Fiddler/Wireshark)

    要求:Windows电脑与手机在同一局域网内(Wifi). [ Fiddler 设置代理 ] 下载地址:https://www.telerik.com/download/fiddler 依次 Tool ...

  7. python day11 函数(第三篇)

    2019.4.11 S21 day11笔记总结 1. 函数小高级 ( 5* ) 1 函数名可以当作变量来使用 def func(): print(123) v1 = func # func代表函数的地 ...

  8. Vue+DataTables warning:table id=xxxx -Cannot reinitialize DataTable.报错解决方法

    问题描述: 使用DataTables来写列表,用vue来渲染数据,有搜索功能,每次点击搜索就会报错,如下图所示. 问题排查: 找了一系列原因,最后发现是我每次请求完数据之后都会添加分页功能,从而导致了 ...

  9. BASE64、MD5、SHA、HMAC几种加密算法

    本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法.    BASE64编码算法不算是真正的加密算法.    MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加 ...

  10. css3+html5特效-向上滑动

    css+html5特效-向上滑动 效果描述:切换的下拉和上拉状态 鼠标悬浮:下拉鼠标离开:上拉 /*外容器设置*/ .box1{position:relative;top:100px;left:100 ...