This commit is contained in:
Brad Arant committed 2022-06-29 13:34:49 -07:00
1 parent 37b5a5bf4e
commit 6c844983d9
27 files changed
+230 -272

No files matched your search

+50 -44
View File
@@ -1,65 +1,71 @@
#include "__SMTP_DATA.h"
#include "SMTPSession.h"
#include "SMTPServer.h"
#include "Log.h"
#include <chrono>
#include <iomanip>
#define CRLF "\r\n"
namespace mail {
int __SMTP_DATA::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
switch(session.mode) {
int __SMTP_DATA::processCommand(coreutils::ZString &request, core::TCPSession &session) {
SMTPSession &s = dynamic_cast<SMTPSession &>(session);
SMTPServer &server = session.server;
switch(session.mode) {
case WAIT_FOR_DATA:
case WAIT_FOR_DATA:
switch(session.state) {
switch(session.state) {
case RCPT:
data << "354 Enter the mail message terminated by <CRLF>.<CRLF>" << CRLF;
session.mailData.str("");
session.mode = RECEIVE_DATA;
session.server.commands.grabInput(&session, *this);
case RCPT:
s.out << "354 Enter the mail message terminated by <CRLF>.<CRLF>" << CRLF;
s.mailData.str("");
s.mode = RECEIVE_DATA;
server.commands.grabInput(&session, *this);
// setTimer(120.0f);
break;
break;
case MAIL:
data << "503 Please use RCPT first" << CRLF;
break;
case MAIL:
s.out << "503 Please use RCPT first" << CRLF;
break;
default:
data << "503 Please use MAIL first" << CRLF;
break;
default:
s.out << "503 Please use MAIL first" << CRLF;
break;
}
break;
}
break;
case RECEIVE_DATA:
if(request.str() != ".")
session.mailData << request.str() << CRLF;
else {
session.mode = WAIT_FOR_DATA;
session.state = READY;
session.server.commands.clearGrab(&session);
if(request.str() != ".")
s.mailData << request.str() << CRLF;
else {
s.mode = WAIT_FOR_DATA;
s.state = READY;
server.commands.clearGrab(&session);
// if(filterMessage(session.mailData)) {
if(session.recipientList.size() > 0) {
if(session.mailData.str().size() > 0) {
std::string ID = queueMail(server, session.sender, session.recipientList, session.mailData);
if(ID != "") {
coreutils::Log(coreutils::LOG_INFO) << "Queued message " << ID << ".";
data << "250 OK Queued message " << ID << CRLF;
}
else
data << "550 Mail message too big" << CRLF;
} else
data << "550 Mail message was empty" << CRLF;
} else
data << "250 OK Queued message " << CRLF;
if(s.recipientList.size() > 0) {
if(s.mailData.str().size() > 0) {
std::string ID = queueMail(server, session.sender, session.recipientList, session.mailData);
if(ID != "") {
coreutils::Log(coreutils::LOG_INFO) << "Queued message " << ID << ".";
s.out << "250 OK Queued message " << ID << CRLF;
}
else
s.out << "550 Mail message too big" << CRLF;
} else
s.out << "550 Mail message was empty" << CRLF;
} else
s.out << "250 OK Queued message " << CRLF;
// } else
// data << "550 Message is probably spam" << CRLF;
}
break;
}
return 1;
}
break;
}
return 1;
}
std::string __SMTP_DATA::generateMailFileName() {
@@ -76,8 +82,8 @@ namespace mail {
mailFile.write(mailData.str());
for(std::string recipient: recipientList) {
std::string newName = fileName + recipient;
link(fileName.c_str(), newName.c_str());
std::string newName = fileName + recipient;
link(fileName.c_str(), newName.c_str());
}
unlink(fileName.c_str());