Python imaplib模块

Python imaplib模块

许多时候,我们想要通过程序从我们的邮件中检索信息或数据,但我们不想下载邮件到设备上。即使我们只是想提取信息并从邮件中查找特定数据,也是如此。

我们有很多Python模块可以通过程序获取电子邮件的数据,但是大多数模块在提取信息时都会下载邮件。这正是我们不想要的,因为我们不需要将邮件的信息保存在系统中,或者我们经常在他人的系统上工作,我们只需要查看电子邮件中的一些特定信息。但是Python中有一些模块和协议可以在不实际下载邮件到系统中的情况下检索邮件中的信息。其中一个这样的模块就是“imaplib”模块,它为我们提供了访问和检索邮件数据的IMAP协议的访问权限。

在本教程中,我们将学习有关Python和IMAP协议的“imaplib”模块,我们还将学习如何使用此协议从电子邮件中检索信息。

Python的imaplib模块

imaplib是一个Python模块或库,它为我们提供了客户端类,以便我们可以与IMAP版本4服务器建立通信,并通过这种IMAP通信来检索数据。imaplib库为我们提供了三个客户端类,这些客户端类在使用Python的IMAP协议与服务器通信时使用。以下是Python的imaplib模块中提供给我们的三个客户端类:

  • IMAP_4
  • IMAP4_Stream
  • IMAP_SSL

当我们使用IMAP协议通过Python程序访问电子邮件数据时,会使用imaplib模块的这些类来与服务器建立通信。

Python的imaplib模块:安装

imaplib模块是Python的预装库,它随Python安装包一起提供,因此我们不需要进行任何安装过程来安装此库。我们可以直接使用imaplib模块的函数在Python程序中通过使用“import”关键字将其导入程序。

Python中的IMAP协议

IMAP是一种电子邮件检索协议,它代表Internet Mail Access Protocol,我们将通过Python程序使用此协议来访问我们的电子邮件中的数据。IMAP协议最早提出于1986年,此模块不会将电子邮件下载到我们的系统中以检索其中的数据。IMAP模块只是读取我们电子邮件中的数据并将其显示在程序的输出中。此协议对于低带宽环境中的设备非常有帮助。我们必须与Python的imaplib模块(客户端库)结合使用IMAP模块以从电子邮件中检索数据。IMAP模块将使用imaplib模块的客户端类来与服务器建立通信,以便从电子邮件中检索数据并在输出中显示给我们。

IMAP协议的关键点

以下是我们在使用此协议从邮件中检索数据时需要记住的一些关键点,这对我们非常有用:

  • 我们应该记住通过IMAP协议检索数据的电子邮件是由远程服务器持有和维护的。
  • IMAP协议还通过使用imaplib模块的客户端类与服务器建立连接,帮助我们搜索电子邮件。
  • IMAP协议还允许客户端程序(我们将在其上使用此协议的Python程序)在不将电子邮件下载到设备或本地计算机上的情况下操作我们的邮件服务器上的电子邮件。
  • IMAP协议还允许我们删除、操作或创建单个或多个远程消息文件夹,也称为邮箱。
  • IMAP模块还允许同时访问多个邮箱(或多个电子邮件帐户),并且可能存在于多个邮件服务器上。
  • IMAP协议还允许我们在不阅读电子邮件的情况下采取各种操作,例如删除邮件、下载邮件等。

这些是IMAP协议的一些关键要点,我们在使用此协议的Python程序时将非常有帮助。我们可以执行上述关键要点中提到的所有操作。

IMAP命令

IMAP协议具有几个不同的命令,用于执行多个不同的操作。使用这些IMAP协议的命令,我们可以在电子邮件邮箱上执行多个操作,因此这些命令帮助我们检索电子邮件中的信息。以下是IMAP协议的命令列表及其描述,其中一部分命令我们将在此协议的实现部分中使用:

S No IMAP命令 命令描述
1 LOGIN 该命令用于通过提供的凭据登录服务器,打开与电子邮件服务器的连接。
2 SELECT 我们使用此命令选择要访问的邮箱文件夹,并通过此SELECT命令访问邮箱中的所有电子邮件。在选择邮箱后,我们甚至可以对邮箱进行更改。
3 CAPABILITY 当我们想要了解服务器支持的功能时,可以使用此命令,通过请求服务器列出其功能来实现。
4 CREATE 当我们想要创建具有特定名称的邮箱时,可以使用IMAP协议的CREATE命令。
5 NOOP NOOP命令用作定期轮询,以在我们某段时间的不活动期间提醒我们有关新消息或消息状态的任何更新。
6 EXAMINE EXAMINE命令与SELECT命令的功能相同,但这两个命令之间唯一的区别是EXAMINE命令不允许对邮箱进行任何更改。此命令仅允许我们阅读和检索邮件中的信息,并检查所选邮箱中有多少封邮件。
7 RENAME 当我们想要从电子邮件中更改邮箱的名称时,必须使用RENAME命令执行相同操作。
8 DELETE DELETE命令用于永久删除我们选择或创建的邮箱中存在的邮件,此命令执行的操作无法撤消。
9 LOGOUT 当我们不再使用IMAP协议或者在完成对邮件的操作后,希望关闭与电子邮件服务器的连接,可以使用LOGOUT命令。此命令通知电子邮件服务器用户已完成会话,现在应该关闭会话。服务器将首先通过协议发送BYE响应,然后客户端将发送OK响应,然后将关闭与服务器的连接。

这些是IMAP协议的重要命令。在使用IMAP协议从邮件中检索信息并对邮箱进行更改时,我们必须使用这些命令。在与电子邮件服务器建立或关闭连接时,我们也使用这些命令。

Python的imaplib模块:实现

我们在本教程的前几节中学习了IMAP协议以及用于从电子邮件中检索信息并对邮箱进行更改的命令。通过使用imaplib模块中的函数在程序中实现该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: stash\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')

Python imaplib模块

如我们所见,来自收件箱中的电子邮件的数据已打印在输出中,并且输出对每个人来说都是不同的。

解释: 我们首先在程序中导入了imaplib和pprint模块,以使用它们的函数实现IMAP协议。我们将imaplib导入为imp,将pprint模块导入为pp在程序中。之后,我们初始化了imapHostServer变量,其中定义了电子邮件的服务器路径。然后,我们初始化了两个变量,即imapUserEmail和imapPassword,在其中分别定义了电子邮件的用户邮箱ID和密码(出于安全原因,我们在程序中定义的密码并非正确密码)。在实施此程序时,可以使用自己的电子邮件ID和密码。之后,我们在imapVar变量中定义了IMAP4_SSL()函数,使用imaplib模块中的imapHostServer作为参数。这个函数将与电子邮件服务器建立连接,然后我们使用login()函数来访问我们的电子邮件。我们在login()函数中使用了imapUserEmail和imapPassword作为参数,分别作为我们电子邮件帐户的Email ID和密码。然后,我们使用select()函数选择“Inbox”邮箱,并检索收件箱中的电子邮件。之后,我们使用search()函数搜索收件箱中的电子邮件数据。最后,我们使用for循环遍历收件箱中的所有电子邮件,并在输出中检索信息。我们在for循环中使用fetch()函数从电子邮件中获取数据,并使用pprint()函数打印邮件中的信息。

注意:我们在程序中使用了pprint模块,它也是Python的内置模块,并且在打印输出中使用它是很重要的。

结论

我们可以使用IMAP协议从电子邮件中检索数据,而无需实际下载到我们的系统中。要实施IMAP协议,我们必须使用imaplib模块,该模块为我们提供了三个IMAP客户端类。我们可以使用IMAP的各种命令来执行电子邮件中的多个功能。我们必须在Python程序中使用imaplib模块来实现IMAP协议并从电子邮件中检索数据或维护连接。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程