如何 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);
...
我正在尝试使用 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);
...