获取QQ邮箱授权码

打开QQ邮箱,进入 设置->账号 页面:

POP3/IMAP/SMTP 中开启 SMTP服务,然后点击 授权码复制授权码:

QQ邮箱服务器的参数如下,详细内容参考SMTP/IMAP服务

  • 接收邮件服务器: imap.qq.com,使用SSL,端口号993
  • 发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587

网易邮箱服务器的参数如下,详细内容参考网易邮箱服务器参数如何设置?

安装 MailKit

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

dotnet add package MailKit

MailKit 是在 MimeKit 之上构建的跨平台邮件客户端库,目标是成为 .NET 的最佳电子邮件框架。

配置邮件服务器信息

配置邮件服务器信息,包括主机、端口、用户名、密码等,封装成 EmailData 类:

/// <summary>
/// 邮件数据
/// </summary>
class EmailData
{
/// <summary>
/// 发件人
/// </summary>
public string From { get; set; }
/// <summary>
/// 授权码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 收件人
/// </summary>
public string To { get; set; }
/// <summary>
/// 主题
/// </summary>
public string Subject { get; set; }
/// <summary>
/// 纯文本内容
/// </summary>
public string TextBody { get; set; }
/// <summary>
/// HTML内容
/// </summary>
public string HtmlBody { get; set; } /// <summary>
/// 发送邮件服务器
/// </summary>
public HostInfo SMTP { get; set; }
/// <summary>
/// 接受邮件服务器
/// </summary>
public HostInfo IMAP { get; set; }
}
/// <summary>
/// 服务器信息
/// </summary>
class HostInfo
{
/// <summary>
/// 服务器地址
/// </summary>
public string Host { get; set; }
/// <summary>
/// 服务器端口
/// </summary>
public int Port { get; set; }
}

实现邮件收发方法

邮件收发方法如下,这里只接收最新的10封邮件便于实现交互逻辑:

static async Task SendEmail(EmailData data)
{
try
{
// 创建一个新的 MIME 消息对象
var message = new MimeMessage(); // 设置发件人
message.From.Add(MailboxAddress.Parse(data.From)); // 设置收件人
message.To.Add(MailboxAddress.Parse(data.To)); // 设置主题
message.Subject = data.Subject; // 设置正文
message.Body = new BodyBuilder
{
TextBody = data.TextBody,
HtmlBody = data.HtmlBody
}.ToMessageBody(); // 使用 SMTP 客户端发送邮件
using (var client = new SmtpClient())
{
await client.ConnectAsync(data.SMTP.Host, data.SMTP.Port, SecureSocketOptions.StartTls); // 注:用户名和密码应妥善保管,不要硬编码到源码中
await client.AuthenticateAsync(data.From, data.Password); // 发送邮件
await client.SendAsync(message); // 断开与服务器的连接
await client.DisconnectAsync(true);
} Console.WriteLine("邮件已成功发送!");
}
catch (Exception ex)
{
Console.WriteLine($"邮件发送失败:{ex.Message}");
}
} static async Task GetEmail(EmailData data)
{
try
{
// 连接到 IMAP 服务器
using (var client = new ImapClient())
{
await client.ConnectAsync(data.IMAP.Host, data.IMAP.Port, true); // 通常使用 TLS 加密 // 认证用户
await client.AuthenticateAsync(data.From, data.Password); // 选择收件箱
var inbox = client.Inbox;
await inbox.OpenAsync(FolderAccess.ReadOnly); // 获取邮件数量
int totalMessages = inbox.Count;
// 确保开始位置不会小于1
int start = Math.Max(totalMessages - 5, 1);
int end = totalMessages; // 获取最新的10封邮件的信息
var messages = inbox.Fetch(start, end, MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId); // 遍历邮件信息并打印出来
foreach (var summary in messages)
{
var uid = summary.UniqueId;
var message = await inbox.GetMessageAsync(uid);
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.From}");
Console.WriteLine($"To: {message.To}");
Console.WriteLine($"Date: {message.Date}");
}
// 断开连接
await client.DisconnectAsync(true);
}
}
catch (Exception ex)
{
Console.WriteLine($"接收邮件失败:{ex.Message}");
}
}

注意接受邮件时 message.Body 部分的内容需要特殊的解析规则,不能直接打印 ToString() 方法。

测试邮件收发

使用时关键信息替换成自己的:

static async Task Main(string[] args)
{
var data = new EmailData
{
From = "qqqqqq@qq.com",
Password = "**********",
To = "qqqqqq@qq.com",
Subject = "来自 .NET Core 的测试邮件",
TextBody = "这是纯文本消息内容。",
HtmlBody = "<h1>这是HTML消息</h1><p>这封邮件是通过MailKit从 .NET Core 发送的。</p>",
SMTP = new HostInfo()
{
Host = "smtp.qq.com",
Port = 587
},
IMAP = new HostInfo()
{
Host = "imap.qq.com",
Port = 993
} }; await SendEmail(data);
await GetEmail(data);
}

参考文章

C#使用 MailKit 收发邮件的更多相关文章

  1. 使用MailKit收发邮件

    .Net BCL库中对于邮件的支持只有SmtpClient一个,它只能进行简单的邮件的发送操作,并且不支持POP3和SMTP,无法接收邮件,用起来有诸多不便. 今天看到园子里有文章(使用 MimeKi ...

  2. mailkit库收发邮件

    mailkit库用于收发邮件.这个库可以替代C#自带的发邮件库 环境  W10 / VS2017CMMT / MailKit version="2.0.3" "net46 ...

  3. MailKit和MimeKit 收发邮件

    新建项目,引用MailKit和MimeKit NuGet包 using CommonTool.MailKit; using System; using System.Collections.Gener ...

  4. .NET CORE 下收发邮件之 MAILKIT

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

  5. DouNet学习_收发邮件

    一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里  不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...

  6. Outlook Express 收发邮件出现&quot;0x800CCC0F&quot;错误代码解决方法

    非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...

  7. 用 Apache James 搭建邮件服务器来收发邮件实践(一)(转)

    Apache James 简称 James, 是 Java Apache Mail Enterprise Server的缩写.James 是100%基于Java的电子邮件服务器.它是一种独立的邮件服务 ...

  8. 用Emacs收发邮件

    使用Emacs,将尽可能多的工作放到Emacs中来完成,这样可以提高工作效率. 1.安装必要的LISP插件和程序 $sudo apt-get install stunnel4 $sudo apt-ge ...

  9. Python收发邮件

    发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...

  10. 转--python -- 收发邮件

    官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...

随机推荐

  1. 个人的谷歌学术主页:https://scholar.google.co.kr/citations?user=jHvm-VAAAAAJ&hl=en

    主页地址: https://scholar.google.co.kr/citations?user=jHvm-VAAAAAJ&hl=en

  2. 国内的开源AI模型共享网站(AI模型的GitHub)—— mindscope —— 使用git lfs方式下载模型文件

    参考前文: 国内的开源AI模型共享网站(AI模型的GitHub)-- mindscope -- 对标外网的"huggingface",mindscope好用吗? 使用git lfs ...

  3. 个人常用的 matplotlib 绘图模板

    import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['mathtext.f ...

  4. 控制台报IPV6问题的解决

    IPv6问题调试 Burp Suite是不支持IPv6地址进行数据通信的,这时在cmd控制台里就会抛出如下异常 java.net.SocketException: Permission denied ...

  5. SMU Summer 2023 Contest Round 7

    SMU Summer 2023 Contest Round 7 A. Two Rival Students 答案不能大于 \(n-1\): 如果竞争对手之间的当前距离小于 \(n - 1\) ,我们总 ...

  6. 和xshell和crt说再见,认识了一款55k star多端跨平台终端神器,强大酷炫

    一.Tabby简介 Tabby(以前称为Terminus)是一款高度可配置的终端仿真器.SSH 和串行客户端.开源且跨平台,支持在Windows.macOS和Linux系统下使用. 源码下载 http ...

  7. C语言/实现MD5加密

    本文详细视频讲解,已经发布到B站 https://www.bilibili.com/video/BV1uy4y1p7on/ 更多仔细,请关注公众号:一口Linux 一.摘要算法 摘要算法又称哈希算法. ...

  8. 零基础学习人工智能—Python—Pytorch学习(八)

    前言 本文介绍卷积神经网络的上半部分. 其实,学习还是需要老师的,因为我自己写文章的时候,就会想当然,比如下面的滑动窗口,我就会想当然的认为所有人都能理解,而实际上,我们在学习的过程中之所以卡顿的点多 ...

  9. 基于gitee+hexo搭建个人博客

    gitee准备 注册好gitee git安装与配置 下载git默认安装,配置 在之前下载的目录下,右键,选择[Git Bash Here] 配置用户 git config --global user. ...

  10. 《Programming from the Ground Up》阅读笔记:p103-p116

    <Programming from the Ground Up>学习第7天,p103-p116总结,总计14页. 一.技术总结 1.读写文件 (1)linux.s linux.s: #fi ...