欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 使用 MailKit 收發郵件

admin
2024年11月5日 21:2 本文熱度 541

前言

在.NET 中處理郵件收發操作時,MailKit是一個非常強大的庫。

它支持SMTP、POP3、IMAP等多種協議,可以輕松實現發送、接收、以及管理郵件的功能。

下面我們將通過一個詳細的示例,展示如何在.NET 項目中使用MailKit來收發郵件,并對關鍵代碼進行解釋。

獲取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;

????????//?創建郵件正文
????????var?builder?=?new?BodyBuilder();
????????builder.TextBody?=?data.TextBody;
????????builder.HtmlBody?=?data.HtmlBody;

????????//?添加附件
????????using?(var?stream?=?new?FileStream("file.txt",?FileMode.Open))
????????{
????????????builder.Attachments.Add("file.txt",?stream);
????????}
????????//?設置正文
????????message.Body?=?builder.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}");
????Console.WriteLine($"HtmlBody:?{message.HtmlBody}");
?????Console.WriteLine($"TextBody:?{message.TextBody}");
????????????}
????????????//?斷開連接
????????????await?client.DisconnectAsync(true);
????????}
????}
????catch?(Exception?ex)
????{
????????Console.WriteLine($"接收郵件失敗:{ex.Message}");
????}
}

注意接受郵件時 message.Body 部分內容需要特殊的解析規則,比如附件部分、歷史郵件部分。

測試郵件收發

使用時關鍵信息替換成自己的:

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
????????}

????};
????File.WriteAllText("file.txt",?"This?is?a?test?file.");
????await?SendEmail(data);
????await?GetEmail(data);
}

總結

MailKit在.NET 中提供了一個強大而靈活的接口來處理郵件收發操作。無論是通過SMTP發送郵件,還是通過IMAP/POP3接收郵件,MailKit都能輕松實現。

這個示例代碼涵蓋了最常見的郵件處理場景,并且可以直接復制使用。

在實際應用中,你可以根據需要擴展這些功能,例如處理附件、管理郵件文件夾、或實現更復雜的郵件過濾和處理邏輯。

作者:二次元攻城獅

出處:cnblogs.com/timefiles/p/18466070
聲明:網絡內容,僅供學習,尊重版權,侵權速刪,歉意致謝!


該文章在 2024/11/6 10:19:45 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved