当前位置: 首页 > news >正文

使用MailKit在.NET Core中收发邮件的完整示例

在.NET Core中处理邮件收发操作时,MailKit是一个非常强大的库。它支持SMTP、POP3、IMAP等多种协议,可以轻松实现发送、接收、以及管理邮件的功能。下面我们将通过一个详细的示例,展示如何在.NET Core项目中使用MailKit来收发邮件,并对关键代码进行解释。

一、安装MailKit

首先,你需要在项目中安装MailKit库。你可以通过NuGet包管理器安装它,或者使用以下命令:

dotnet add package MailKit
二、发送邮件的示例

发送邮件是MailKit最常见的功能之一。以下是一个完整的发送邮件示例代码:

using System;
using System.Threading.Tasks;
using MimeKit;
using MailKit.Net.Smtp;
using MailKit.Security;namespace EmailExample
{class Program{static async Task Main(string[] args){// 创建邮件消息对象var message = new MimeMessage();// 设置发件人message.From.Add(new MailboxAddress("发件人名字", "your-email@example.com"));// 设置收件人message.To.Add(new MailboxAddress("收件人名字", "recipient-email@example.com"));// 设置邮件主题message.Subject = "来自 .NET Core 的测试邮件";// 创建邮件内容var bodyBuilder = new BodyBuilder{TextBody = "这是纯文本消息内容。",HtmlBody = "<h1>这是HTML消息</h1><p>这封邮件是通过MailKit从 .NET Core 发送的。</p>"};// 将邮件内容添加到消息对象中message.Body = bodyBuilder.ToMessageBody();// 创建并配置SMTP客户端using var client = new SmtpClient();try{// 连接到SMTP服务器,使用STARTTLS进行加密await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls);// 使用邮箱账号和密码进行身份验证await client.AuthenticateAsync("your-email@example.com", "your-email-password");// 发送邮件await client.SendAsync(message);// 输出发送成功的提示信息Console.WriteLine("邮件发送成功!");}catch (Exception ex){// 如果发生异常,输出错误信息Console.WriteLine($"发送邮件时发生错误:{ex.Message}");}finally{// 断开与SMTP服务器的连接await client.DisconnectAsync(true);}}}
}
代码解释:
  1. 安装依赖
    首先,确保在项目中安装了MailKit库。

  2. 创建邮件信息(MimeMessage)

    • MimeMessage 是MailKit中用于构建电子邮件的类。
    • message.From.Add(new MailboxAddress("发件人名字", "your-email@example.com")); 设置发件人信息。
    • message.To.Add(new MailboxAddress("收件人名字", "recipient-email@example.com")); 设置收件人信息。
    • message.Subject = "来自 .NET Core 的测试邮件"; 设置邮件主题。
  3. 构建邮件内容(BodyBuilder)

    • BodyBuilder 用于构建邮件的正文,可以包含纯文本和HTML内容。
    • message.Body = bodyBuilder.ToMessageBody(); 将邮件正文附加到邮件信息中。
  4. 配置并连接SMTP客户端

    • 使用 SmtpClient 类连接到SMTP服务器。
    • await client.ConnectAsync("smtp.example.com", 587, SecureSocketOptions.StartTls); 连接到SMTP服务器,使用STARTTLS进行加密。
    • await client.AuthenticateAsync("your-email@example.com", "your-email-password"); 进行身份验证。
  5. 发送邮件并处理异常

    • 使用 client.SendAsync(message); 发送邮件。
    • 如果发生异常,将捕获并输出错误信息。
  6. 断开与SMTP服务器的连接

    • await client.DisconnectAsync(true); 断开连接,并确保所有未发送的邮件被发送。
三、接收邮件的示例

除了发送邮件,MailKit还支持通过IMAP或POP3协议接收邮件。下面是一个简单的IMAP接收邮件的示例:

using System;
using System.Threading.Tasks;
using MailKit.Net.Imap;
using MailKit.Search;
using MailKit;
using MimeKit;namespace EmailExample
{class Program{static async Task Main(string[] args){// 创建并配置IMAP客户端using var client = new ImapClient();try{// 连接到IMAP服务器,通常使用SSL(端口993)await client.ConnectAsync("imap.example.com", 993, true);// 使用邮箱账号和密码进行身份验证await client.AuthenticateAsync("your-email@example.com", "your-email-password");// 打开收件箱文件夹var inbox = client.Inbox;await inbox.OpenAsync(FolderAccess.ReadOnly);// 搜索所有未读邮件var results = await inbox.SearchAsync(SearchQuery.NotSeen);// 遍历搜索结果,获取邮件信息foreach (var uniqueId in results){var message = await inbox.GetMessageAsync(uniqueId);// 输出邮件的关键信息Console.WriteLine($"邮件主题: {message.Subject}");Console.WriteLine($"发件人: {message.From}");Console.WriteLine($"接收日期: {message.Date}");Console.WriteLine($"邮件内容: {message.TextBody}");}}catch (Exception ex){// 如果发生异常,输出错误信息Console.WriteLine($"接收邮件时发生错误:{ex.Message}");}finally{// 断开与IMAP服务器的连接await client.DisconnectAsync(true);}}}
}
代码解释:
  1. 连接到IMAP服务器

    • ImapClient 类用于连接到IMAP服务器。
    • await client.ConnectAsync("imap.example.com", 993, true); 连接到IMAP服务器,通常使用SSL(端口993)。
  2. 身份验证

    • 使用 await client.AuthenticateAsync("your-email@example.com", "your-email-password"); 进行邮箱账号的身份验证。
  3. 打开收件箱

    • var inbox = client.Inbox; 获取收件箱文件夹。
    • await inbox.OpenAsync(FolderAccess.ReadOnly); 以只读模式打开收件箱。
  4. 搜索并获取未读邮件

    • var results = await inbox.SearchAsync(SearchQuery.NotSeen); 搜索所有未读邮件。
    • 遍历搜索结果,并通过 inbox.GetMessageAsync(uniqueId) 获取具体邮件内容。
  5. 输出邮件信息

    • 输出邮件主题、发件人、日期以及正文内容。
  6. 断开与IMAP服务器的连接

    • await client.DisconnectAsync(true); 断开连接。
四、总结

MailKit在.NET Core中提供了一个强大而灵活的接口来处理邮件收发操作。无论是通过SMTP发送邮件,还是通过IMAP/POP3接收邮件,MailKit都能轻松实现。

这个示例代码涵盖了最常见的邮件处理场景,并且可以直接复制使用。在实际应用中,你可以根据需要扩展这些功能,例如处理附件、管理邮件文件夹、或实现更复杂的邮件过滤和处理逻辑。
注意邮件内容一定要编辑好噢~ 避免其他同学已读乱回~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 『 Linux 』线程池与 POSIX 线程的封装编码实现
  • 无人机PX4飞控 | 电源系统详解与相关代码
  • Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现
  • 高级java每日一道面试题-2024年8月06日-web篇-cookie,session,token有什么区别?
  • 【Material-UI】Autocomplete中的禁用选项:Disabled options
  • 基于Python的脑电图(EEG)信号分析(5)
  • Golang | Leetcode Golang题解之第312题戳气球
  • python 实现粒子群算法
  • 日志和守护进程
  • 人大金仓(Kingbase)数据库高阶函数详解
  • Java中的网络协议实现:HTTP/2与gRPC
  • 计算机的错误计算(五十四)
  • SpringBoot依赖之Quartz Scheduler定时调度器
  • Vue 3+Vite+Eectron从入门到实战系列之(三)一Electron热身运动(一)
  • 智慧公厕系统解决方案实现更人性化的服务
  • 网络传输文件的问题
  • [case10]使用RSQL实现端到端的动态查询
  • 【Leetcode】104. 二叉树的最大深度
  • 30秒的PHP代码片段(1)数组 - Array
  • Android Volley源码解析
  • Codepen 每日精选(2018-3-25)
  • Joomla 2.x, 3.x useful code cheatsheet
  • mysql外键的使用
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python socket服务器端、客户端传送信息
  • Theano - 导数
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue UI框架库开发介绍
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端性能优化——回流与重绘
  • 入手阿里云新服务器的部署NODE
  • 通信类
  • 学习JavaScript数据结构与算法 — 树
  • 硬币翻转问题,区间操作
  • ionic异常记录
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​比特币大跌的 2 个原因
  • #if 1...#endif
  • #java学习笔记(面向对象)----(未完结)
  • (1)Jupyter Notebook 下载及安装
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (PADS学习)第二章:原理图绘制 第一部分
  • (超详细)语音信号处理之特征提取
  • (分布式缓存)Redis分片集群
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (离散数学)逻辑连接词
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Linq学习笔记
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET IoC 容器(三)Autofac
  • .Net IOC框架入门之一 Unity
  • /3GB和/USERVA开关
  • @angular/cli项目构建--Dynamic.Form