.NetCore使用NETCore.MailKit发送邮件

.NetCore使用NETCore.MailKit发送邮件

前言

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

一、安装需要的类库

我这边使用的 .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 { getset; }
        public string ToAddress { getset; }
        public string Host { getset; }
        public string UserName { getset; }
        public string Password { getset; }
    }

配置 Startup

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

    //发邮件
    services.Configure<EmailOptions>(Configuration.GetSection("EmailOptions"));
    services.AddMailKit(optionBuilder =>
    {
        optionBuilder.UseMailKit(new MailKitOptions()
        {
            //get options from sercets.json
            Server = 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 tls
            Security = 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发送邮件


原文始发于微信公众号(十一学技术):.NetCore使用NETCore.MailKit发送邮件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20321.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!