linux入門系列17--郵件系統之Postfix和Dovecot

来源:https://www.cnblogs.com/heimatengyun/archive/2020/03/04/12410234.html
-Advertisement-
Play Games

前文演示了通過Samba和NFS實現文件共用,本篇演示使用Postfix和Dovecot在區域網實現電子郵件收發系統。 ...


前文演示了通過Samba和NFS實現文件共用,本篇演示使用Postfix和Dovecot在區域網實現電子郵件收發系統。

電子郵件系統是我們日常生活和工作中非常重要的一個網路服務,在windows下收發電子郵件系統工具很多,相信大家一定接觸過,比如qq郵箱、163郵箱等等。本文講解在Linux下通過部署Postfix和Dovecot來實現電子郵件的收發。

一、電子郵件系統前世今生

1.1 產生背景

大家今天熟知的互聯網起源於美國的ARPANET科研項目,這是20世紀60年代美國國防部發起的科研項目。阿帕網是當今互聯網的雛形,它也是世界上第一個運營的封包交換網路。

在阿帕網發展幾年之後,到1971年遇到了嚴峻的問題,當時參與該項目的科學家分佈在美國的不同地區,並且不同地區存在時差,這就導致了不能及時分享各自的科研成功,因此需要一種能夠藉助網路在電腦之間傳輸數據的方法。

看到這裡估計很多同學懵圈了,前文不是才講了ftp文件傳輸以及文件共用嗎?是的,他們雖然可以實現文件的傳輸,但是使用場景卻不一樣,他們就像打電話一樣,需要伺服器和客戶端同時線上才能完成數據傳輸。手機上的語音信箱相信大家用過吧?郵件系統就類似語音信箱,即使你手機沒電或關機了,等你再次開機的時候,你仍然可以第一時間收到語音留言。

基於這種背景,當時參與阿帕網項目的成員中有一位來自麻省理工大學的教授,用了近一年時間完成了電子郵件的設計,在1971年秋通過sndmsg軟體向自己的另外一臺電腦發出了人類歷史上第一封電子郵件。

1.2 電子郵件相關概念

1.2.1 電子郵件地址

就像平時收發快遞一樣,電子郵件要準確發送給他人,那就需要對方提供明確唯一的收件地址。設計者規定電子信箱格式為“姓名@電腦主機名稱”,它選擇@符號作為間隔符的原因是,設計者認為人類的額名字和電腦主機名字中應該不會包含@這個特殊字元。

這很好理解,比如我們平時見到的郵箱:[email protected][email protected]等等。

1.2.2 電子郵件協議

電子郵件系統基於郵件協議來完成電子郵件的傳輸,常見郵件協議有:SMTP、POP3、IMAP4等。

SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議,用於發送和中轉發出的電子郵件,占用TCP埠25。

POP3(Post Office Protocol 3):郵局協議版本3,用於將電子郵件存儲到本地主機,占用TCP埠110。

IMAP4(Internet Message Access Protocol 4):Internet消息訪問協議版本4,用於在本地主 機上訪問郵件,占用TCP埠143。

1.2.3 電子郵件傳輸過程

電子郵件在傳輸過程中涉及到幾個角色:MUA、MTA、MDA

MUA(Mail User Agent):郵件用戶代理,作用是替用戶收發郵件的伺服器。

MTA(Mail Transfer Agent):郵件傳輸代理,作用是轉發處理不同電子郵件服務供應商之間的郵件,把來自於 MUA 的郵件轉發到合適的 MTA 伺服器。

MDA(Mail Delivery Agent):郵件投遞代理,作用是把來自於MTA的郵件保存到本地的收件箱中。

舉個例子,假設你用一個新浪信箱給一個谷歌信箱發送一封電子郵件,其傳輸過程如下圖:

如前所述,電子郵件系統不同於文件傳輸需要雙方同時保持線上,當用戶發送郵件後,無需等待投遞工作完成就可以下線。上圖中假設如果對方郵件伺服器(谷歌的MTA)宕機或離線,則發件伺服器(新浪的MTA)就會把要發送的內容自動暫時保存到他本地,等檢測到對方郵件伺服器恢復後再次投放,隨後收件人(MUA)就能在自己的郵箱中找到這封郵件了。

1.2.4 Linux下電子郵件收發程式

一個最基礎的電子郵件系統至少要能提供發件服務和收件服務。在Linux下使用基於SMTP協議的Postfix服務程式來提供發件服務功能,使用基於POP3協議的Dovecot服務程式提供收件服務功能。部署Postfix和Dovecot服務程式後,就可以使用郵件客戶端(如Foxmail、Outlook等)進行收發郵件。

在RHEL5、6及早期的Linux系統中,預設的發件服務是Sendmail,在RHEL7系統中替換成了Postfix。相對而言Postfix在穩定性、併發性方面有了很大改進,並且減少了很多不必要的配置步驟,使用更簡單。

二、Linux區域網部署電子郵件系統

2.1 準備工作

2.1.0 主機規劃及郵件系統架構

(1)主機及網路規劃

開始之前我們郵件系統規劃如下:

主機名稱 操作系統 IP地址
電子郵件系統及DNS伺服器 Centos7 192.168.0.101
客戶端主機(outlook) win7 192.168.0.111
客戶端主機(foxmail) win10 192.168.0.112

功能變數名稱採用heimatengyun.com (由於此演示是在區域網,自己單擊DNS伺服器,因此功能變數名稱可以任意寫一個)

Centos7是虛擬機,win10是虛擬機的宿主機,win7是另外一臺物理機,他們之間組成一個區域網。虛擬機centos7作為電子郵件系統以及DNS伺服器,設置其網路模式為:橋接模式,目的是直連主機物理網路,以此構成一個區域網。

(2)電子郵件系統基礎架構

如1.2.4所述,我們採用Postfix和Dovecot來搭建一個基礎的電子郵件系統,其工作流程如下:

通常情況下,我們的郵箱地址看起來應該形如:[email protected] 也就是按照“用戶名@主機地址或功能變數名稱”的格式來進行規範。

為了提高可讀性不直接採用形如:[email protected]這種ip地址的形式。這種ip地址的方式一是因為不容易記住,另外還容易產生誤解(看起來有點像SSH遠程連接的地址),因此我們還需要先部署bind服務程式來為電子郵件伺服器和客戶端提供NDS功能變數名稱解析服務。

篇幅所限,在此不具體分析Bind服務的使用和配置,只給出具體的操作步驟。

下邊就來演示下bind服務程式的配置及管理

2.1.1 配置伺服器主機名稱

需要保證centos伺服器主機名稱與發信功能變數名稱保持一致

[root@email ~]# hostnamectl set-hostname mail.heimatengyun.com
[root@email ~]# hostname
mail.heimatengyun.com
[root@mail ~]# cat /etc/hostname 
mail.heimatengyun.com
[root@mail ~]# 

設置主機名稱也可以直接修改/etc/hostname文件。

另外可以看到修改後的主機名稱只顯示了功能變數名稱前邊部分([root@mail ~]),而非完整的功能變數名稱([[email protected] ~])。

2.1.2 防火牆策略設置

清空iptables防火牆預設策略,避免因防火牆中預設存在的策略阻止了客戶端DNS解析功能變數名稱及收發郵件。

[root@mail ~]# iptables -F
[root@mail ~]#

要是嫌麻煩或為了避免干擾,也可以直接先關掉防火牆和selinux。

2.1.3 使用bind服務為電子郵件系統提供功能變數名稱解析

(1)安裝bind服務

[root@mail ~]# yum install bind-chroot
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...省略部分內容
Complete!
[root@mail ~]# 

(2)主配置文件配置

bind服務程式的名稱為named,因此需要找到對應的配置文件/etc/named.conf,按如圖方式進行修改。

[root@mail ~]# vim /etc/named.conf 

將上圖2處都改為any,表示伺服器上所有的IP都可以提供DNS功能變數名稱解析服務,允許所有人對本地伺服器發送DNS查詢請求。

(3)區域配置文件配置

區域配置文件為/etc/named.rfc1912.zones,為了給用戶提供配置參考,該文件中已預設有了一些無關緊要的解析參數,我們可以直接把文件清空或將我們的內容添加到文件末尾即可

[root@mail ~]# vim /etc/named.rfc1912.zones
zone "heimatengyun.com" IN {
        type master;
        file "heimatengyun.com.zone";
        allow-update {none;};
};

直接在文件末尾添加上述配置,保存並退出。

(4)功能變數名稱數據文件配置

創建前一步中配置的數據文件:heimatengyun.com.zone

[root@mail ~]# cp -a /var/named/named.localhost /var/named/heimatengyun.com.zone
[root@mail ~]# vim /var/named/heimatengyun.com.zone 

註意使用cp命令時記得添加-a參數,保留原始文件的所有者、所屬組、許可權等信息。這樣bind服務程式才能順利讀取文件內容。

按照如下提示根據自身需要修改即可

如上配置,對應的伺服器主機名即為mail.heimatengyun.com,而郵件域為@heimatengyun.com。

需要註意,功能變數名稱後有一個點,如果配置文件配錯了會導致後邊重啟bind服務的時候啟動不起來。如果遇到啟動不起來的情況請仔細檢查配置文件。

配置好後需要重啟bind服務使其生效。

[root@mail ~]# systemctl restart named 
[root@mail ~]# systemctl enable named
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'
[root@mail ~]# 

(5)DNS伺服器地址配置

通過nmtui命令將DNS伺服器地址配置為本地的IP地址。忘記操作步驟的請看“linux入門系列11--Centos7網路服務管理”2.2節。

修改完成後重啟網路服務使配置生效。

[root@mail ~]# systemctl restart network
2.1.4 測試功能變數名稱解析

通過nslookup命令測試本地DNS是否生效

[root@mail ~]# nslookup 
> mail.heimatengyun.com
Server:         192.168.0.101
Address:        192.168.0.101#53
Name:   mail.heimatengyun.com
Address: 192.168.0.101
> exit
[root@mail ~]#

說明本地DNS解析服務已經生效了,接下來就開始部署電子郵件系統了。

2.2 Postfix發件系統

Postfix是一款由IBM資助研發的免費開源電子郵件服務程式,能夠很好地相容 Sendmail 服務程式,由許多小模塊組成,每個小模塊都可以完成特定的功能,因此可在生產工作環境中根據需求靈活搭配它們。

2.2.1 安裝Postfix服務
[root@mail ~]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
[root@mail ~]# 

可以看到,在RHEL7中已經預設安裝了Postfix。

防火牆禁用

2.2.2 配置Postfix服務

主配置文件為/etc/postfix/main.cf,其中主要的參數如下:

參數 作用
myhostname 郵局系統的主機名
mydomain 郵局系統的功能變數名稱
myorigin 從本機發出郵件的功能變數名稱名稱
inet_interfaces 監聽的網卡介面
mydestination 可接收郵件的主機名或功能變數名稱
mynetworks 設置可轉發哪些主機的郵件
relay_domains 設置可轉發哪些網域的郵件
[root@mail ~]# vim /etc/postfix/main.cf

總共有5處需要修改,分別如下:

myhostname = mail.heimatengyun.com

此處定義一個myhostname 的變數,用來保存伺服器的主機名稱,以供後邊的參數調用。

mydomain = heimatengyun.com

定義一個名為 mydomain 的變數,用來保存郵件域的名稱,以供後邊的參數調用。

myorigin = $mydomain

調用前面的mydomain變數,用來定義發出郵件的域。這樣通過調用變數的好處是避免重覆寫入信息,以及便於日後統一修改。

inet_interfaces = all

定義網卡監聽地址,可以指定要使用伺服器的哪些IP地址對外提供電子郵件服務;也可以寫成 all,代表所有IP地址都能提供電子郵件服務。

mydestination = $myhostname , $mydomain

定義可接收郵件的主機名或功能變數名稱列表。這裡可以直接調用前面定義好的 myhostname 和 mydomain變數。

2.2.3 創建電子郵件系統登錄用戶

與之前提到的vsftp服務程式一樣,postfix可以使用本地系統的賬號密碼進行登錄。(創建的創建應該添加nologin禁止登陸,但此處為了後邊方便演示,使其允許登錄)

[root@mail ~]# useradd heima
[root@mail ~]# echo "123456" | passwd --stdin heima 
Changing password for user heima.
passwd: all authentication tokens updated successfully.
2.2.4 重啟服務並加入開機啟動
[root@mail ~]# systemctl restart postfix
[root@mail ~]# systemctl enable postfix

2.3 Dovecot收件系統

Dovecot是一款能夠為Linux系統提供IMAP和POP3電子郵件服務的開源服務程式,安全性高、配置簡單、執行速度快並且占用資源少,推薦使用。

2.3.1 安裝Dovecot
[root@mail ~]# yum install dovecot
...省略部分內容
Installed:
  dovecot.x86_64 1:2.2.36-3.el7_7.1                                         
Complete!
[root@mail ~]# 
2.3.2 配置Dovecot

(1)主配置文件

Dovecot服務程式的主配置文件為/etc/dovecot/dovecot.conf 。

[root@mail ~]# vim /etc/dovecot/dovecot.conf

一般情況下有2處需要修改

第一處:

protocols = imap pop3 lmtp
disable_plaintext_auth = no

找到以上行並取消註釋,併在其下添加一行,允許用戶使用明文進行密碼驗證。

之所以這樣操作,是因 為 Dovecot 服務程式為了保證電子郵件系統的安全而預設強制用戶使用加密方式進行登錄, 而由於當前還沒有加密系統,因此需要添加該參數來允許用戶的明文登錄。

第二處:

 #login_trusted_networks =192.168.78.0/24

找到login_trusted_networks,根據需要來選擇取消註釋並配置允許登錄的網段地址。我們可以在這裡限制只有來自於某個網段的用戶才能使用電子郵件系統。如果想允許所有人都能使用,則不用修改本參數。

為了演示方便,此處我們不修改,使其允許所有人都能使用。

(2)其他配置文件

將配置文件/etc/dovecot/conf.d/10-ssl.conf的ssl設置為no

[root@mail ~]# vim /etc/dovecot/conf.d/10-ssl.conf 
...省略部分內容
ssl = no

這步如果不設置的話,客戶端通過outlook無法接受郵件。我在這裡踩了個大坑,希望大家註意。

2.3.3 配置郵件格式與存儲路徑

在子配置文件/etc/dovecot/conf.d/10-mail.conf 中,找到mail_location並把註釋去掉即可

[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf 
mail_location = mbox:~/mail:INBOX=/var/mail/%u

修改後保存並退出。

切換到剛纔建立的heima賬號,併在其家目錄中創建用於保存郵件的目錄。

[root@mail ~]# su - heima
[heima@mail ~]$ mkdir -p mail/.imap/INBOX
[heima@mail ~]$ exit
logout
[root@mail ~]# 

最後記得重啟dovecot服務

[root@mail ~]# systemctl restart dovecot
[root@mail ~]# systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
[root@mail ~]# 

至此基本的電子郵件系統就安裝完畢,接下來進行測試收發電子郵件。

2.4 測試收發郵件

經過上邊的操作,基本的電子郵件系統以及構建好了,如何驗證該電子郵件系統是否可用呢?以下三種方法中根據個人喜好選取一種即可,為了保持完整性,分別進行了測試。

2.4.1 採用mail命令簡單測試收發

用mial命令就可以實現收發郵件,不同用戶登錄到系統中用mail命令,就可以看到收發的郵件了。理論上不同用戶登錄系統只能看到自己的郵件,比如當前用戶如果是root,那他只能看到別人發給他的郵件(一種特殊情況是可以設置郵件別名,這樣就可以看到其他人的郵件),如果當前用戶是heima,那也只能看到它自己的郵件。

用root用戶分別給自己發郵件並查看

[root@mail ~]# echo "msg" | mail -s "first email to root" [email protected]
[root@mail ~]# mail
... 省略部分內容
 N 10 root                  Tue Feb  4 22:22  18/609   "first email to root"
& exit
You have mail in /var/spool/mail/root
[root@mail ~]# 

root給heima發郵件並切換到heima賬戶查看郵件

[root@mail ~]# echo "msg" | mail -s "first email to heima" [email protected]
[root@mail ~]# su - heima
Last login: Tue Feb  4 15:43:52 CST 2020 on :1
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1580802239
[heima@mail ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/heima": 2 messages 1 new
    1 Mail System Internal  Tue Feb 04 20:15  13/562   "DON'T DELETE THIS MES"
>N  2 root                  Tue Feb  4 22:22  18/613   "first email to heima"
& exit
You have mail in /var/spool/mail/heima
[heima@mail ~]$ exit
logout
[root@mail ~]# 

可以看到收件和發件都正常。

但是這樣還不夠,這是在Centos伺服器內部,還需要客戶端進行測試,以下outlook和foxmail任選其一即可

2.4.2 採用outlook測試

在win7上安裝outlook2007來進行測試,先將win7的dns設置為centos的ip地址,即192.168.0.101

安裝並配置outlook,過程如下:

(1)運行outlook

點擊下一步按鈕

(2)配置電子郵件,保持預設即可

點擊下一步按鈕

(3)選擇電子郵件服務協議類型,保持預設即可

點擊下一步按鈕

(4)填寫賬戶信息

姓名任意取,電子郵件為前邊創建的系統用戶heima加上發件域,即為:[email protected],密碼為heima賬戶的登錄密碼。

點擊下一步按鈕

(5)電子郵件服務登錄驗證

之前我們配置Dovecot為使用明文登錄電子郵件服務,而Outlook軟體預設會通過SSL加密協議嘗試登錄,因此會提示加密連接不可用。

再次點擊“下一步”按鈕。

順利的話,就會出現這個配置成功的界面。實際可能你的操作過程中會遇到一些問題,此處如果賬號密碼有問題或者登陸遠程郵件系統有問題都會彈出測試界面,如果遇到問題請嚴格按照前邊的步驟進行檢查。筆者此處就曾遇到只能發件不能收件的問題,原因是由於未開啟ssl,需要在docovet中將其關閉。

添加成功後,就可以像自己以及向root用戶發送郵件了。其操作步驟給發qq郵件是一直的,相信大家一定用過qq郵件,所以就不在多嘴了。

截圖為證

2.4.3 採用foxmail測試

在win10上安裝foxmail進行測試,同理先將win10dns設置為centos的ip地址。

foxmail官方地址:https://www.foxmail.com/

(1)安裝foxmail

非常簡單,直接根據嚮導即可。

(2)設置郵件賬號

安裝完成後,設置郵件賬號,選擇“其他郵箱”

輸入賬號密碼

點擊創建按鈕,在界面中選擇接收伺服器類型為POP3

點擊創建按鈕

點擊完成按鈕,即可完成安裝和設置。

設置成功後就可以正常收發郵件了。

截圖為證

通過對比,個人感覺foxmail不如outlook穩定,並且收件較慢。

通過本文的演示,大家應該理解電子郵件系統的基本原理和流程,並可以在區域網搭建一個基本的電子郵件收發系統。

下一篇文章將演示apache服務搭建靜態web網站。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近一直奔波於面試,面了幾家公司的研發。有讓我受益頗多的面試經驗,也有讓我感覺浪費時間的面試經歷~因為疫情原因,最近宅在家裡也沒事,就想著使用Redis配合事件匯流排去實現下具體的業務。 需求 一個簡單的電商,有幾個重要的需求點 商品下單後TODO 存儲訂單信息 鎖定商品庫存 消息推送商家端 訂 ...
  • 一、簡介 ABP vNext 原生支持多租戶體系,可以讓開發人員快速地基於框架開發 SaaS 系統。ABP vNext 實現多租戶的思路也非常簡單,通過一個 來分割各個租戶的數據,並且在查詢的時候使用統一的全局過濾器( 類似於軟刪除 )來篩選數據。 關於多租戶體系的東西,基本定義與核心邏輯存放在 V ...
  • Class 哈哈哈fdfdv //他是變數 作為一種不確定類型的變數 class 哈哈哈fdfdv //他是類 作為自定義結構體 public class 變數 //他是類 作為自定義結構體 鹹蛋超級借法 filename //他是變數 作為一種不確定類型的變數 string filename // ...
  • 無論上層語言類型多麼複雜,在.NET平臺上,都逃不過CTS的約束,今天,我想說的不是CTS,而是上層語言C#類型的一點研究。 請看一下下麵的這個代碼段: 1 public struct test 2 { 3 public override bool Equals(object obj) 4 { 5 ...
  • 4.1實戰案例——構建讀寫分離的資料庫集群 使用Mycat作為資料庫中間件服務構建讀寫分離的資料庫集群 使用一臺虛擬機部署Mycat資料庫中間件服務,將用戶提交的讀寫操作識別分發給相應的資料庫 節點。這樣將用戶的訪問操作、資料庫的讀與寫操作分給3台主機,只有資料庫集群的主節點接 收增、刪、改SQL語 ...
  • ubuntu配置redis 安裝的有些過程會比較慢,我即使有梯子,最長的過程也要一分鐘左右,所以一定要有耐心。 安裝 下載安裝包: "點擊這裡進行最新版安裝包下載" 用 進行解壓 執行 ,將解壓過後的文件夾移動,你也可以放置其他目錄,但推薦這個目錄, 註意要root許可權 進入redis目錄 ,並執行 ...
  • 預設情況下,putty連接ubuntu server以後,哪怕設置的Utf-8的連接,也是無法顯示中文的。 應該是ubuntu伺服器端,沒有字型檔的問題。 如果在putty顯示和輸入中文呢,因為配置信息,經常需要輸入中文註釋,以防後面看不懂呀。 第一步,putty登錄系統, $sudo apt ins ...
  • 命令及查看命令的詳細使用 前言: 通過這篇圖文,讀者可以瞭解 Linux 里命令的外表和本質,及如何利用 linux 自帶的幫助說明來自學一個自己沒用過的命令。 自學要求:有點英語基礎最好,這個等下看幫助文檔的時候就知道了,能看懂大多數英語單詞自學就沒問題 正文: 首先,Linux 里的命令分為內置 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...