#include "__POP3_LIST.h" #include "POP3Server.h" namespace mail { int __POP3_LIST::processCommand(coreutils::ZString request, POP3Session &session, POP3Server &server) { if (!session.authenticated) { session.out << "-ERR Not authenticated" << CRLF; return 1; } request.skipWhitespace(); coreutils::ZString numArg = request.getTokenExclude(" "); if (numArg.getLength() > 0) { int msgNum = numArg.asInteger(); MailFolder::Message *message = pop3FindMessage(session, msgNum); if (!message) { session.out << "-ERR No such message" << CRLF; return 1; } session.out << "+OK " << msgNum << " " << (int)message->size << CRLF; return 1; } const auto &messages = session.mailbox.messages(); int count = 0; long totalSize = 0; for (size_t i = 0; i < messages.size(); ++i) { if (session.deletedMarks.count((int)(i + 1)) == 0) { ++count; totalSize += (long)messages[i].size; } } session.out << "+OK " << count << " messages (" << totalSize << " octets)" << CRLF; for (size_t i = 0; i < messages.size(); ++i) if (session.deletedMarks.count((int)(i + 1)) == 0) session.out << (i + 1) << " " << (int)messages[i].size << CRLF; session.out << "." << CRLF; return 1; } }