:
は私がインジェクションを使用しました。
次のコードは、starttls
をIMAPに追加します。接続後にserver.starttls()
に電話するだけです。通常のIMAPポートに接続してください。
import imaplib,ssl
def IMAP_starttls(self, keyfile=None, certfile=None,cert_reqs=ssl.CERT_NONE,ca_certs=None):
if not 'STARTTLS' in self.capabilities:
raise self.error("STARTTLS extension not supported by server.")
(resp, reply) = self._simple_command("STARTTLS")
self.sock = ssl.wrap_socket(self.sock, keyfile, certfile,cert_reqs=cert_reqs,ca_certs=ca_certs)
self.file = self.sock.makefile('rb')
imaplib.IMAP4.__dict__['starttls']=IMAP_starttls
imaplib.Commands['STARTTLS']=('NONAUTH',)
PS:これをコメントとして追加したいと思いますが、コードは長い間コメントになりました。
ありがとうございました。私はPythonに慣れていないので、あなたの提案を正しく理解していることを確認するだけです。 imaplibのssl.wrap_socket()をオーバーライドして、 "cert_reqs"パラメータを設定できるようにしたい(たとえば、 "CERT_REQUIRED"に設定)、CAを含むファイルを指すように "ca_certs"を設定しますか?私が正しく理解していることを確認しても問題はありません:) – user788462
'cert_reqs'を指定するかどうかはわかりません(可能ですが、paramが微妙に異なる問題に対処しています) 。クライアント側に証明書を提供するようサーバーに要求し、証明書が有効であることを伝えます。間違いなく、これは良いことです。両側が同意すると確信していれば、もっと一般的に有用なものを考えているなら、この前提は失われるかもしれません。 – user590028
'self.certificate'のように見えるのは' self.certfile'に置き換えて動作させる必要があります。 – kasperd