前言

平时工作中很少用到需要发邮件的功能,所以邮件这块的功能也没有太过关注。近期有一个项目需要接收用户的反馈,上边决定使用邮件,直接将反馈信息发送给领导,也就有了这篇文章。实现发邮件不难,但是开发中遇到了一个问题,就是本地测试都是好好的,结果部署到阿里云服务器后,邮件总是发送失败,经过一番的折腾终于找到了问题,特此记录。

一、安装需要的类库

我这边使用的 .Net Core 3.1进行的开发,经过查找最终决定使用 MailKit,这里最终选择了 NETCore.MailKit ,不为别的,时间紧任务重,这个实现起来最方便。

Install-Package NETCore.MailKit -Version 2.0.3

二、配置

配置 appsetting.json

以下示例使用的网易的163邮箱,在appsetting.json 中添加以下配置

"EmailOptions": {"SenderName": "系统邮件", //发送者名称,可在代码中重新替换"FromAddress": "", //发件者邮箱"ToAddress": "", //接收人邮箱"Host": "smtp.163.com", //主机"Port": 25, //端口 阿里云默认25端口不开放,需要使用SSL的465端口"UserName": "", //发件邮箱账号"Password": "" //发件邮箱密码}

添加 EmailOptions

针对上边的配置,创建对应的类来实现配置文件绑定。

public class EmailOptions{public string FromAddress { get; set; }public string ToAddress { get; set; }public string Host { get; set; }public string UserName { get; set; }public string Password { get; set; }}

配置 Startup

在 Startup的ConfigureServices方法中添加以下配置

//发邮件services.Configure<EmailOptions>(Configuration.GetSection("EmailOptions"));services.AddMailKit(optionBuilder =>{optionBuilder.UseMailKit(new MailKitOptions(){//get options from sercets.jsonServer = Configuration.GetValue<string>("EmailOptions:Host"),Port = Configuration.GetValue<int>("EmailOptions:Port"),SenderName = Configuration.GetValue<string>("EmailOptions:SenderName"),SenderEmail = Configuration.GetValue<string>("EmailOptions:FromAddress"),// can be optional with no authentication Account = Configuration.GetValue<string>("EmailOptions:UserName"),Password = Configuration.GetValue<string>("EmailOptions:Password"),// enable ssl or tlsSecurity = true});});

三、发送邮件

将配置EmailOptions和 IEmailService 注入到需要使用的位置。如:

public class HomeController : Controller{private readonly EmailOptions options;private readonly IEmailService _EmailService;public HomeController(IOptions<EmailOptions> options, IEmailService emailService){this.options = options.Value;_EmailService = emailService;}[HttpPost]public async Task<ActionResult> SendEmail(MyEntity entity){//设置发送人的邮件地址和名称,在接收人接收到邮件提示时会显示该信息var sendInfo = new SenderInfo{SenderEmail = options.FromAddress,SenderName = "投诉",};await _EmailService.SendAsync(options.ToAddress, "投诉", "邮件内容", false, sender: sendInfo);return Json(result);}}

遇到的问题

本地开发时使用的端口是25,本地测的好好的,但是当部署到阿里云的时候,只要一执行发邮件的方法,就会超时,百思不得其解,后来得知阿里云服务器默认是禁止25端口的,解决方法就是改成465端口发送邮件。

.NetCore使用NETCore.MailKit发送邮件相关推荐

  1. 跟我一起学.NetCore之.NetCore概述

    随着.NetCore版本发布变更,在最近一年左右开始接触到.NetCore,之前只是传闻,并没有动手实操:.NetCore逐渐成熟,大大小小的公司也开始进行使用,感觉再不学习就落后了,于是乎搜索各种资 ...

  2. .netcore mysql_.netcore基于mysql的codefirst

    .netcore基于mysql的codefirst 此文仅是对于netcore基于mysql的简单的codefirst实现的简单记录.示例为客服系统消息模板的增删改查实现 第一步.创建实体项目,并在其 ...

  3. 【NetCore】.NetCore之下载文件

    本篇将和大家分享的丝.NetCore下载文件,常见的下载有两种:A标签直接指向下载文件地址和post或get请求后台输出文件流的方式,本篇也将围绕这两种来分享:如果对您有好的帮助,请多多支持. 允许站 ...

  4. MailKit发送邮件

    smtp发送邮件偶尔会遇到超时的情况,故换MailKit发送尝试. 引用MailKit包时,注意版本需要支持当前Framework的版本 using (var smtp = new MailKit.N ...

  5. Java Spring Boot VS .NetCore (七) 配置文件

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  6. Linux下Jenkins与GitHub自动构建NetCore与部署

    今天我们来谈谈NetCore在Linux底下的持续集成与部署.NetCore我就不多介绍了,持续集成用的是Jenkins,源代码管理器用的是GitHub.我们就跟着博文往下走吧. 1.Linux环境 ...

  7. ABP VNext 利用QQ邮箱发送邮件

    ABP VNext 利用QQ邮箱发送邮件 1.配置邮箱 1.1 设置 1.2账户 1.3 开启邮箱服务 1.4 生成授权码 2 默认的SmtpEmailSender发送邮件 2.1 生成数据库 2.2 ...

  8. AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . git源码:https://github.com/shenniubuxing3/LovePicture.Web . AspNetC ...

  9. 什么是“.NET Core”?

    本文翻译自:What is ".NET Core"? Recently in an official .NET Framework Blog it was announced th ...

最新文章

  1. 20154312曾林 - Exp1 PC平台逆向破解
  2. 17、计算机图形学——辐射度量学
  3. 记一次内核模块查看 - 初步通过文件厂商判断有无可疑内核模块
  4. Python多任务(4.多线程--Python中的互斥锁和死锁)
  5. ARM汇编中lr(r14)寄存器的作用
  6. 七人のオンラインゲーマーズ 全年龄正式汉化补丁
  7. 解决xml中mybatis等的dtd提示问题
  8. python源码 高通滤波、低通滤波、带通滤波
  9. python绘图坐标轴|刻度值|刻度||标题设置
  10. Android 四大组件学习之ContentProvider五
  11. 博达路由器常见功能教学0
  12. android studio飞机大战游戏带注释源码教程(多线程)
  13. 手机投屏到电视上怎么操作?
  14. 小心利用大家的爱国热情来传播Worm.Win32.AutoRun.dgk的网页
  15. 东原地产的女性视角——对话罗韶颖
  16. E1. Divisible Numbers (easy version)(数学)
  17. ​数字经济指数合集:各省、城市数字经济指数面板数据
  18. 服务器隐藏文件夹怎样打开,局域网文件如何设置隐藏?服务器隐藏文件夹的方法...
  19. JavaWeb【Mybatis】Mybatis的操作步骤
  20. 肖 sir_就业课__005项目数据

热门文章

  1. SLES修改本地FTP安装源
  2. ajax使用html()后样式无效,jquery.ajax使用字符串拼接后内联css样式失效
  3. 利用正则表达式截取特定字符中间字符
  4. androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题
  5. 8-[多线程] 进程池线程池
  6. Leetcode: Valid Parentheses
  7. 国外网站评出对程序员最具影响的书籍清单
  8. PHP如何防采集方法代码
  9. 自定义异常最佳实践_播放,自定义和组织媒体的最佳文章
  10. linux下设备或资源忙,linux删除文件目录 目录设备或资源忙怎么办