邮件-MailKit
MailKit 是一个 .NET 邮件处理库,它允许您编写高效且易于维护的电子邮件客户端和服务器应用程序。
# 安装 MailKit
在开始使用 MailKit 之前,您需要安装 MailKit 包。您可以使用 NuGet 包管理器在 Visual Studio 中轻松安装 MailKit。
在 Visual Studio 中,打开 NuGet 包管理器控制台,然后输入以下命令来安装 MailKit:
Install-Package MailKit
或者,您可以通过 NuGet 包管理器搜索 "MailKit" 并安装最新版本。
# 发送电子邮件
在本节中,我们将演示如何使用 MailKit 发送电子邮件。
# 准备SMTP客户端
要发送电子邮件,您需要配置一个 SMTP 客户端。SMTP(简单邮件传输协议)是一种用于发送电子邮件的标准协议。
以下是一个基本的示例,演示如何使用 MailKit 配置 SMTP 客户端:
using MailKit.Net.Smtp;
// 创建 SmtpClient 对象
using (var client = new SmtpClient())
{
// 设置服务器和端口号
client.Connect("smtp.example.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
// 如果需要验证,请提供凭据
client.Authenticate("username", "password");
// 在发送电子邮件之前,确保您已经正确设置了 From、To、Subject 和 Body 属性
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人", "sender@example.com"));
message.To.Add(new MailboxAddress("收件人", "recipient@example.com"));
message.Subject = "邮件主题";
message.Body = new TextPart("plain") { Text = "邮件正文" };
// 发送电子邮件
client.Send(message);
// 断开连接
client.Disconnect(true);
}
# 添加附件
如果您需要添加附件,请使用以下代码:
var message = new MimeMessage();
// ...
var builder = new BodyBuilder();
// 添加文本部分
builder.TextBody = "邮件正文";
// 添加附件
builder.Attachments.Add(@"C:\example\file.txt");
// 设置消息主体
message.Body = builder.ToMessageBody();
# 发送HTML格式的电子邮件
如果您需要发送 HTML 格式的电子邮件,请使用以下代码:
var message = new MimeMessage();
// ...
var builder = new BodyBuilder();
// 添加 HTML 部分
builder.HtmlBody = "<h1>HTML 标题</h1><p>HTML 正文</p>";
// 设置消息主体
message.Body = builder.ToMessageBody();
# 发送电子邮件使用SSL
如果您需要通过 SSL 加密发送电子邮件,请使用以下代码:
using (var client = new SmtpClient())
{
client.Connect("smtp.example.com", 465, MailKit.Security.SecureSocketOptions.SslOnConnect);
// 如果需要验证,请提供凭据
client.Authenticate("username", "password");
// 在发送电子邮件之前,确保您已经正确设置了 From、To、Subject 和 Body 属性
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人", "sender@example.com"));
message.To.Add(new MailboxAddress("收件人", "recipient@example.com"));
message.Subject = "邮件主题";
message.Body = new TextPart("plain") { Text = "邮件正文" };
// 发送电子邮件
client.Send(message);
// 断开连接
client.Disconnect(true);
}
# 发送电子邮件使用OAuth 2.0
如果您需要使用 OAuth 2.0 认证发送电子邮件,请使用以下代码:
using MailKit.Security;
using MimeKit;
using System;
using System.Threading.Tasks;
using System.Web;
public class GmailSmtpOAuth2Example
{
private const string _clientId = "your_client_id_here";
private const string _clientSecret = "your_client_secret_here";
private const string _refreshToken = "your_refresh_token_here";
private const string _userName = "your_email_address_here";
public async Task SendEmailAsync(string subject, string body, string recipients)
{
// Create the OAuth2 provider
var provider = new GoogleOAuth2Provider(_clientId, _clientSecret);
// Create a new application user credentials
var credentials = new UserCredential(_userName, provider, _refreshToken);
// Create a new IMAP client
using (var client = new SmtpClient())
{
// Connect to the SMTP server
await client.ConnectAsync("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
// Authenticate using the application user credentials
await client.AuthenticateAsync(credentials);
// Create a new email message
var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人", "sender@example.com"));
message.To.Add(new MailboxAddress("收件人", recipients));
message.Subject = subject;
message.Body = new TextPart("plain") { Text = body };
// Send the email message
await client.SendAsync(message);
// Disconnect from the SMTP server
await client.DisconnectAsync(true);
}
}
}
# 接收电子邮件
在本节中,我们将演示如何使用 MailKit 接收电子邮件。
# 准备IMAP客户端
要接收电子邮件,您需要配置一个 IMAP 客户端。IMAP(Internet Mail Access Protocol)是一种用于接收电子邮件的标准协议。
以下是一个基本的示例,演示如何使用 MailKit 配置 IMAP 客户端:
using MailKit.Net.Imap;
// 创建 ImapClient 对象
using (var client = new ImapClient())
{
// 设置服务器和端口号
client.Connect("imap.example.com", 993, MailKit.Security.SecureSocketOptions.SslOnConnect);
// 如果需要验证,请提供凭据
client.Authenticate("username", "password");
// 选择您要读取的文件夹(例如 INBOX)
client.Inbox.Open(FolderAccess.ReadOnly);
// 检索最新电子邮件
var messages = client.Inbox.Fetch(0, -1, MessageSummaryItems.Full);
// 显示最新电子邮件的主题和正文
foreach (var message in messages)
{
Console.WriteLine(message.Envelope.Subject);
Console.WriteLine(message.TextBody);
}
// 断开连接
client.Disconnect(true);
}
```csharp
### 读取邮件附件
如果您需要读取电子邮件的附件,请使用以下代码:
```csharp
using MailKit.Net.Imap;
using MailKit;
using MimeKit;
using System.IO;
// 创建 ImapClient 对象
using (var client = new ImapClient())
{
// ...
// 选择您要读取的文件夹(例如 INBOX)
client.Inbox.Open(FolderAccess.ReadOnly);
// 检索最新电子邮件
var message = client.Inbox.GetMessage(0);
// 检查消息是否有附件
if (message.Attachments.Count > 0)
{
// 检查是否有附件文件夹,如果没有则创建它
if (!Directory.Exists("attachments"))
Directory.CreateDirectory("attachments");
// 下载附件并保存到本地文件夹
foreach (var attachment in message.Attachments)
{
var fileName = attachment.ContentDisposition?.FileName ?? attachment.ContentType.Name;
using (var stream = File.Create(Path.Combine("attachments", fileName)))
{
if (attachment is MessagePart)
{
var rfc822 = (MessagePart)attachment;
rfc822.Message.WriteTo(stream);
}
else
{
var part = (MimePart)attachment;
part.Content.DecodeTo(stream);
}
}
}
}
// 断开连接
client.Disconnect(true);
}
# 总结
在本文中,我们介绍了如何在 .NET 应用程序中使用 MailKit 库来发送和接收电子邮件。我们探讨了如何配置 SMTP 和 IMAP 客户端,并演示了如何发送包含文本和附件的电子邮件,以及如何读取电子邮件的附件。我们还探讨了如何使用 OAuth 2.0 认证发送电子邮件。如果您需要更多关于 MailKit 的帮助和文档,请访问 MailKit 的官方文档。