我正在尝试使用套接字在Java中编写一个简单的邮件客户端。但我在想什么是处理服务器响应的最佳方法?假设我有一个简单的代码,如下所示:
smtpSock = new Socket(mailHost, SMTP_PORT);
inn = smtpSock.getInputStream();
outt = smtpSock.getOutputStream();
in = new BufferedReader(new InputStreamReader(inn));
out = new PrintWriter(new OutputStreamWriter(outt), true);
out.println("AUTH LOGIN " + user.getID());
String response = in.readLine();
//manipulate the response string to check if user ID exists on server
//if ID exists, proceed to password. Else, quit.
out.println("PASS " + user.getPassword());
response = in.readLine();
//manipulate the response string to check if auth success or not
在我发出AUTH LOGIN
命令并将用户ID作为参数后,服务器可能会给出响应。我可以得到一个String的响应。现在,为了理解响应并知道下一步该做什么,我想我会通过标记来操作字符串,然后逐个读取前3个字符来解释响应代码编号。这可能听起来不错,因为响应代码只有3个字符。
但是如果套接字现在连接到POP3并且正在检索邮件会发生什么。回应将是非常巨大的。是否有一个好的,不太复杂的方法来解释响应,然后将它们放入数据结构中?如果解析字符串是唯一的方法,我的想法是根据其“文本模式”标记大量字符串数据有点过于幼稚吗?有没有更有效,更快捷的方法呢?
答案 0 :(得分:1)
POP3与SMTP非常不同,其中使用不同的响应语法。 SMTP有三个字母代码,是的,但我想补充说,遵循简单的代码也可能有扩展的状态代码。 POP3没有错误代码,只有一个常见的否定消息。您可以逐行解析它们。 POP3不在消息的每一行之前,当然还有状态代码。如果消息非常大,那么您必须在将其写入文件时将其写入文件中。我建议你看一下Java邮件服务器的来源,Mireka http://code.google.com/p/mireka/和Apache James http://james.apache.org/