【发布时间】:2014-10-20 08:41:16
【问题描述】:
最近问过Twisted mail server with TLS - no portal? 看来我找错人了 - 所以现在问一个新的、修改过的问题似乎是恰当和恰当的。
因此,我正在尝试扩展位于http://twistedmatrix.com/documents/current/_downloads/emailserver.tac 的基本 SMTP 服务器示例以支持 SSL 连接。我可以按如下方式创建一个 ssl 上下文工厂(代码取自我之前的工作:
caCertFile = open("/opt/tesa/etc/certs/CA/cacert.pem","r")
certFile = open("/opt/tesa/etc/certs/server/server.crt","r")
keyFile = open("/opt/tesa/etc/certs/server/server.key","r")
caCertData = caCertFile.read()
pKeyData = keyFile.read()
certData = certFile.read()
caCert = ssl.Certificate.loadPEM(caCertData)
cert = load_certificate(FILETYPE_PEM, certData)
pKey = load_privatekey(FILETYPE_PEM, pKeyData)
sslCtxFactory = ssl.CertificateOptions(privateKey=pKey, certificate=cert, trustRoot=caCert)
所以现在我有了来自 emailserver.tac 的 SMTP 工厂,以及上面的 sslCtxFactory。在我的旧代码中,我创建了一个 ESMTP 类的对象,如下所示:
myESMTP = ESMTP(contextFactory=sslCtxFactory)
factory = protocol.Factory.forProtocol(lambda: mySMTP(contextFactory=sslCtxFactory))
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8001)
endpoint.listen(factory)
但由于此代码未使用门户等,因此 ESMTP 类定义中的某些方法/函数由于未定义各种属性(例如 self.delivery、self.portal)而失败。
所以我试图了解如何在 mailserver.tac 代码中实现我的 sslCtxFactory - 同时仍然按照 mailserver.tac 使用门户/领域,以确保扭曲的 ESMTP 类中的方法不会失败。
但是我怎样才能把这两个工厂“放在一起”呢?
谢谢
【问题讨论】: