狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 使用 MailKit 收發(fā)郵件

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

前言

在.NET 中處理郵件收發(fā)操作時(shí),MailKit是一個(gè)非常強(qiáng)大的庫。

它支持SMTP、POP3、IMAP等多種協(xié)議,可以輕松實(shí)現(xiàn)發(fā)送、接收、以及管理郵件的功能。

下面我們將通過一個(gè)詳細(xì)的示例,展示如何在.NET 項(xiàng)目中使用MailKit來收發(fā)郵件,并對(duì)關(guān)鍵代碼進(jìn)行解釋。

獲取QQ郵箱授權(quán)碼

打開QQ郵箱,進(jìn)入?設(shè)置->賬號(hào)?頁面:

在?POP3/IMAP/SMTP?中開啟?SMTP服務(wù),然后點(diǎn)擊?授權(quán)碼復(fù)制授權(quán)碼:

QQ郵箱服務(wù)器的參數(shù)如下,詳細(xì)內(nèi)容參考SMTP/IMAP服務(wù):

  • 接收郵件服務(wù)器:imap.qq.com,使用SSL,端口號(hào)993

  • 發(fā)送郵件服務(wù)器:smtp.qq.com,使用SSL,端口號(hào)465或587

網(wǎng)易郵箱服務(wù)器的參數(shù)如下,詳細(xì)內(nèi)容參考網(wǎng)易郵箱服務(wù)器參數(shù)如何設(shè)置?:

安裝 MailKit

在項(xiàng)目中安裝 MailKit 庫,可以通過NuGet包管理器安裝它或者使用以下命令:

dotnet?add?package?MailKit

MailKit 是在 MimeKit 之上構(gòu)建的跨平臺(tái)郵件客戶端庫,目標(biāo)是成為 .NET 的最佳電子郵件框架。

配置郵件服務(wù)器信息

配置郵件服務(wù)器信息,包括主機(jī)、端口、用戶名、密碼等,封裝成 EmailData 類:

///?<summary>
///?郵件數(shù)據(jù)
///?</summary>
class?EmailData
{
????///?<summary>
????///?發(fā)件人
????///?</summary>
????public?string?From?{?get;?set;?}
????///?<summary>
????///?授權(quán)碼
????///?</summary>
????public?string?Password?{?get;?set;?}
????///?<summary>
????///?收件人
????///?</summary>
????public?string?To?{?get;?set;?}
????///?<summary>
????///?主題
????///?</summary>
????public?string?Subject?{?get;?set;?}
????///?<summary>
????///?純文本內(nèi)容
????///?</summary>
????public?string?TextBody?{?get;?set;?}
????///?<summary>
????///?HTML內(nèi)容
????///?</summary>
????public?string?HtmlBody?{?get;?set;?}

????///?<summary>
????///?發(fā)送郵件服務(wù)器
????///?</summary>
????public?HostInfo?SMTP?{?get;?set;?}
????///?<summary>
????///?接受郵件服務(wù)器
????///?</summary>
????public?HostInfo?IMAP?{?get;?set;?}
}
///?<summary>
///?服務(wù)器信息
///?</summary>
class?HostInfo
{
????///?<summary>
????///?服務(wù)器地址
????///?</summary>
????public?string?Host?{?get;?set;?}
????///?<summary>
????///?服務(wù)器端口
????///?</summary>
????public?int?Port?{?get;?set;?}
}

實(shí)現(xiàn)郵件收發(fā)方法

郵件收發(fā)方法如下,這里只接收最新的10封郵件便于實(shí)現(xiàn)交互邏輯:

static?async?Task?SendEmail(EmailData?data)
{
????try
????{
????????//?創(chuàng)建一個(gè)新的?MIME?消息對(duì)象
????????var?message?=?new?MimeMessage();

????????//?設(shè)置發(fā)件人
????????message.From.Add(MailboxAddress.Parse(data.From));

????????//?設(shè)置收件人
????????message.To.Add(MailboxAddress.Parse(data.To));

????????//?設(shè)置主題
????????message.Subject?=?data.Subject;

????????//?創(chuàng)建郵件正文
????????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);
????????}
????????//?設(shè)置正文
????????message.Body?=?builder.ToMessageBody();

????????//?使用?SMTP?客戶端發(fā)送郵件
????????using?(var?client?=?new?SmtpClient())
????????{
????????????await?client.ConnectAsync(data.SMTP.Host,?data.SMTP.Port,?SecureSocketOptions.StartTls);

????????????//?注:用戶名和密碼應(yīng)妥善保管,不要硬編碼到源碼中
????????????await?client.AuthenticateAsync(data.From,?data.Password);

????????????//?發(fā)送郵件
????????????await?client.SendAsync(message);

????????????//?斷開與服務(wù)器的連接
????????????await?client.DisconnectAsync(true);
????????}

????????Console.WriteLine("郵件已成功發(fā)送!");
????}
????catch?(Exception?ex)
????{
????????Console.WriteLine($"郵件發(fā)送失敗:{ex.Message}");
????}
}

static?async?Task?GetEmail(EmailData?data)
{
????try
????{
????????//?連接到?IMAP?服務(wù)器
????????using?(var?client?=?new?ImapClient())
????????{
????????????await?client.ConnectAsync(data.IMAP.Host,?data.IMAP.Port,?true);?//?通常使用?TLS?加密

????????????//?認(rèn)證用戶
????????????await?client.AuthenticateAsync(data.From,?data.Password);

????????????//?選擇收件箱
????????????var?inbox?=?client.Inbox;
????????????await?inbox.OpenAsync(FolderAccess.ReadOnly);

????????????//?獲取郵件數(shù)量
????????????int?totalMessages?=?inbox.Count;
????????????//?確保開始位置不會(huì)小于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}");
????}
}

注意接受郵件時(shí) message.Body 部分內(nèi)容需要特殊的解析規(guī)則,比如附件部分、歷史郵件部分。

測(cè)試郵件收發(fā)

使用時(shí)關(guān)鍵信息替換成自己的:

static?async?Task?Main(string[]?args)
{
????var?data?=?new?EmailData
????{
????????From?=?"qqqqqq@qq.com",
????????Password?=?"**********",
????????To?=?"qqqqqq@qq.com",
????????Subject?=?"來自?.NET?Core?的測(cè)試郵件",
????????TextBody?=?"這是純文本消息內(nèi)容。",
????????HtmlBody?=?"<h1>這是HTML消息</h1><p>這封郵件是通過MailKit從 .NET Core 發(fā)送的。</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);
}

總結(jié)

MailKit在.NET 中提供了一個(gè)強(qiáng)大而靈活的接口來處理郵件收發(fā)操作。無論是通過SMTP發(fā)送郵件,還是通過IMAP/POP3接收郵件,MailKit都能輕松實(shí)現(xiàn)。

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

在實(shí)際應(yīng)用中,你可以根據(jù)需要擴(kuò)展這些功能,例如處理附件、管理郵件文件夾、或?qū)崿F(xiàn)更復(fù)雜的郵件過濾和處理邏輯。

作者:二次元攻城獅

出處:cnblogs.com/timefiles/p/18466070
聲明:網(wǎng)絡(luò)內(nèi)容,僅供學(xué)習(xí),尊重版權(quán),侵權(quán)速刪,歉意致謝!


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