vs基于控制台应用程序的定时发送邮件_.NET Core 下收发邮件之 MailKit

691ff8dd32dec3cb4effeabfe3aa0961.gif

利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理。

MailKit开源地址:https://github.com/jstedfast/MailKit

新建一个控制台应用程序,将MailKit添加到项目中。

Install-Package MailKit

新建一个IEmail接口。

using MimeKit;
using System.Threading.Tasks;

namespace EmailDemo
{
    public interface IEmail
    {
        /// 
        /// 发送Email
        /// 
        /// 
        /// 
        Task SendEmailAsync(MimeMessage message);
    }
}

然后添加Email.cs实现这个接口。

using MailKit.Net.Smtp;
using MimeKit;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace EmailDemo
{
    public class Email : IEmail
    {
        public async Task SendEmailAsync(MimeMessage message)
        {
            var host = "smtp.exmail.qq.com";
            var port = 465;
            var useSsl = true;
            var from_username = "123@meowv.com";
            var from_password = "...";
            var from_name = "测试";
            var from_address = "123@meowv.com";

            var address = new List
            {new MailboxAddress("111","111@meowv.com"),new MailboxAddress("222","222@meowv.com")
            };
            message.From.Add(new MailboxAddress(from_name, from_address));
            message.To.AddRange(address);using var client = new SmtpClient
            {
                ServerCertificateValidationCallback = (s, c, h, e) => true
            };
            client.AuthenticationMechanisms.Remove("XOAUTH2");await client.ConnectAsync(host, port, useSsl);await client.AuthenticateAsync(from_username, from_password);await client.SendAsync(message);await client.DisconnectAsync(true);
        }
    }
}

上面关于邮箱的账号密码服务器可以放在配置文件中,这里为了方便直接写了,演示了发送邮件到两个Email地址。

然后在Program.cs中使用依赖注入的方式调用。

using Microsoft.Extensions.DependencyInjection;
using MimeKit;
using System;
using System.Threading.Tasks;

namespace EmailDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            IServiceCollection service = new ServiceCollection();

            service.AddSingleton();var provider = service.BuildServiceProvider().GetRequiredService();var message = new MimeMessage
            {
                Subject = "我是邮件主题",
                Body = new BodyBuilder
                {
                    HtmlBody = $"我是邮件内容,时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"
                }.ToMessageBody()
            };await provider.SendEmailAsync(message);
        }
    }
}

74dacf93c3fa88c6eb15618dfb63022e.png

以上演示了在 .NET Core 中发送邮件的示例,同时利用MailKit也可以接收邮件,这里使用场景不多,如有需要可以参考MailKitGitHub代码示例。

通常发送邮件可以提前写好HTML模板,然后将关键内容做字符串替换,这样发出去的就是一个比较美观的邮件了。

MailKit还支持将图片作为数据内容发送出去。

using Microsoft.Extensions.DependencyInjection;
using MimeKit;
using MimeKit.Utils;
using System;
using System.Threading.Tasks;

namespace EmailDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            IServiceCollection service = new ServiceCollection();

            service.AddSingleton();var provider = service.BuildServiceProvider().GetRequiredService();var path = "D:\\bg.jpg";var builder = new BodyBuilder();var image = builder.LinkedResources.Add(path);
            image.ContentId = MimeUtils.GenerateMessageId();
            builder.HtmlBody = $"当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss} {image.ContentId}\"/>";var message = new MimeMessage
            {
                Subject = "带图片的邮件推送",
                Body = builder.ToMessageBody()
            };await provider.SendEmailAsync(message);
        }
    }
}

先在本地准备一张图片,利用ContentId的方式嵌入在img标签中,成功将其发送出去。

08f66ceab906b3c12b0fc3d84119cf7c.png

往期 精彩 回顾

【推荐】.NET Core开发实战视频课程 ★★★

.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

【.NET Core微服务实战-统一身份认证】开篇及目录索引

Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

10个小技巧助您写出高性能的ASP.NET Core代码

用abp vNext快速开发Quartz.NET定时任务管理界面

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

现身说法:实际业务出发分析百亿数据量下的多表查询优化

关于C#异步编程你应该了解的几点建议

C#异步编程看这篇就够了

给我好看

7218408a85c49bf65c3445da49d6e973.png

您看此文用

 323679c7a292c6a7a7b87028b3d5bbf9.gif 953eadaadc6883b5ae9b43e2001193ea.gif·a9c5fcba8bd6a88bb671670d62eef3ca.gif 7ae63f8e721004191af61030890a7522.gif

秒,转发只需1秒呦~

b9a9178fc64f518048770ebd506ac64a.png

好看你就

点点

23e0f0632c829145cab1835e3c25f5e3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值