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