Python SMTP.starttls 参数

3 投票
1 回答
1876 浏览
提问于 2025-04-17 19:22

我刚开始学习Python,最近在研究Python的鸭子类型,但遇到了一些困惑。

我发现Python的标准库里,很多API只说明了参数的名字,似乎给了我一些提示,但并没有告诉我应该传什么类型的东西。这让我只能靠直觉去判断。所以,当我把错误的对象传给函数时,就像在玩试错游戏一样。

举个例子,在Python的标准库smtplib里,我想用这个函数:

SMTP.starttls([keyfile[, certfile]])

但是我不知道应该传什么类型的对象给keyfile或certfile参数?我该怎么解决这个问题呢?

1 个回答

4

这可能只是对Python和相关文档不太熟悉,而不是鸭子类型的问题。

在你的例子中,你需要稍微遵循一下文档的说明。

SMTP.starttls()这个方法中,文档中提到

如果提供了keyfile和certfile,这些会被传递给socket模块的ssl()函数

如果你点击那个链接,你会看到:

keyfile和certfile参数指定了可选的文件,这些文件包含用于识别连接本地一方的证书。想了解证书是如何存储在certfile中的,可以查看证书的讨论。

补充:keyfile和certfile参数似乎是文件名(字符串)。如果你再点击证书的链接,你会看到这些文件应该是PEM格式的。

感谢J.F. Sebastian提供的提示。

撰写回答