最小 Python IMAP over TLS 示例
注意: 在某些情况下你可能需要考虑使用 IMAP over SSL。请参见最小 Python IMAP over SSL 示例
此示例代码将登录服务器,启动 TLS 会话,列出邮箱并立即注销。
minimal-python-imap-tls.py
#!/usr/bin/env python3
import imaplib
import ssl
# 加载系统信任的 SSL 证书
tls_context = ssl.create_default_context()
# 连接(首先未加密)
server = imaplib.IMAP4('imap.mydomain.com')
# 启动 TLS 加密。如果无法建立 TLS 会话将失败
server.starttls(ssl_context=tls_context)
# 登录。仅在 server.starttls() 之后执行此操作!!
server.login('email@mydomain.com', 'password')
# 打印服务器上的邮箱列表
code, mailboxes = server.list()
for mailbox in mailboxes:
print(mailbox.decode("utf-8"))
# 选择邮箱
server.select("INBOX")
# 清理
server.close()记住替换:
imap.mydomain.com为你的 IMAP 服务器域名或 IP 地址email@mydomain.com为你要登录的电子邮件地址password为你要登录的密码
你必须绝对确保先运行 server.starttls(...),然后才执行 server.login(...)。如果不这样做,窃听者可能能够读取你未加密的用户名和密码!
运行此脚本时,成功输出可能如下所示:
imap-mailboxes.txt
(\HasChildren) "." INBOX
(\HasNoChildren) "." INBOX.Spam
(\HasNoChildren) "." INBOX.Drafts
(\HasNoChildren) "." INBOX.Sent
(\HasNoChildren) "." INBOX.Trash如果你的凭据不起作用,你将看到类似这样的错误消息:
imap-error-auth.txt
Traceback (most recent call last):
File "./imaptest.py", line 5, in <module>
server.login('email@domain.com', 'mypassword')
File "/usr/lib/python3.6/imaplib.py", line 598, in login
raise self.error(dat[-1])
imaplib.error: b'[AUTHENTICATIONFAILED] Authentication failed.'注意为了能够 server.close() 连接,需要先 server.select() 一个邮箱;这就是为什么我们不能省略 server.select("INBOX") 行,即使我们实际上没有对邮箱做任何事情。请参见此文章了解此行为的更简洁示例。
Check out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow