Java subethasmtp服务器未打印来自客户端的消息

Java subethasmtp服务器未打印来自客户端的消息,java,email,smtp,jakarta-mail,smtpclient,Java,Email,Smtp,Jakarta Mail,Smtpclient,当我运行客户端时,它应该向我的服务器发送一封电子邮件,然后我希望我的电子邮件服务器将电子邮件详细信息(到、从、端口、消息)打印到控制台。由于某种原因,在运行客户机之后,服务器上没有明显的变化 服务器 package example; import org.subethamail.smtp.server.SMTPServer; public class EmailServer { public static void main(String[] args) { MyM

当我运行客户端时,它应该向我的服务器发送一封电子邮件,然后我希望我的电子邮件服务器将电子邮件详细信息(到、从、端口、消息)打印到控制台。由于某种原因,在运行客户机之后,服务器上没有明显的变化

服务器

package example;

import org.subethamail.smtp.server.SMTPServer;

public class EmailServer {

    public static void main(String[] args) {
        MyMessageHandlerFactory myFactory = new MyMessageHandlerFactory();
        SMTPServer smtpServer = new SMTPServer(myFactory);
        smtpServer.setPort(25000);
        smtpServer.start();
    }
}
服务器输出

package example;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.subethamail.smtp.client.*;

public class EmailClient {

    public static void main(String[] args) {
        try {
            SMTPClient sc = new SMTPClient();
            sc.close();
            sc.connect("localhost", 25000);
            sc.sendReceive("test");
        } catch (IOException ex) {
            Logger.getLogger(EmailClient.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}
运行:[main]INFO org.subethamail.smtp.server.SMTPServer-smtp服务器 *:25000开始[org.subethamail.smtp.server.ServerThread*:25000]信息org.subethamail.smtp.server.ServerThread-smtp服务器*:25000 开始

客户端

package example;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.subethamail.smtp.client.*;

public class EmailClient {

    public static void main(String[] args) {
        try {
            SMTPClient sc = new SMTPClient();
            sc.close();
            sc.connect("localhost", 25000);
            sc.sendReceive("test");
        } catch (IOException ex) {
            Logger.getLogger(EmailClient.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}
客户端输出

package example;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.subethamail.smtp.client.*;

public class EmailClient {

    public static void main(String[] args) {
        try {
            SMTPClient sc = new SMTPClient();
            sc.close();
            sc.connect("localhost", 25000);
            sc.sendReceive("test");
        } catch (IOException ex) {
            Logger.getLogger(EmailClient.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}
运行:生成成功(总时间:0秒)

版本为3.1.7from


服务器需要MyMessageHandlerFactory,这是我从中复制的:

好的,让我们检查源代码(总是一个好主意),看看会发生什么

您通过发送“测试”

现在,考虑到这是一个新的SMTP会话(请参阅,了解您一直想知道但又不敢问这些事情的所有信息),并且“测试””在会话的这一点上不是有效的命令动词,您可能会看到
sendReceive()
返回的错误

但既然你忽略了从本该返回的

Response resp=SMTPClient.sendReceive()
你两个都错过了

  • resp.code
    (我确信是
    500-永久性否定完成回复/语法
    -参见上述RFC)和
  • resp.message
    描述无法完全执行命令的原因

这两个都是从.

Oh返回的,关于您的
IOException
try/catch,事务不会失败。相反,如果您选择处理问题,它会尽职尽责地返回足够的信息,以便您对问题进行分类。:-)所以,我对这个图书馆是全新的,以前从未接触过。为了让我的服务器打印出来自客户端的电子邮件,您能告诉我需要进行哪些基本代码级别的更改吗?只是跟进,您是否有机会查看我以前的评论?@ThreaT-您需要使用发送邮件所需的正确SMTP命令调用sendReceive,并且在每个步骤中,捕获sc.sendReceive返回的结果,以确保您的命令已被接受。对于典型的SMTP会话,您需要依次发送“HELO”、“MAIL FROM”、“RCPT to”和“DATA”命令。有关更多信息,请参阅。从我所看到的
sendReceive(String msg)
只有一个方法,在其他任何地方都不会过载。你能举一个例子,说明我将如何更改客户端,以便随时以代码格式将正确的数据发送到服务器吗?