如何 subclass SubethaSmtp SMTPClient class

How to subclass SubethaSmtp SMTPClient class

我正在尝试使用 SubethaSmtp 客户端包开发一个简单的 SMTP 客户端用于测试目的。我想使用 SMTPClient class 而不是 SmartClient class 以获得更多控制,但我无法弄清楚如何使用 SMTPClient 写入邮件数据,这是唯一暴露给 public 的 OutputStream或 external subclasses 是用于发送命令的,用于发送数据的(在发送 DATA 命令之后)仅暴露给同一包(SmartClient)中的 classes。 我在这里错过了什么吗?我想知道如何编写 SMARTClient 的直接子 class 来解决这个问题。

看起来你是对的,你不能简单地扩展 SMTPClient 并获得类似于 SmartClient 的访问权限,因为它们是同一个包 class。

此时您可以:

1) 从 https://github.com/voodoodyne/subethasmtp fork 你自己的应用程序版本,然后用它做任何你想做的事,或者

2) 一路走下去,实现你自己的 SMTPClient 版本,因为 SmartClient.dataWrite() 使用的受保护的包 SMTPClient.dotTerminatedOutput; 实际上只是像这样实例化

...
this.rawOutput = this.socket.getOutputStream();                 
this.dotTerminatedOutput = new DotTerminatedOutputStream(this.rawOutput);
...