java - 解释套接字响应的好方法

标签 java email sockets smtp

我正在尝试用 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作为参数后,服务器可能会给出响应。我可以获得对字符串的响应。现在,为了理解响应并知道下一步该做什么,我想通过对字符串进行标记来操作该字符串,然后逐个读取前 3 个字符来解释响应代码编号。这听起来可能没问题,因为响应代码只有 3 个字符。

但是如果说套接字现在连接到 POP3 并正在检索邮件,会发生什么情况。 react 将会非常巨大。是否有一种好的且不太复杂的方法来解释响应,然后将它们放入数据结构中?如果解析字符串是唯一的方法,那么我根据“文本模式”对大量字符串数据进行标记的想法是否有点太天真了?有没有更有效、更快的方法来做到这一点?

最佳答案

POP3 与 SMTP 有很大不同,其中它使用不同的响应语法。是的,SMTP 有三个字母代码,但我想补充一点,简单代码后面也可以有扩展状态代码。 POP3 没有错误代码,只有常见的负面消息。您可以逐行解析它们。当然,POP3 不会在消息的每一行前面加上状态代码。如果消息非常大,那么您必须在接收时将其写入文件。我推荐你看看Java邮件服务器的源码,Mireka http://code.google.com/p/mireka/和 Apache 詹姆斯http://james.apache.org/

关于java - 解释套接字响应的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738627/

相关文章:

java - 使用具有单个输入字符串/模式的算法生成多个唯一 ID

ruby - 如何使用 SparkPosts Ruby API 客户端设置reply_to/reply-to?

MySQL 连接器 C API 无法连接到 MySQL 服务器

ruby-on-rails - 是否有插件或 gem 可以帮助我在 rails 中执行 "invite a friend"功能?

php - 使用PHP socket发送和接收数据

php - Unix 套接字发送接收客户端到服务器大块数据错误

java - 每次我打开项目时,Android Studio 都会尝试下载一个版本的 gradle

java - 什么是 Java Akka 中的 Scala 伴随对象?

java - REST 调用的 XSS 预防

email - 在 Firefox Phone 邮件应用程序中接受邮件证书