我正在尝试编写一个有助于清除 IMAP 收件箱的脚本,但我遇到了密码问题;也就是说,要访问服务器,我需要访问明文。我已经检查过,我的邮件服务器没有将 MD5 显示为可用方法(否则我可以使用 IMAP4.login_cram_md5
)。如何在没有明文密码的情况下访问服务器?
最佳答案
您可以像这样检查可用的身份验证方法(我正在使用 IMAP4_SSL
,如果您想要不安全的连接,请使用 IMAP4
,但我不建议使用非 SSL 连接(如果您可以选择)。
import imaplib
imap_server = imaplib.IMAP4_SSL("imap.server.com")
print "\n".join(i for i in imap_server.capabilities if i.startswith("AUTH="))
然后,您可以编写一个身份验证对象,该对象可以传递给您选择的方法的 imap_server.authenticate()
。 This bug report恰好有一些它的使用示例和 this SO question显示某人通过 OAuth 向 Gmail 进行身份验证。
如果服务器不提供除明文密码之外的任何身份验证方法,或者您不能/不希望支持它们,那么不幸的是,将密码存储在可以恢复明文的表单中是不可避免的。您可以以某种形式对其进行加密(例如使用 PyCrypto 的 AES,例如 here ),但是加密 key 仍然会存储在某个地方,除非您想每次都提示用户(在这种情况下您也可以只无论如何都会提示输入密码)。我建议至少进行一些简单的混淆,例如 Base64 编码,只是为了防止有人懒洋洋地浏览代码或配置,清楚地看到密码。
编辑:另一点可能很明显,那就是确保如果您确实需要存储明文密码,则永远不要将它们存储在需要全世界可读的文件中。例如,永远不要在脚本中对它们进行硬编码,即使它只是一个将所有其他设置作为全局变量或类似变量的快速脚本。相反,请尝试确保密码位于单独的文件中,该文件可以根据需要限制特定于操作系统的权限。
关于python - 避免以明文形式存储密码以通过 Python 进行 IMAP 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480260/