郵件標籤的實現方法

2021-08-26 16:50:16 字數 1808 閱讀 7275

功能說明:

像qq郵箱的標籤功能,通過標籤管理郵件,便於對郵件分類。一般有如下要求:

1) 增加、刪除、修改標籤

2) 對郵件標記多個標籤,形成郵件和標籤多對多的關係

3) 檢視標籤列表,並且可實時顯示每個標籤下的郵件數量

4) 檢視某個標籤下的郵件列表

5) 郵件列表可看到郵件已標記的標籤

6) 可建收信規則,對於某種條件標記乙個或多個標籤

7) 刪除標籤時,不刪除標籤下的郵件

實現說明:

標籤資訊表:

label_id->label_detail_info(標籤id為主鍵,對映標籤詳細資訊,包括標籤名等)

這個錶可滿足要求 1) 3),標籤id遞增生成,可滿足 6)

郵件資訊表:

user_id+message_id->messge_detail_info(使用者和郵件id為主鍵,對映郵件詳細資訊,包括郵件所標記的標籤label_id_list,發信時間等)

方法1:

1,label_id_list儲存為字串,如某封郵件標記有多個標籤,則label_id_list為 '1,2,3',通過標籤id獲取標籤名稱,這樣可滿足要求 2) 5)

2,另外再建乙個標籤對應郵件的表,如label_id->message_id,通過message_id可以獲取郵箱資訊,可滿足 4)

3,刪除標籤時,通過標籤對應郵件的表找出郵件,修改郵件的label_id_list

優缺點:

1,可建立任意多個標籤

2,需多維護」標籤對應郵件的表「,對郵件標記標籤時,修改label_id_list後需增加label_id->message_id的對映,保證原子操作較困難

3,刪除標籤後,需修改郵件的label_id_list

方法2:

1,label_id_list儲存為long int,每個bit對應乙個標籤,如label_id_list=7表示為 '1,2,3',通過標籤id獲取標籤名稱,這樣可滿足要求 5)

2,其他和方法1一樣

優缺點:

1,由於long int只有64個bit,所以最多只能建64個標籤。其他和方法1一樣,該方法限制了建標籤的數量,所以用方法1也不用方法2。

方法3:

1,對郵件所標記的標籤組合建立索引表,稱為標籤id對映表,該錶有3列

label_map_id(int,遞增,主鍵),user_id,label_id_list(varchar)

label_id_list是字串型別,用逗號分隔的標籤id,如'1,3,5',已經排好序的

對user_id建立索引,用於查詢某使用者使用的標籤組合

由於該錶的label_id_list只用於查詢標籤組合是否包含某標籤id,並且單個使用者使用的標籤組合不會很多,所以不需要對user_id+label_id_list建索引

如 100->'1,2,3'

2,郵件資訊表的label_id_list儲存為label_map_id,如某封郵件標記的標籤是'1,2,3',則郵件資訊表的label_id_list的值為100

3,在郵件資訊表對user_id+label_id_list建立索引

4,刪除標籤時,檢查標籤id對映表內的label_id_list刪除將被刪除的標籤id

5,刪除郵件時,檢查是否還有郵件使用將被刪除郵件的label_id_list,如果沒有,則在標籤id對映表刪除相應記錄。比如如果沒有郵件再使用100,則將100刪除

優缺點:

1,可建立任意多個標籤

2,對郵件標記標籤,取消標記標籤,刪除標籤等操作都比較簡單

3,需多維護」標籤id對映表「,但修改標籤的操作不頻繁,並且修改該錶不影響到原子操作,所以維護該錶不麻煩

PHP實現郵件傳送的方法

這裡簡要介紹一下在php語言中實現郵件傳送的兩種方法,分別是使用socket傳送和使用mail 函式傳送的方式。1.使用socket傳送原理 使用fsockopen函式開啟乙個internet連線,函式的引數列表為fsockopen string hostname,int port,int errn...

詳解python實現郵件解析的方法

目錄 如何通過python實現郵件解析?郵件的格式十分複雜,主要是mime協議,本文主要是從實現出發,具體原理可以自行研究。通過mailgun開源的flanker庫實現郵件解析。該庫包含了郵件位址程式設計客棧解析和郵件mime格式解析。輸入以下命令 pip install fwww.cppcns.c...

發郵件的實現

做乙個,使用者註冊的時候,給他傳送您郵件,然後取得啟用碼,註冊成功 string email 目的地人的賬戶 string emailmsg 傳送的內容 public static void sendmail string email,string emailmsg throws addres ce...