當我們想通過程序從郵件中檢索信息或數據,但不想在設備上下載郵件時,這種情況會發生很多次。當我們只想獲取信息並從郵件中尋找特定數據時,甚至會發生這種情況。
我們有許多 Python 模塊,通過這些模塊,我們可以使用程序獲取電子郵件的數據,但是大多數模塊在從郵件中檢索信息時會下載郵件。這正是我們不想要的,因為我們不需要將郵件信息保存在系統中,也不需要在別人的系統上工作很多次,我們只需要看一看我們電子郵件中存在的一些特定信息。但是 Python 中有一些模塊和協議,我們可以通過它們從電子郵件中檢索信息,而無需在系統中實際下載它們。Python 中的一個這樣的模塊是「imaplib」模塊,它為我們提供了訪問 IMAP 協議的途徑,以便從郵件中訪問和檢索數據。
在本教程中,我們將學習 Python 和 IMAP 協議的「imaplib」模塊,我們還將學習如何使用該協議從電子郵件中檢索信息。
imaplib 是一個 Python 模塊或庫,它為我們提供了客戶端類,這樣我們就可以設置與 IMAP 第 4 版伺服器的通信,通過這種 IMAP 通信,我們可以從我們的電子郵件中檢索數據。imaplib 庫為我們提供了三個客戶端類,在使用 Python 中的 IMAP 協議與伺服器通信時使用。下面是 Python 的 imaplib
模塊中提供給我們的三個客戶端類:
- IMAP_4
- IMAP4_Stream
- IMAP_SSL
當我們使用 IMAP 協議通過 Python 程序訪問電子郵件數據時,這些類別的 imaplib
模塊用於建立與伺服器的通信。
imaplib
模塊是 Python 安裝包附帶的預安裝 Python 庫,這就是為什麼我們不需要為安裝該庫執行任何安裝過程。取而代之的是,我們可以直接在 Python 程序中使用 imaplib
模塊的功能,方法是使用「import」關鍵字將其導入程序中。
IMAP 是一種電子郵件檢索協議,代表互聯網郵件訪問協議,我們將通過 Python 程序使用該協議來訪問我們電子郵件中存在的數據。IMAP 協議最早是在 1986 年提出的,這個模塊不下載我們系統中的電子郵件來從中檢索數據。IMAP 模塊只是讀取我們電子郵件中的數據,並將其顯示在程序的輸出中。該協議對於低帶寬條件下的設備非常有用。我們必須將 IMAP 模塊與 Python 的 imaplib
模塊(這是一個客戶端庫)一起使用,以從我們的電子郵件中檢索數據。IMAP 模塊將使用 imaplib
模塊的客戶端類,並建立與伺服器的通信,以便它可以從電子郵件中檢索數據,並在輸出中顯示給我們。
以下是 IMAP 協議的一些關鍵點,我們必須記住,當我們使用該協議從電子郵件中檢索數據時,它們對我們非常有用:
- 我們應該記住,通過 IMAP 協議檢索數據的電子郵件由遠程伺服器保存和維護。
- IMAP 協議還通過使用
imaplib
模塊的客戶端類與伺服器建立連接來幫助我們搜索電子郵件。 - IMAP 協議還允許客戶端程序(我們將在其中使用該協議的 Python 程序)在伺服器上操縱我們的電子郵件,而無需將其下載到我們的設備或本地計算機上。
- IMAP 協議還使我們能夠刪除、操作或創建一個或多個稱為郵箱的遠程郵件文件夾。
- IMAP 模塊還允許並發訪問多個郵箱(或多個電子郵件帳戶),它將出現在多個郵件伺服器上。
- IMAP 協議還允許我們在甚至不閱讀郵件的情況下對郵件採取各種操作,如刪除郵件、下載郵件等。
這些是我們應該記住的 IMAP 協議的一些要點,當我們在 Python 程序中使用該協議時,它將對我們非常有幫助。我們可以執行上面在 IMAP 協議的關鍵點中提到的所有操作。
IMAP 協議有幾個不同的命令,用於通過它執行幾個不同的動作。使用 IMAP 協議的這些命令,我們可以在我們的郵箱上執行多個操作,因此這些命令幫助我們從電子郵件中檢索信息。下面是 IMAP 協議的命令列表及其描述,其中一些我們將在該協議的實現部分使用:
| 沒有 | IMAP 命令 | 命令描述 |
| one | 註冊 | 此命令用於通過我們將提供的憑據登錄到伺服器來打開與電子郵件伺服器的連接。 |
| Two | 挑選 | 我們使用這個命令來選擇我們想要訪問的郵箱文件夾,這樣它就可以訪問郵箱中的所有電子郵件。我們甚至可以在通過此 SELECT 命令選擇郵箱後對郵箱進行更改。 |
| three | 能力 | 當我們想知道伺服器支持的功能時,我們可以使用這個命令,我們可以通過請求伺服器列出它的功能來做到這一點。 |
| four | 創造 | 當我們想要創建一個具有指定名稱的郵箱時,我們可以使用 IMAP 協議的 create 命令。 |
| five | 無操作 | NOOP 命令的作用類似於並被用作定期輪詢,以提醒我們新消息或我們在不活動期間消息狀態的任何更新。 |
| six | 考試 | 「檢查」命令的工作方式與「選擇」命令相同,但這兩個命令之間的唯一區別是「檢查」命令不允許對郵箱進行任何更改。此命令僅允許我們從郵件中讀取和檢索信息,並檢查所選郵箱中有多少封電子郵件。 |
| seven | 重新命名 | 當我們想從電子郵件中更改郵箱的名稱時,我們必須使用 RENAME 來執行相同的操作。 |
| eight | 刪除 | DELETE 命令用於永久刪除我們選擇或創建的郵箱中的電子郵件,此命令執行的操作無法撤消。 |
| nine | 註銷 | 當我們不使用 IMAP 協議時,或者當我們處理完電子郵件後,我們想要關閉與電子郵件伺服器的連接,我們可以使用 LOGOUT 命令來完成。此命令通知電子郵件伺服器,用戶已完成會話,現在應該關閉會話。伺服器將首先通過協議發送 BYE 響應,然後是來自客戶端的 OK 響應,然後與伺服器的連接將被關閉。 |
這些都是 IMAP 協議的重要命令。我們必須使用這些命令,同時使用 IMAP 協議從郵件中檢索信息並在郵箱中進行更改。我們在建立或關閉與電子郵件伺服器的連接時也使用這些命令。
在本教程的前幾節中,我們已經學習了 IMAP 協議以及用於從電子郵件中檢索信息和在郵箱中進行更改的命令。我們通過在程序中使用 imaplib
模塊中的函數,在 Python 中實現了這個 IMAP 協議。為了學習如何通過 imaplib
模塊實現 IMAP 協議,我們將使用一個示常式序,在該程序中,我們使用該模塊中的功能並與電子郵件伺服器通信。
示例:
請看下面的 Python 程序,我們將在其中使用 imaplib
模塊並與電子郵件伺服器建立連接:
# Import imaplib library in the program
import imaplib as imp
# Also import the pprint module
import pprint as pp
# Targeting the host server for email
imapHostServer = 'imap.gmail.com'
# User email id
imapUserEmail = 'forpythoncontent@gmail.com'
# Password for user Email
imapPassword = 'NotAPassword'
# Connecting to host server using SSL client class
imapVar = imp.IMAP4_SSL(imapHostServer)
# Login to the email server with credentials
imapVar.login(imapUserEmail, imapPassword)
# Mailbox folder where emails are present
imapVar.select('Inbox')
# Searching data through the mail
tmp, data = imapVar.search(None, 'ALL')
# Using for loop to print data
for n in data[0].split():
tmp, data = imapVar.fetch(n, '(RFC822)')
print('Message: {0}\n'.format(n))
pp.pprint(data[0][1])
break
# Closing the connection with the server
imapVar.close()
輸出:
Message: b'1'
(b'Delivered-To: [email protected]\r\nReceived: by 2002:a05:6839:408'
b'e:0:0:0:0 with SMTP id dt14csp1139908nkc;\r\n Thu, 18 Nov 2021 21:1'
b'8:23 -0800 (PST)\r\nX-Received: by 2002:a02:6901:: with SMTP id e1mr248002'
b'85jac.0.1637299103144;\r\n Thu, 18 Nov 2021 21:18:23 -0800 (PST)\r\nA'
b'RC-Seal: i=1; a=rsa-sha256; t=1637299103; cv=none;\r\n d=google.com'? https://notifications.google.c=\r\nom/'
b'g/img/AD-FnEznfDyGI_ixnq3rHvh5p8bctFcd4ga52j55D-mp0uud4w.gif></body>\r\n '
b'</html>\r\n\r\n--000000000000b5138a05d11d6681--\r\n')
如我們所見,收件箱中電子郵件的數據會列印在輸出中,每個人的輸出會有所不同。
說明:我們首先在程序中導入了 imaplib 和 pprint
模塊,利用它們的功能來實現 IMAP 協議。我們在程序中導入了 imaplib 作為 imp,pprint
模塊作為 pp。之後,我們初始化了 imapHostServer 變數,在該變數中我們定義了電子郵件的伺服器路徑。然後,我們已經初始化了兩個變數,即 imapUserEmail 和 imapPassword,其中我們分別定義了電子郵件的用戶電子郵件 ID 和密碼(出於安全原因,我們在程序中定義的密碼不是正確的密碼)。人們可以使用他們的電子郵件 id 和密碼,同時在他們的系統中實現這個程序。之後,我們定義了 imapVar 變數,其中我們使用了 IMAP4_SSL()函數,該函數來自 imaplib
模塊,使用 imapHostServer 作為函數中的參數。這個函數將與電子郵件伺服器建立連接,然後我們使用 login()函數來訪問我們的電子郵件。我們在登錄()函數中使用了 imapusseremail&imapPassword 作為參數,作為我們電子郵件帳戶的電子郵件 Id &密碼。然後,我們使用 select()函數選擇「收件箱」郵箱並檢索收件箱中的電子郵件。之後,我們使用 search()函數從收件箱中的電子郵件中搜索數據。最後,我們使用 for
循環遍歷收件箱中的所有電子郵件,並在輸出中從它們那裡檢索信息。我們在 for
循環中使用 fetch()函數從電子郵件中獲取數據,使用 pprint()函數列印郵件中的信息。
我們可以使用 IMAP 協議從我們的電子郵件中檢索數據,而無需在我們的系統中實際下載它們。為了實現 IMAP 協議,我們必須使用 imaplib
模塊,它為我們提供了三個 IMAP 客戶端類。我們可以使用 IMAP 的各種命令在電子郵件中執行多種功能。我們必須在 Python 程序中使用 imaplib
模塊來實現 IMAP 協議,並從電子郵件中獲取數據或保持連接。
原創文章,作者:HV0TT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/127234.html