based on reworked servercore.
This commit is contained in:
parent
50eb707f10
commit
db3e82a18e
127
BMAMail.project
127
BMAMail.project
@ -1,127 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<CodeLite_Project Name="BMAMail" Version="10.0.0" InternalType="Console">
|
|
||||||
<Description/>
|
|
||||||
<Dependencies/>
|
|
||||||
<VirtualDirectory Name="src">
|
|
||||||
<File Name="main.cpp"/>
|
|
||||||
<File Name="./BMAIMAPServer.h"/>
|
|
||||||
<File Name="./BMAIMAPSession.h"/>
|
|
||||||
<File Name="./BMAPOP3Server.h"/>
|
|
||||||
<File Name="./BMAPOP3Session.h"/>
|
|
||||||
<File Name="./BMASMTPServer.h"/>
|
|
||||||
<File Name="./BMASMTPSession.h"/>
|
|
||||||
<File Name="__SMTP_HELO.h"/>
|
|
||||||
<File Name="__SMTP_EHLO.h"/>
|
|
||||||
<File Name="__SMTP_AUTH.h"/>
|
|
||||||
<File Name="__SMTP_MAIL.h"/>
|
|
||||||
<File Name="__SMTP_RCPT.h"/>
|
|
||||||
<File Name="__SMTP_DATA.h"/>
|
|
||||||
<File Name="__SMTP_RSET.h"/>
|
|
||||||
<File Name="__SMTP_VRFY.h"/>
|
|
||||||
<File Name="__SMTP_NOOP.h"/>
|
|
||||||
<File Name="__SMTP_QUIT.h"/>
|
|
||||||
<File Name="SMTPService.h"/>
|
|
||||||
<File Name="SMTPSession.h"/>
|
|
||||||
<File Name="POP3Service.h"/>
|
|
||||||
<File Name="IMAPService.h"/>
|
|
||||||
</VirtualDirectory>
|
|
||||||
<Dependencies Name="Debug"/>
|
|
||||||
<Dependencies Name="Release"/>
|
|
||||||
<Settings Type="Executable">
|
|
||||||
<GlobalSettings>
|
|
||||||
<Compiler Options="" C_Options="" Assembler="">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="">
|
|
||||||
<LibraryPath Value="."/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options=""/>
|
|
||||||
</GlobalSettings>
|
|
||||||
<Configuration Name="Debug" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-g;-O0;-Wall" C_Options="-g;-O0;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
<IncludePath Value="../ServerCore"/>
|
|
||||||
<IncludePath Value="../BMAMySQL"/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="" Required="yes">
|
|
||||||
<LibraryPath Value="../Debug/ServerCore"/>
|
|
||||||
<LibraryPath Value="../Debug/BMAMySQL"/>
|
|
||||||
<Library Value="ServerCore"/>
|
|
||||||
<Library Value="BMAMySQL"/>
|
|
||||||
</Linker>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Debug" Command="./$(ProjectName)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(IntermediateDirectory)" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="no">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand/>
|
|
||||||
<BuildCommand/>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName>None</ThirdPartyToolName>
|
|
||||||
<WorkingDirectory/>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="no" EnableCpp14="no">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths/>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration Name="Release" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append">
|
|
||||||
<Compiler Options="-O2;-Wall" C_Options="-O2;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0">
|
|
||||||
<IncludePath Value="."/>
|
|
||||||
<Preprocessor Value="NDEBUG"/>
|
|
||||||
</Compiler>
|
|
||||||
<Linker Options="" Required="yes"/>
|
|
||||||
<ResourceCompiler Options="" Required="no"/>
|
|
||||||
<General OutputFile="$(IntermediateDirectory)/$(ProjectName)" IntermediateDirectory="./Release" Command="./$(ProjectName)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(IntermediateDirectory)" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/>
|
|
||||||
<BuildSystem Name="Default"/>
|
|
||||||
<Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">
|
|
||||||
<![CDATA[]]>
|
|
||||||
</Environment>
|
|
||||||
<Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no">
|
|
||||||
<DebuggerSearchPaths/>
|
|
||||||
<PostConnectCommands/>
|
|
||||||
<StartupCommands/>
|
|
||||||
</Debugger>
|
|
||||||
<PreBuild/>
|
|
||||||
<PostBuild/>
|
|
||||||
<CustomBuild Enabled="no">
|
|
||||||
<RebuildCommand/>
|
|
||||||
<CleanCommand/>
|
|
||||||
<BuildCommand/>
|
|
||||||
<PreprocessFileCommand/>
|
|
||||||
<SingleFileCommand/>
|
|
||||||
<MakefileGenerationCommand/>
|
|
||||||
<ThirdPartyToolName>None</ThirdPartyToolName>
|
|
||||||
<WorkingDirectory/>
|
|
||||||
</CustomBuild>
|
|
||||||
<AdditionalRules>
|
|
||||||
<CustomPostBuild/>
|
|
||||||
<CustomPreBuild/>
|
|
||||||
</AdditionalRules>
|
|
||||||
<Completion EnableCpp11="no" EnableCpp14="no">
|
|
||||||
<ClangCmpFlagsC/>
|
|
||||||
<ClangCmpFlags/>
|
|
||||||
<ClangPP/>
|
|
||||||
<SearchPaths/>
|
|
||||||
</Completion>
|
|
||||||
</Configuration>
|
|
||||||
</Settings>
|
|
||||||
</CodeLite_Project>
|
|
@ -1 +0,0 @@
|
|||||||
./Debug/main.cpp.o
|
|
24
IMAPCommand.h
Normal file
24
IMAPCommand.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef __IMAPCommand_h__
|
||||||
|
# define __IMAPCommand_h__
|
||||||
|
|
||||||
|
# include "Command.h"
|
||||||
|
# include "TCPSession.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class IMAPCommand : public core::Command {
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override {
|
||||||
|
coreutils::PString parser(request);
|
||||||
|
return processCommand(parser, (IMAPSession &)*session, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
106
IMAPService.h
106
IMAPService.h
@ -1,48 +1,88 @@
|
|||||||
#ifndef __IMAPService_h__
|
#ifndef __IMAPService_h__
|
||||||
#define __IMAPService_h__
|
#define __IMAPService_h__
|
||||||
|
|
||||||
#include "Service.h"
|
#include "TCPServer.h"
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "__SMTP_AUTH.h"
|
#include "__IMAP_APPEND.h"
|
||||||
#include "__SMTP_DATA.h"
|
#include "__IMAP_AUTHENTICATE.h"
|
||||||
#include "__SMTP_EHLO.h"
|
#include "__IMAP_CHECK.h"
|
||||||
#include "__SMTP_HELO.h"
|
#include "__IMAP_CLOSE.h"
|
||||||
#include "__SMTP_MAIL.h"
|
#include "__IMAP_COPY.h"
|
||||||
#include "__SMTP_NOOP.h"
|
#include "__IMAP_CREATE.h"
|
||||||
#include "__SMTP_QUIT.h"
|
#include "__IMAP_DELETE.h"
|
||||||
#include "__SMTP_RCPT.h"
|
#include "__IMAP_EXAMINE.h"
|
||||||
#include "__SMTP_RSET.h"
|
#include "__IMAP_EXPUNGE.h"
|
||||||
#include "__SMTP_VRFY.h"
|
#include "__IMAP_FETCH.h"
|
||||||
|
#include "__IMAP_LIST.h"
|
||||||
|
#include "__IMAP_LOGIN.h"
|
||||||
|
#include "__IMAP_LSUB.h"
|
||||||
|
#include "__IMAP_RENAME.h"
|
||||||
|
#include "__IMAP_SEARCH.h"
|
||||||
|
#include "__IMAP_SELECT.h"
|
||||||
|
#include "__IMAP_STARTTLS.h"
|
||||||
|
#include "__IMAP_STATUS.h"
|
||||||
|
#include "__IMAP_STORE.h"
|
||||||
|
#include "__IMAP_SUBSCRIBE.h"
|
||||||
|
#include "__IMAP_UID.h"
|
||||||
|
#include "__IMAP_UNSUBSCRIBE.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class IMAPService : public core::Service {
|
class IMAPService : public core::TCPServer {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IMAPService() {
|
IMAPService(core::EPoll &epoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||||
commands.add(_smtp_auth, "AUTH");
|
: TCPServer(epoll, ipAddress), mailFileSystem(mailPath), hostName(hostName) {
|
||||||
commands.add(_smtp_data, "DATA");
|
commands.add(_imap_append, "APPEND");
|
||||||
commands.add(_smtp_ehlo, "EHLO");
|
commands.add(_imap_authenticate, "AUTHENTCATE");
|
||||||
commands.add(_smtp_helo, "HELO");
|
commands.add(_imap_check, "CHECK");
|
||||||
commands.add(_smtp_mail, "MAIL");
|
commands.add(_imap_close, "CLOSE");
|
||||||
commands.add(_smtp_noop, "NOOP");
|
commands.add(_imap_copy, "COPY");
|
||||||
commands.add(_smtp_quit, "QUIT");
|
commands.add(_imap_create, "CREATE");
|
||||||
commands.add(_smtp_rcpt, "RCPT");
|
commands.add(_imap_delete, "DELETE");
|
||||||
commands.add(_smtp_rset, "RSET");
|
commands.add(_imap_examine, "EXAAMINE");
|
||||||
commands.add(_smtp_vrfy, "VRFY");
|
commands.add(_imap_expunge, "EXPUNGE");
|
||||||
|
commands.add(_imap_fetch, "FETCH");
|
||||||
|
commands.add(_imap_list, "LIST");
|
||||||
|
commands.add(_imap_login, "LOGIN");
|
||||||
|
commands.add(_imap_lsub, "LSUB");
|
||||||
|
commands.add(_imap_rename, "RENAME");
|
||||||
|
commands.add(_imap_search, "SEARCH");
|
||||||
|
commands.add(_imap_select, "SELECT");
|
||||||
|
commands.add(_imap_starttls, "STARTTLS");
|
||||||
|
commands.add(_imap_status, "STATUS");
|
||||||
|
commands.add(_imap_store, "STORE");
|
||||||
|
commands.add(_imap_subscribe, "SUBSCRIBE");
|
||||||
|
commands.add(_imap_uid, "UID");
|
||||||
|
commands.add(_imap_unsubscribe, "UNSUBSCRIBE");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MailFileSystem mailFileSystem;
|
||||||
|
std::string hostName;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
__SMTP_AUTH _smtp_auth;
|
__IMAP_APPEND _imap_append;
|
||||||
__SMTP_DATA _smtp_data;
|
__IMAP_AUTHENTICATE _imap_authenticate;
|
||||||
__SMTP_EHLO _smtp_ehlo;
|
__IMAP_CHECK _imap_check;
|
||||||
__SMTP_HELO _smtp_helo;
|
__IMAP_CLOSE _imap_close;
|
||||||
__SMTP_MAIL _smtp_mail;
|
__IMAP_COPY _imap_copy;
|
||||||
__SMTP_NOOP _smtp_noop;
|
__IMAP_CREATE _imap_create;
|
||||||
__SMTP_QUIT _smtp_quit;
|
__IMAP_DELETE _imap_delete;
|
||||||
__SMTP_RCPT _smtp_rcpt;
|
__IMAP_EXAMINE _imap_examine;
|
||||||
__SMTP_RSET _smtp_rset;
|
__IMAP_EXPUNGE _imap_expunge;
|
||||||
__SMTP_VRFY _smtp_vrfy;
|
__IMAP_FETCH _imap_fetch;
|
||||||
|
__IMAP_LIST _imap_list;
|
||||||
|
__IMAP_LOGIN _imap_login;
|
||||||
|
__IMAP_LSUB _imap_lsub;
|
||||||
|
__IMAP_RENAME _imap_rename;
|
||||||
|
__IMAP_SEARCH _imap_search;
|
||||||
|
__IMAP_SELECT _imap_select;
|
||||||
|
__IMAP_STARTTLS _imap_starttls;
|
||||||
|
__IMAP_STATUS _imap_status;
|
||||||
|
__IMAP_STORE _imap_store;
|
||||||
|
__IMAP_SUBSCRIBE _imap_subscribe;
|
||||||
|
__IMAP_UID _imap_uid;
|
||||||
|
__IMAP_UNSUBSCRIBE _imap_unsubscribe;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
21
IMAPSession.h
Normal file
21
IMAPSession.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef __IMAPSession_h__
|
||||||
|
#define __IMAPSession_h__
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class IMAPSession : public core::TCPSession {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
std::string clientDomainName;
|
||||||
|
std::string userName;
|
||||||
|
std::string password;
|
||||||
|
AuthState authstate = USER_UNKNOWN;
|
||||||
|
bool relay = false;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
58
MailDelivery.cpp2
Normal file
58
MailDelivery.cpp2
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#include "MailDelivery.h"
|
||||||
|
#include "Directory.h"
|
||||||
|
#include "time.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
MailDelivery::MailDelivery(core::EPoll &ePoll, std::string mailQueue) : INotify(ePoll) {
|
||||||
|
addWatch(mailQueue);
|
||||||
|
startDelivery(mailQueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MailDelivery::onDataReceived(std::string data) {
|
||||||
|
|
||||||
|
// TODO: Receive file and parse email name.
|
||||||
|
|
||||||
|
// TODO: Compare time to named time and if time has passed then send the message
|
||||||
|
// TODO: If email is a local mailbox then make a hard link to the mail message in the appropriate Inbox. Remove entry from queue.
|
||||||
|
// TODO: If email is a remote mailbox then perform remote send algorithm.
|
||||||
|
// TODO: If error sending on remote then calculate next send attempt time and rename file to reflect new time.
|
||||||
|
// TODO: If date is on the future then set a timer to that time and wait.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int MailDelivery::startDelivery(std::string mailQueue) {
|
||||||
|
coreutils::Directory mailDir(mailQueue);
|
||||||
|
std::string entryName = mailDir.get().getName();
|
||||||
|
std::string now = getMailFileName();
|
||||||
|
// if(now > entryName) {
|
||||||
|
// std::string recipientName = coreutils::File(); // read recipient name
|
||||||
|
// if(isLocal(recipientName)) {
|
||||||
|
// link(existing, new);
|
||||||
|
// } else {
|
||||||
|
// open connect socket to mx.domain
|
||||||
|
// if error
|
||||||
|
// calculate future date name and rename mail data
|
||||||
|
// else
|
||||||
|
// write smtp data on socket 25
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
int MailDelivery::deliver() {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string MailDelivery::getMailFileName() {
|
||||||
|
char fileName[64];
|
||||||
|
time_t gtime;
|
||||||
|
time(>ime);
|
||||||
|
struct tm *timex;
|
||||||
|
timex = gmtime(>ime);
|
||||||
|
strftime(fileName, 64, "%Y%m%d%H%M%S", gmtime(>ime));
|
||||||
|
return std::string(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
MailDelivery.h2
Normal file
24
MailDelivery.h2
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef __MailDelivery_h__
|
||||||
|
# define __MailDelivery_h__
|
||||||
|
|
||||||
|
# include "INotify.h"
|
||||||
|
# include "EPoll.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class MailDelivery : core::INotify {
|
||||||
|
|
||||||
|
public:
|
||||||
|
MailDelivery(core::EPoll &ePoll, std::string mailQueue);
|
||||||
|
|
||||||
|
void onDataReceived(std::string data) override;
|
||||||
|
|
||||||
|
int startDelivery(std::string mailQueue);
|
||||||
|
int deliver();
|
||||||
|
std::string getMailFileName();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
52
MailFileSystem.h
Normal file
52
MailFileSystem.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#ifndef __MailFileSystem_h__
|
||||||
|
# define __MailFileSystem_h__
|
||||||
|
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/stat.h>
|
||||||
|
# include <unistd.h>
|
||||||
|
# include "EPoll.h"
|
||||||
|
# include "INotify.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class MailFileSystem {
|
||||||
|
|
||||||
|
public:
|
||||||
|
MailFileSystem(std::string mailPath) : mailPath(mailPath) {}
|
||||||
|
|
||||||
|
bool ifMailBoxExists(std::string mailbox) {
|
||||||
|
if(stat(getMailBoxPath(mailbox).c_str(), &statbuf) != -1)
|
||||||
|
if(S_ISDIR(statbuf.st_mode))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ifAliasExists(std::string alias) {
|
||||||
|
if(stat(getMailBoxPath(alias).c_str(), &statbuf) != -1)
|
||||||
|
if(S_ISREG(statbuf.st_mode))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getMailBoxPath(std::string mailbox) {
|
||||||
|
coreutils::PString email(mailbox);
|
||||||
|
email.split("@");
|
||||||
|
std::string path = mailPath + "/" + email[1].str() + "/" + email[0].str();
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> getAliasMailboxes(std::string alias);
|
||||||
|
|
||||||
|
std::string getMailPath() {
|
||||||
|
return mailPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string mailPath;
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
24
POP3Command.h
Normal file
24
POP3Command.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef __POP3Command_h__
|
||||||
|
# define __POP3Command_h__
|
||||||
|
|
||||||
|
# include "Command.h"
|
||||||
|
# include "TCPSession.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class POP3Command : public core::Command {
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override {
|
||||||
|
coreutils::PString parser(request);
|
||||||
|
return processCommand(parser, (POP3Session &)*session, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,48 +1,58 @@
|
|||||||
#ifndef __POP3Service_h__
|
#ifndef __POP3Service_h__
|
||||||
#define __POP3Service_h__
|
#define __POP3Service_h__
|
||||||
|
|
||||||
#include "Service.h"
|
#include "TCPServer.h"
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "__SMTP_AUTH.h"
|
#include "__POP3_DELE.h"
|
||||||
#include "__SMTP_DATA.h"
|
#include "__POP3_LAST.h"
|
||||||
#include "__SMTP_EHLO.h"
|
#include "__POP3_LIST.h"
|
||||||
#include "__SMTP_HELO.h"
|
#include "__POP3_NOOP.h"
|
||||||
#include "__SMTP_MAIL.h"
|
#include "__POP3_PASS.h"
|
||||||
#include "__SMTP_NOOP.h"
|
#include "__POP3_QUIT.h"
|
||||||
#include "__SMTP_QUIT.h"
|
#include "__POP3_RETR.h"
|
||||||
#include "__SMTP_RCPT.h"
|
#include "__POP3_RPOP.h"
|
||||||
#include "__SMTP_RSET.h"
|
#include "__POP3_RSET.h"
|
||||||
#include "__SMTP_VRFY.h"
|
#include "__POP3_STAT.h"
|
||||||
|
#include "__POP3_TOP.h"
|
||||||
|
#include "__POP3_USER.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class POP3Service : public core::Service {
|
class POP3Service : public core::TCPServer {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
POP3Service() {
|
POP3Service(core::EPoll &epoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||||
commands.add(_smtp_auth, "AUTH");
|
: TCPServer(epoll, ipAddress), mailFileSystem(mailPath), hostName(hostName) {
|
||||||
commands.add(_smtp_data, "DATA");
|
commands.add(_pop3_dele, "DELE");
|
||||||
commands.add(_smtp_ehlo, "EHLO");
|
commands.add(_pop3_last, "LAST");
|
||||||
commands.add(_smtp_helo, "HELO");
|
commands.add(_pop3_list, "LIST");
|
||||||
commands.add(_smtp_mail, "MAIL");
|
commands.add(_pop3_noop, "NOOP");
|
||||||
commands.add(_smtp_noop, "NOOP");
|
commands.add(_pop3_pass, "PASS");
|
||||||
commands.add(_smtp_quit, "QUIT");
|
commands.add(_pop3_quit, "QUIT");
|
||||||
commands.add(_smtp_rcpt, "RCPT");
|
commands.add(_pop3_retr, "RETR");
|
||||||
commands.add(_smtp_rset, "RSET");
|
commands.add(_pop3_rpop, "RPOP");
|
||||||
commands.add(_smtp_vrfy, "VRFY");
|
commands.add(_pop3_rset, "RSET");
|
||||||
|
commands.add(_pop3_stat, "STAT");
|
||||||
|
commands.add(_pop3_top, "TOP");
|
||||||
|
commands.add(_pop3_user, "USER");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MailFileSystem mailFileSystem;
|
||||||
|
std::string hostName;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
__SMTP_AUTH _smtp_auth;
|
__POP3_DELE _pop3_dele;
|
||||||
__SMTP_DATA _smtp_data;
|
__POP3_LAST _pop3_last;
|
||||||
__SMTP_EHLO _smtp_ehlo;
|
__POP3_LIST _pop3_list;
|
||||||
__SMTP_HELO _smtp_helo;
|
__POP3_NOOP _pop3_noop;
|
||||||
__SMTP_MAIL _smtp_mail;
|
__POP3_PASS _pop3_pass;
|
||||||
__SMTP_NOOP _smtp_noop;
|
__POP3_QUIT _pop3_quit;
|
||||||
__SMTP_QUIT _smtp_quit;
|
__POP3_RETR _pop3_retr;
|
||||||
__SMTP_RCPT _smtp_rcpt;
|
__POP3_RPOP _pop3_rpop;
|
||||||
__SMTP_RSET _smtp_rset;
|
__POP3_RSET _pop3_rset;
|
||||||
__SMTP_VRFY _smtp_vrfy;
|
__POP3_STAT _pop3_stat;
|
||||||
|
__POP3_TOP _pop3_top;
|
||||||
|
__POP3_USER _pop3_user;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
20
POP3Session.h
Normal file
20
POP3Session.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef __POP3Session_h__
|
||||||
|
#define __POP3Session_h__
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class POP3Session : public core::TCPSession {
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::string clientDomainName;
|
||||||
|
std::string userName;
|
||||||
|
std::string password;
|
||||||
|
AuthState authstate = USER_UNKNOWN;
|
||||||
|
bool relay = false;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
15
SMTPCommand.cpp
Normal file
15
SMTPCommand.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# include "Command.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
# include "SMTPServer.h"
|
||||||
|
# include "Log.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int SMTPCommand::processCommand(std::string request, core::TCPSession *session, std::stringstream &data) {
|
||||||
|
coreutils::PString parser(request);
|
||||||
|
parser.split(" ");
|
||||||
|
return processCommand(parser, (SMTPSession &)*session, (SMTPServer &)session->server, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
21
SMTPCommand.h
Normal file
21
SMTPCommand.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef __SMTPCommand_h__
|
||||||
|
# define __SMTPCommand_h__
|
||||||
|
|
||||||
|
# include "Command.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class SMTPServer;
|
||||||
|
|
||||||
|
class SMTPCommand : public core::Command {
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override;
|
||||||
|
virtual int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
91
SMTPServer.h
Normal file
91
SMTPServer.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#ifndef __SMTPServer_h__
|
||||||
|
# define __SMTPServer_h__
|
||||||
|
|
||||||
|
# include <string>
|
||||||
|
# include "EPoll.h"
|
||||||
|
# include "TCPServer.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
# include "MailFileSystem.h"
|
||||||
|
# include "__SMTP_AUTH.h"
|
||||||
|
# include "__SMTP_DATA.h"
|
||||||
|
# include "__SMTP_EHLO.h"
|
||||||
|
# include "__SMTP_HELO.h"
|
||||||
|
# include "__SMTP_MAIL.h"
|
||||||
|
# include "__SMTP_NOOP.h"
|
||||||
|
# include "__SMTP_QUIT.h"
|
||||||
|
# include "__SMTP_RCPT.h"
|
||||||
|
# include "__SMTP_RSET.h"
|
||||||
|
# include "__SMTP_VRFY.h"
|
||||||
|
# include "INotify.h"
|
||||||
|
# include "Log.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class SMTPServer : public core::TCPServer, public core::INotify {
|
||||||
|
|
||||||
|
public:
|
||||||
|
SMTPServer(core::EPoll &ePoll, std::string hostName, std::string mailPath, core::IPAddress ipAddress)
|
||||||
|
: core::TCPServer(ePoll, ipAddress, "SMTP Server"), core::INotify(ePoll), hostName(hostName), mailFileSystem(mailPath) {
|
||||||
|
this->mailPath = mailPath;
|
||||||
|
commands.add(_smtp_auth, "AUTH");
|
||||||
|
commands.add(_smtp_data, "DATA");
|
||||||
|
commands.add(_smtp_ehlo, "EHLO");
|
||||||
|
commands.add(_smtp_helo, "HELO");
|
||||||
|
commands.add(_smtp_mail, "MAIL");
|
||||||
|
commands.add(_smtp_noop, "NOOP");
|
||||||
|
commands.add(_smtp_quit, "QUIT");
|
||||||
|
commands.add(_smtp_rcpt, "RCPT");
|
||||||
|
commands.add(_smtp_rset, "RSET");
|
||||||
|
commands.add(_smtp_vrfy, "VRFY");
|
||||||
|
processExisting();
|
||||||
|
wd = addWatch(mailPath + "/.queue/");
|
||||||
|
}
|
||||||
|
|
||||||
|
MailFileSystem mailFileSystem;
|
||||||
|
std::string hostName;
|
||||||
|
std::string mailPath;
|
||||||
|
|
||||||
|
SMTPSession * getSocketAccept(core::EPoll &ePoll) override {
|
||||||
|
return new SMTPSession(ePoll, *this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sessionErrorHandler(std::string errorString, std::stringstream &out) {
|
||||||
|
out << "252 " << errorString << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void inCreate(std::string name) {
|
||||||
|
int pos = name.find(".") + 10;
|
||||||
|
std::string mail = name.substr(0, pos);
|
||||||
|
std::string recipient = name.substr(pos);
|
||||||
|
if(recipient != "") {
|
||||||
|
std::string fileName = mailPath + "/.queue/" + name;
|
||||||
|
std::string path = mailFileSystem.getMailBoxPath(recipient) + "/Inbox/" + mail;
|
||||||
|
int rc = link(fileName.c_str(), path.c_str());
|
||||||
|
rc = unlink(fileName.c_str());
|
||||||
|
coreutils::Log(coreutils::LOG_INFO) << "Message " << mail << " delivered to " << recipient << ".";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
__SMTP_AUTH _smtp_auth;
|
||||||
|
__SMTP_DATA _smtp_data;
|
||||||
|
__SMTP_EHLO _smtp_ehlo;
|
||||||
|
__SMTP_HELO _smtp_helo;
|
||||||
|
__SMTP_MAIL _smtp_mail;
|
||||||
|
__SMTP_NOOP _smtp_noop;
|
||||||
|
__SMTP_QUIT _smtp_quit;
|
||||||
|
__SMTP_RCPT _smtp_rcpt;
|
||||||
|
__SMTP_RSET _smtp_rset;
|
||||||
|
__SMTP_VRFY _smtp_vrfy;
|
||||||
|
int wd;
|
||||||
|
|
||||||
|
void processExisting() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,51 +0,0 @@
|
|||||||
#ifndef __SMTPService_h__
|
|
||||||
#define __SMTPService_h__
|
|
||||||
|
|
||||||
#include "Service.h"
|
|
||||||
#include "Exception.h"
|
|
||||||
#include "__SMTP_AUTH.h"
|
|
||||||
#include "__SMTP_DATA.h"
|
|
||||||
#include "__SMTP_EHLO.h"
|
|
||||||
#include "__SMTP_HELO.h"
|
|
||||||
#include "__SMTP_MAIL.h"
|
|
||||||
#include "__SMTP_NOOP.h"
|
|
||||||
#include "__SMTP_QUIT.h"
|
|
||||||
#include "__SMTP_RCPT.h"
|
|
||||||
#include "__SMTP_RSET.h"
|
|
||||||
#include "__SMTP_VRFY.h"
|
|
||||||
|
|
||||||
namespace mail {
|
|
||||||
|
|
||||||
class SMTPService : public core::Service {
|
|
||||||
|
|
||||||
public:
|
|
||||||
SMTPService() {
|
|
||||||
commands.add(_smtp_auth, "AUTH");
|
|
||||||
commands.add(_smtp_data, "DATA");
|
|
||||||
commands.add(_smtp_ehlo, "EHLO");
|
|
||||||
commands.add(_smtp_helo, "HELO");
|
|
||||||
commands.add(_smtp_mail, "MAIL");
|
|
||||||
commands.add(_smtp_noop, "NOOP");
|
|
||||||
commands.add(_smtp_quit, "QUIT");
|
|
||||||
commands.add(_smtp_rcpt, "RCPT");
|
|
||||||
commands.add(_smtp_rset, "RSET");
|
|
||||||
commands.add(_smtp_vrfy, "VRFY");
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
__SMTP_AUTH _smtp_auth;
|
|
||||||
__SMTP_DATA _smtp_data;
|
|
||||||
__SMTP_EHLO _smtp_ehlo;
|
|
||||||
__SMTP_HELO _smtp_helo;
|
|
||||||
__SMTP_MAIL _smtp_mail;
|
|
||||||
__SMTP_NOOP _smtp_noop;
|
|
||||||
__SMTP_QUIT _smtp_quit;
|
|
||||||
__SMTP_RCPT _smtp_rcpt;
|
|
||||||
__SMTP_RSET _smtp_rset;
|
|
||||||
__SMTP_VRFY _smtp_vrfy;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,14 +1,37 @@
|
|||||||
#ifndef __SMTPSession_h__
|
#ifndef __SMTPSession_h__
|
||||||
#define __SMTPSession_h__
|
# define __SMTPSession_h__
|
||||||
|
|
||||||
#include "includes"
|
# include "TCPSession.h"
|
||||||
|
# include "TCPServer.h"
|
||||||
|
|
||||||
|
# define CRLF "\r\n"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class SMTPSession : public core::Session {
|
enum State {CONNECT, READY, MAIL, RCPT, DATA};
|
||||||
|
enum AuthState {USER_UNKNOWN, USER_QUERY, USER_SECRET_QUERY, USER_KNOWN};
|
||||||
|
enum Mode {WAIT_FOR_DATA, RECEIVE_DATA};
|
||||||
|
|
||||||
|
class SMTPSession : public core::TCPSession {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::string state;
|
SMTPSession(core::EPoll &ePoll, core::TCPServer &server)
|
||||||
|
: TCPSession(ePoll, server, "SMTP Client Session") {}
|
||||||
|
|
||||||
|
void onConnected(std::stringstream &out) {
|
||||||
|
out << "220 localhost BMAMail" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string clientDomainName;
|
||||||
|
std::string userName;
|
||||||
|
std::string password;
|
||||||
|
std::stringstream mailData;
|
||||||
|
State state = CONNECT;
|
||||||
|
AuthState authState = USER_UNKNOWN;
|
||||||
|
Mode mode = WAIT_FOR_DATA;
|
||||||
|
bool relay = false;
|
||||||
|
std::string sender;
|
||||||
|
std::vector<std::string> recipientList;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
19
__IMAP_APPEND.h
Normal file
19
__IMAP_APPEND.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_APPEND_h__
|
||||||
|
# define ____IMAP_APPEND_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_APPEND : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_AUTHENTICATE.h
Normal file
19
__IMAP_AUTHENTICATE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_AUTHENTICATE_h__
|
||||||
|
# define ____IMAP_AUTHENTICATE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_AUTHENTICATE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_CHECK.h
Normal file
19
__IMAP_CHECK.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_CHECK_h__
|
||||||
|
# define ____IMAP_CHECK_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_CHECK : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_CLOSE.h
Normal file
19
__IMAP_CLOSE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_CLOSE_h__
|
||||||
|
# define ____IMAP_CLOSE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_CLOSE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_COPY.h
Normal file
19
__IMAP_COPY.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_COPY_h__
|
||||||
|
# define ____IMAP_COPY_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_COPY : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_CREATE.h
Normal file
19
__IMAP_CREATE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_CREATE_h__
|
||||||
|
# define ____IMAP_CREATE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_CREATE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_DELETE.h
Normal file
19
__IMAP_DELETE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_DELETE_h__
|
||||||
|
# define ____IMAP_DELETE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_DELETE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_EXAMINE.h
Normal file
19
__IMAP_EXAMINE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_EXAMINE_h__
|
||||||
|
# define ____IMAP_EXAMINE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_EXAMINE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_EXPUNGE.h
Normal file
19
__IMAP_EXPUNGE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_EXPUNGE_h__
|
||||||
|
# define ____IMAP_EXPUNGE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_EXPUNGE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_FETCH.h
Normal file
19
__IMAP_FETCH.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_FETCH_h__
|
||||||
|
# define ____IMAP_FETCH_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_FETCH : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_LIST.h
Normal file
19
__IMAP_LIST.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_LIST_h__
|
||||||
|
# define ____IMAP_LIST_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_LIST : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_LOGIN.h
Normal file
19
__IMAP_LOGIN.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_LOGIN_h__
|
||||||
|
# define ____IMAP_LOGIN_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_LOGIN : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_LSUB.h
Normal file
19
__IMAP_LSUB.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_LSUB_h__
|
||||||
|
# define ____IMAP_LSUB_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_LSUB : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_RENAME.h
Normal file
19
__IMAP_RENAME.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_RENAME_h__
|
||||||
|
# define ____IMAP_RENAME_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_RENAME : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_SEARCH.h
Normal file
19
__IMAP_SEARCH.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_SEARCH_h__
|
||||||
|
# define ____IMAP_SEARCH_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_SEARCH : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_SELECT.h
Normal file
19
__IMAP_SELECT.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_SELECT_h__
|
||||||
|
# define ____IMAP_SELECT_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_SELECT : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_STARTTLS.h
Normal file
19
__IMAP_STARTTLS.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_STARTTLS_h__
|
||||||
|
# define ____IMAP_STARTTLS_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_STARTTLS : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_STATUS.h
Normal file
19
__IMAP_STATUS.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_STATUS_h__
|
||||||
|
# define ____IMAP_STATUS_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_STATUS : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_STORE.h
Normal file
19
__IMAP_STORE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_STORE_h__
|
||||||
|
# define ____IMAP_STORE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_STORE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_SUBSCRIBE.h
Normal file
19
__IMAP_SUBSCRIBE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_SUBSCRIBE_h__
|
||||||
|
# define ____IMAP_SUBSCRIBE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_SUBSCRIBE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_UID.h
Normal file
19
__IMAP_UID.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_UID_h__
|
||||||
|
# define ____IMAP_UID_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_UID : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__IMAP_UNSUBSCRIBE.h
Normal file
19
__IMAP_UNSUBSCRIBE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____IMAP_UNSUBSCRIBE_h__
|
||||||
|
# define ____IMAP_UNSUBSCRIBE_h__
|
||||||
|
|
||||||
|
# include "IMAPCommand.h"
|
||||||
|
# include "IMAPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __IMAP_UNSUBSCRIBE : public IMAPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, IMAPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_DELE.h
Normal file
19
__POP3_DELE.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_DELE_h__
|
||||||
|
# define ____POP3_DELE_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_DELE : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_LAST.h
Normal file
19
__POP3_LAST.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_LAST_h__
|
||||||
|
# define ____POP3_LAST_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_LAST : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_LIST.h
Normal file
19
__POP3_LIST.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_LIST_h__
|
||||||
|
# define ____POP3_LIST_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_LIST : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_NOOP.h
Normal file
19
__POP3_NOOP.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_NOOP_h__
|
||||||
|
# define ____POP3_NOOP_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_NOOP : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_PASS.h
Normal file
19
__POP3_PASS.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_PASS_h__
|
||||||
|
# define ____POP3_PASS_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_PASS : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_QUIT.h
Normal file
19
__POP3_QUIT.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_QUIT_h__
|
||||||
|
# define ____POP3_QUIT_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_QUIT : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_RETR.h
Normal file
19
__POP3_RETR.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_RETR_h__
|
||||||
|
# define ____POP3_RETR_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_RETR : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_RPOP.h
Normal file
19
__POP3_RPOP.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_RPOP_h__
|
||||||
|
# define ____POP3_RPOP_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_RPOP : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_RSET.h
Normal file
19
__POP3_RSET.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_RSET_h__
|
||||||
|
# define ____POP3_RSET_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_RSET : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_STAT.h
Normal file
19
__POP3_STAT.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_STAT_h__
|
||||||
|
# define ____POP3_STAT_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_STAT : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_TOP.h
Normal file
19
__POP3_TOP.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_TOP_h__
|
||||||
|
# define ____POP3_TOP_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_TOP : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
__POP3_USER.h
Normal file
19
__POP3_USER.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____POP3_USER_h__
|
||||||
|
# define ____POP3_USER_h__
|
||||||
|
|
||||||
|
# include "POP3Command.h"
|
||||||
|
# include "POP3Session.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __POP3_USER : public POP3Command {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, POP3Session &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
70
__SMTP_AUTH.cpp
Normal file
70
__SMTP_AUTH.cpp
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#include "__SMTP_AUTH.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
#include "Base64.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_AUTH::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
switch(session.authState) {
|
||||||
|
|
||||||
|
case USER_UNKNOWN:
|
||||||
|
if(request[1].str() == "LOGIN") {
|
||||||
|
|
||||||
|
data << "334 VXNlcm5hbWU6" << CRLF;
|
||||||
|
|
||||||
|
// setTimer(10.0f);
|
||||||
|
|
||||||
|
session.authState = USER_QUERY;
|
||||||
|
session.server.commands.grabInput(&session, *this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
data << "504 AUTH method not supported." << CRLF;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case USER_QUERY:
|
||||||
|
|
||||||
|
session.userName = request[0].str();
|
||||||
|
|
||||||
|
// setTimer(0.0f);
|
||||||
|
|
||||||
|
data << "334 UGFzc3dvcmQ6" << CRLF;
|
||||||
|
|
||||||
|
// setTimer(10.0f);
|
||||||
|
session.authState = USER_SECRET_QUERY;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case USER_SECRET_QUERY:
|
||||||
|
|
||||||
|
session.password = request[0].str();
|
||||||
|
|
||||||
|
// setTimer(0.0f);
|
||||||
|
|
||||||
|
coreutils::Base64 base64;
|
||||||
|
|
||||||
|
if(authLogin(session.userName, session.password, server)) {
|
||||||
|
data << "235 2.7.0 Authentication successful" << CRLF;
|
||||||
|
session.relay = true;
|
||||||
|
session.authState = USER_KNOWN;
|
||||||
|
session.server.commands.clearGrab(&session);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
data << "530 Login was unsuccessful." << CRLF;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool __SMTP_AUTH::authLogin(std::string userName, std::string password, SMTPServer &server) {
|
||||||
|
|
||||||
|
std::string secretPath = server.mailFileSystem.getMailBoxPath(userName) + "/.password";
|
||||||
|
coreutils::File secret(secretPath);
|
||||||
|
secret.read();
|
||||||
|
return secret.asString() == password;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,95 +1,19 @@
|
|||||||
#ifndef ____SMTP_AUTH_h__
|
#ifndef ____SMTP_AUTH_h__
|
||||||
#define ____SMTP_AUTH_h__
|
# define ____SMTP_AUTH_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_AUTH : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_AUTH : public SMTPCommand {
|
||||||
|
|
||||||
data << "" << std::endl;
|
public:
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
|
bool authLogin(std::string userName, std::string password, SMTPServer &server);
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// AUTH command request handling.
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
else if(command(input) == "AUTH") {
|
|
||||||
|
|
||||||
if(input.length() > 5) {
|
|
||||||
string method = input.substr(5);
|
|
||||||
|
|
||||||
string userName;
|
|
||||||
string password;
|
|
||||||
|
|
||||||
//--------------------------------
|
|
||||||
// Check for AUTH LOGIN method.
|
|
||||||
//--------------------------------
|
|
||||||
|
|
||||||
if(method == "LOGIN") {
|
|
||||||
|
|
||||||
cout << "334 VXNlcm5hbWU6" << CRLF;
|
|
||||||
|
|
||||||
alarm(10);
|
|
||||||
|
|
||||||
if(!getline(cin, userName)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
alarm(0);
|
|
||||||
|
|
||||||
if(userName[userName.length() - 1] == '\r')
|
|
||||||
userName.erase(userName.length() - 1);
|
|
||||||
|
|
||||||
cout << "334 UGFzc3dvcmQ6" << CRLF;
|
|
||||||
|
|
||||||
alarm(10);
|
|
||||||
|
|
||||||
if(!getline(cin, password)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
alarm(0);
|
|
||||||
|
|
||||||
if(password[password.length() - 1] == '\r')
|
|
||||||
password.erase(password.length() - 1);
|
|
||||||
|
|
||||||
BASE64 base64;
|
|
||||||
|
|
||||||
log.message("Logging in with user '" + base64.decode(userName) + "' using password '" + base64.decode(password) + "'.");
|
|
||||||
|
|
||||||
if(authLogin(base64.decode(userName), base64.decode(password))) {
|
|
||||||
cout << "235 Authentication successful" << CRLF;
|
|
||||||
log.message("Response: 235 Authentication successful.");
|
|
||||||
relay = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
cout << "530 Login was unsuccessful." << CRLF;
|
|
||||||
log.message("Response: 530 Login was unsuccessful.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
cout << "530 AUTH method not supported." << CRLF;
|
|
||||||
log.message("Response: 530 AUTH method not supported.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
httpRequest.response.addHeader("Content-Type", "script/javascript");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
89
__SMTP_DATA.cpp
Normal file
89
__SMTP_DATA.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#include "__SMTP_DATA.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
#include "Log.h"
|
||||||
|
#include <chrono>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_DATA::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
switch(session.mode) {
|
||||||
|
|
||||||
|
case WAIT_FOR_DATA:
|
||||||
|
|
||||||
|
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);
|
||||||
|
// setTimer(120.0f);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAIL:
|
||||||
|
data << "503 Please use RCPT first" << CRLF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
data << "503 Please use MAIL first" << CRLF;
|
||||||
|
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(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;
|
||||||
|
// } else
|
||||||
|
// data << "550 Message is probably spam" << CRLF;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string __SMTP_DATA::generateMailFileName() {
|
||||||
|
std::stringstream temp;
|
||||||
|
struct timespec timex;
|
||||||
|
clock_gettime(CLOCK_REALTIME, &timex);
|
||||||
|
temp << timex.tv_sec << "." << std::setfill('0') << std::setw(9) << timex.tv_nsec;
|
||||||
|
return temp.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string __SMTP_DATA::queueMail(SMTPServer &server, std::string sender, std::vector<std::string> recipientList, std::stringstream &mailData) {
|
||||||
|
std::string fileName = server.mailFileSystem.getMailPath() + "/.queue/" + generateMailFileName();
|
||||||
|
coreutils::File mailFile(fileName, O_CREAT | O_WRONLY, 0660);
|
||||||
|
mailFile.write(mailData.str());
|
||||||
|
|
||||||
|
for(std::string recipient: recipientList) {
|
||||||
|
std::string newName = fileName + recipient;
|
||||||
|
link(fileName.c_str(), newName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink(fileName.c_str());
|
||||||
|
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
177
__SMTP_DATA.h
177
__SMTP_DATA.h
@ -1,177 +1,24 @@
|
|||||||
#ifndef ____SMTP_DATA_h__
|
#ifndef ____SMTP_DATA_h__
|
||||||
#define ____SMTP_DATA_h__
|
# define ____SMTP_DATA_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_DATA : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_DATA : public SMTPCommand {
|
||||||
|
|
||||||
data << "" << std::endl;
|
public:
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
std::string generateMailFileName();
|
||||||
// DATA command request handling.
|
std::string queueMail(SMTPServer &server, std::string sender, std::vector<std::string> recipientList, std::stringstream &mailData);
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
else if(command(input) == "DATA") {
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
}
|
||||||
// We must have recipients before we can send data.
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
|
|
||||||
if(state == "RCPT") {
|
#endif
|
||||||
|
|
||||||
//---------------------------------------------------------
|
|
||||||
// Prompt for client to begin entering mail message data.
|
|
||||||
//---------------------------------------------------------
|
|
||||||
|
|
||||||
cout << "354 Enter the mail message terminated by <CRLF>.<CRLF>" << CRLF;
|
|
||||||
|
|
||||||
mailData = "";
|
|
||||||
|
|
||||||
//-----------------------------------------------------------
|
|
||||||
// Receive mail message one line at a time and keep an eye
|
|
||||||
// out for the terminating period character.
|
|
||||||
//-----------------------------------------------------------
|
|
||||||
|
|
||||||
do {
|
|
||||||
|
|
||||||
alarm(120);
|
|
||||||
|
|
||||||
if(!getline(cin, input)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(input[input.length() - 1] == '\r')
|
|
||||||
input.erase(input.length() - 1);
|
|
||||||
|
|
||||||
alarm(0);
|
|
||||||
if(input != ".") {
|
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
// If there was a period for the first character but it wasn't
|
|
||||||
// the only character then remove and ignore the first period.
|
|
||||||
// This is the transparency mode capability.
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
|
|
||||||
if(input[0] == '.') {
|
|
||||||
mailData += input.substr(1) + CRLF;
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
mailData += input + CRLF;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} while(input != ".");
|
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
// Run the received message through an external filter program if
|
|
||||||
// one is configured into the system settings.
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
|
|
||||||
string ID;
|
|
||||||
|
|
||||||
if(filterMessage(mailData)) {
|
|
||||||
|
|
||||||
if(recipientList != "") {
|
|
||||||
|
|
||||||
if(mailData.length() > 0) {
|
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
// We have the message and we have a list of recipients. Send the
|
|
||||||
// message to the queue since we know everyone in the recipient
|
|
||||||
// list has passed the test.
|
|
||||||
//------------------------------------------------------------------
|
|
||||||
|
|
||||||
ID = queueMail(sender, recipientList, mailData, clientIP, log, sql, "N");
|
|
||||||
|
|
||||||
if(ID != "") {
|
|
||||||
|
|
||||||
log.message("Response: 250 OK Queued message " + ID);
|
|
||||||
|
|
||||||
//------------------------------
|
|
||||||
// Tell the client we sent it.
|
|
||||||
//------------------------------
|
|
||||||
|
|
||||||
cout << "250 OK Queued message " << ID << CRLF;
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
log.message("Response: 550 Mail message too big.");
|
|
||||||
|
|
||||||
//---------------------------------
|
|
||||||
// Tell the client it was too big.
|
|
||||||
//---------------------------------
|
|
||||||
|
|
||||||
cout << "550 Mail message too big" << CRLF;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
// The mail message is empty so we are going to error out. We don't like
|
|
||||||
// getting empty messages.
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
log.message("Response: 550 Mail message was empty.");
|
|
||||||
cout << "550 Mail message was empty" << CRLF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
log.message("Response: 250 OK Queued message. (We actually discarded it due to empty recipient list)");
|
|
||||||
|
|
||||||
//------------------------------
|
|
||||||
// Tell the client we sent it.
|
|
||||||
//------------------------------
|
|
||||||
|
|
||||||
cout << "250 OK Queued message " << ID << CRLF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------
|
|
||||||
// Error out cause it did not pass the filter test.
|
|
||||||
//----------------------------------------------------
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
cout << "550 Message is probably spam" << CRLF;
|
|
||||||
log.message("Response: 550 Message is probably spam.");
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------
|
|
||||||
// Return to the READY state.
|
|
||||||
//----------------------------
|
|
||||||
|
|
||||||
state = "READY";
|
|
||||||
}
|
|
||||||
//--------------------------------------------------------
|
|
||||||
// Generate an error cause we are not in the right state.
|
|
||||||
//--------------------------------------------------------
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
if(state == "MAIL") {
|
|
||||||
cout << "503 Please use RCPT first" << CRLF;
|
|
||||||
log.message("Response: 503 Please use RCPT first.");
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
cout << "503 Please use MAIL first" << CRLF;
|
|
||||||
log.message("Response: 503 Please use MAIL first.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
19
__SMTP_EHLO.cpp
Normal file
19
__SMTP_EHLO.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include "__SMTP_EHLO.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_EHLO::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
session.clientDomainName = request[1].str();
|
||||||
|
|
||||||
|
data << "250-" << server.hostName << CRLF;
|
||||||
|
// cout << "250-STARTTLS" << CRLF;
|
||||||
|
// cout << "250-PIPELINING" << CRLF;
|
||||||
|
// cout << "250-8BITMIME" << CRLF;
|
||||||
|
data << "250-AUTH LOGIN" << CRLF;
|
||||||
|
data << "250 HELP" << CRLF;
|
||||||
|
session.state = READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,30 +1,20 @@
|
|||||||
#ifndef ____SMTP_EHLO_h__
|
#ifndef ____SMTP_EHLO_h__
|
||||||
#define ____SMTP_EHLO_h__
|
# define ____SMTP_EHLO_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_EHLO : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_EHLO : public SMTPCommand {
|
||||||
|
|
||||||
if(input.length() > 5) {
|
public:
|
||||||
string hostName = input.substr(5);
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
};
|
||||||
|
|
||||||
// TODO: Provide error message demanding identity here.
|
}
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
data << "250-" << getHostName() << CRLF;
|
|
||||||
// cout << "250-STARTTLS" << CRLF;
|
|
||||||
// cout << "250-PIPELINING" << CRLF;
|
|
||||||
// cout << "250-8BITMIME" << CRLF;
|
|
||||||
data << "250-AUTH LOGIN" << CRLF;
|
|
||||||
data << "250 HELP" << CRLF;
|
|
||||||
session->state = "READY";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
11
__SMTP_EXPN.cpp
Normal file
11
__SMTP_EXPN.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "__SMTP_EXPN.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_EXPN::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
data << "252 You must know recipient." << CRLF;
|
||||||
|
session.state = READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
19
__SMTP_EXPN.h
Normal file
19
__SMTP_EXPN.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____SMTP_EXPN_h__
|
||||||
|
# define ____SMTP_EXPN_h__
|
||||||
|
|
||||||
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class SMTPServer;
|
||||||
|
|
||||||
|
class __SMTP_EXPN : public SMTPCommand {
|
||||||
|
|
||||||
|
public:
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
15
__SMTP_HELO.cpp
Normal file
15
__SMTP_HELO.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "__SMTP_HELO.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_HELO::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
std::string clientName = request[1].str();
|
||||||
|
|
||||||
|
data << "250 " << server.hostName << CRLF;
|
||||||
|
session.state = READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,32 +1,20 @@
|
|||||||
#ifndef ____SMTP_HELO_h__
|
#ifndef ____SMTP_HELO_h__
|
||||||
#define ____SMTP_HELO_h__
|
# define ____SMTP_HELO_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_HELO : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_HELO : public SMTPCommand {
|
||||||
|
|
||||||
data << "" << std::endl;
|
public:
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
};
|
||||||
// HELO command request handling.
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
if(command(input) == "HELO") {
|
}
|
||||||
|
|
||||||
if(input.length() > 5) {
|
#endif
|
||||||
string hostName = input.substr(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
// TODO: Provide error message demanding identity here.
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
cout << "250 " << getHostName() << CRLF;
|
|
||||||
state = "READY";
|
|
||||||
}
|
|
||||||
|
12
__SMTP_HELP.cpp
Normal file
12
__SMTP_HELP.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include "__SMTP_HELP.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_HELP::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
data << "250 Sure you need help." << CRLF;
|
||||||
|
session.state = READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
19
__SMTP_HELP.h
Normal file
19
__SMTP_HELP.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef ____SMTP_HELP_h__
|
||||||
|
# define ____SMTP_HELP_h__
|
||||||
|
|
||||||
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class SMTPServer;
|
||||||
|
|
||||||
|
class __SMTP_HELP : public SMTPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
32
__SMTP_MAIL.cpp
Normal file
32
__SMTP_MAIL.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include "__SMTP_MAIL.h"
|
||||||
|
#include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_MAIL::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
if(request.ifNext("MAIL FROM:")) {
|
||||||
|
request.skipWhitespace();
|
||||||
|
if(request.ifNext("<")) {
|
||||||
|
session.sender = request.getTokenExclude(">");
|
||||||
|
if(session.authState = USER_KNOWN) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
session.recipientList.clear();
|
||||||
|
session.state = MAIL;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
data << "550 Usage: MAIL FROM:<email-address>" << CRLF;
|
||||||
|
} else
|
||||||
|
data << "550 Usage: MAIL FROM:<email-address>" << CRLF;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string domainOnly(std::string email) {
|
||||||
|
coreutils::PString split(email);
|
||||||
|
split.split("@");
|
||||||
|
return split[1].str();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,38 +1,21 @@
|
|||||||
#ifndef ____SMTP_MAIL_h__
|
#ifndef ____SMTP_MAIL_h__
|
||||||
#define ____SMTP_MAIL_h__
|
# define ____SMTP_MAIL_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_MAIL : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_MAIL : public SMTPCommand {
|
||||||
|
|
||||||
data << "" << std::endl;
|
public:
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
// MAIL command request handling.
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
else if(command(input) == "MAIL") {
|
};
|
||||||
|
|
||||||
sender = cleanEMail(input.substr(5));
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------
|
#endif
|
||||||
// Verify that the senders domain name resolves to an address
|
|
||||||
// with an MX record. If not and there is a bounce then we
|
|
||||||
// will not be able to return the bounce message so it is
|
|
||||||
// probably a spammer anyway.
|
|
||||||
//-------------------------------------------------------------
|
|
||||||
|
|
||||||
if(verifyDomainMX(domainOnly(sender))) {
|
|
||||||
|
|
||||||
cout << "250 OK" << CRLF;
|
|
||||||
log.message("Response: 250 OK.");
|
|
||||||
recipientList = "";
|
|
||||||
state = "MAIL";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
20
__SMTP_NOOP.cpp
Normal file
20
__SMTP_NOOP.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef ____SMTP_NOOP_h__
|
||||||
|
# define ____SMTP_NOOP_h__
|
||||||
|
|
||||||
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
# include "PString.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __SMTP_NOOP : public SMTPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,12 +1,20 @@
|
|||||||
#ifndef ____SMTP_NOOP_h__
|
#ifndef ____SMTP_NOOP_h__
|
||||||
#define ____SMTP_NOOP_h__
|
# define ____SMTP_NOOP_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
# include "PString.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_NOOP : public core::Command {
|
class __SMTP_NOOP : public SMTPCommand {
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||||
data << "250 OK" << CRLF;
|
data << "250 OK" << CRLF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
12
__SMTP_QUIT.cpp
Normal file
12
__SMTP_QUIT.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# include "__SMTP_QUIT.h"
|
||||||
|
# include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_QUIT::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
data << "221 " << server.hostName << CRLF;
|
||||||
|
session.shutdown("quit request");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,17 +1,21 @@
|
|||||||
#ifndef ____SMTP_QUIT_h__
|
#ifndef ____SMTP_QUIT_h__
|
||||||
#define ____SMTP_QUIT_h__
|
# define ____SMTP_QUIT_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_QUIT : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_QUIT : public SMTPCommand {
|
||||||
data << "221 " << getHostName() << CRLF;
|
|
||||||
session->shutdown();
|
public:
|
||||||
}
|
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
34
__SMTP_RCPT.cpp
Normal file
34
__SMTP_RCPT.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# include "__SMTP_RCPT.h"
|
||||||
|
# include "SMTPServer.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_RCPT::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) {
|
||||||
|
|
||||||
|
if((session.state == MAIL) || (session.state == RCPT)) {
|
||||||
|
std::string recipient;
|
||||||
|
if(request.ifNext("RCPT TO:")) {
|
||||||
|
request.skipWhitespace();
|
||||||
|
if(request.ifNext("<")) {
|
||||||
|
recipient = request.getTokenExclude(">");
|
||||||
|
if(server.mailFileSystem.ifMailBoxExists(recipient)) {
|
||||||
|
session.recipientList.push_back(recipient);
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
session.state = RCPT;
|
||||||
|
} else if(session.relay) {
|
||||||
|
session.recipientList.push_back(recipient);
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
session.state = RCPT;
|
||||||
|
} else
|
||||||
|
data << "550 Mailbox does not exist" << CRLF;
|
||||||
|
} else
|
||||||
|
data << "550 Usage: RCPT TO:<email-address>" << CRLF;
|
||||||
|
} else
|
||||||
|
data << "550 Usage: RCPT TO:<email-address>" << CRLF;
|
||||||
|
} else
|
||||||
|
data << "503 Please use MAIL first" << CRLF;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
157
__SMTP_RCPT.h
157
__SMTP_RCPT.h
@ -1,159 +1,18 @@
|
|||||||
#ifndef ____SMTP_RCPT_h__
|
#ifndef ____SMTP_RCPT_h__
|
||||||
#define ____SMTP_RCPT_h__
|
# define ____SMTP_RCPT_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "MailFileSystem.h"
|
||||||
|
# include "SMTPSession.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_RCPT : public core::Command {
|
class SMTPServer;
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
class __SMTP_RCPT : public SMTPCommand {
|
||||||
|
|
||||||
if((state == "MAIL") || (state == "RCPT")) {
|
public:
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data);
|
||||||
bool done = false;
|
|
||||||
|
|
||||||
//--------------------------------------
|
|
||||||
// Obtain the recipient's email address.
|
|
||||||
//--------------------------------------
|
|
||||||
|
|
||||||
string recipient = input.substr(5);
|
|
||||||
|
|
||||||
//-----------------------------------------------
|
|
||||||
// Fetch the recipient list for the alias.
|
|
||||||
//-----------------------------------------------
|
|
||||||
|
|
||||||
string aliasRecipients;
|
|
||||||
|
|
||||||
if(getAliasList(cleanEMail(recipient), aliasRecipients)) {
|
|
||||||
|
|
||||||
//-----------------------------------------------
|
|
||||||
// If the list is not blank then add the list
|
|
||||||
// to the recipient list and accept the request.
|
|
||||||
//-----------------------------------------------
|
|
||||||
|
|
||||||
recipientList += aliasRecipients;
|
|
||||||
data << "250 OK" << CRLF;
|
|
||||||
state = "RCPT";
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
//-------------------------------------------------
|
|
||||||
// No alias entry for the mailbox so check if it
|
|
||||||
// is a hard mailbox.
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
if(!done) {
|
|
||||||
|
|
||||||
//--------------------------------------
|
|
||||||
// Check to see if the user is a local
|
|
||||||
// address to deliver to.
|
|
||||||
//--------------------------------------
|
|
||||||
|
|
||||||
if(localUser(cleanEMail(recipient))) {
|
|
||||||
|
|
||||||
//------------------------------------------
|
|
||||||
// They're local so lets queue it for them.
|
|
||||||
//------------------------------------------
|
|
||||||
|
|
||||||
recipientList += cleanEMail(recipient) + " ";
|
|
||||||
data << "250 OK" << CRLF;
|
|
||||||
state = "RCPT";
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// There is no mailbox either so do domain check.
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
if(!done) {
|
|
||||||
|
|
||||||
//---------------------------------------------------
|
|
||||||
// Check to see if the domain is good at least and
|
|
||||||
// if there is a default mailbox address..
|
|
||||||
//---------------------------------------------------
|
|
||||||
string defaultMailbox;
|
|
||||||
|
|
||||||
if(localDomain(domainOnly(cleanEMail(recipient)), defaultMailbox)) {
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// The domain is local so if there is a default
|
|
||||||
// mailbox then let's send it to the queue with the
|
|
||||||
// default address attached instead.
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
if(defaultMailbox != "*NONE") {
|
|
||||||
|
|
||||||
//---------------------------------------------------------
|
|
||||||
// If the default mailbox is *DISCARD then we do not want
|
|
||||||
// to add the mailbox to the recipient list but we still
|
|
||||||
// want to say we have a mailbox.
|
|
||||||
//---------------------------------------------------------
|
|
||||||
|
|
||||||
if(defaultMailbox != "*DISCARD")
|
|
||||||
recipientList += defaultMailbox + " ";
|
|
||||||
|
|
||||||
cout << "250 OK" << CRLF;
|
|
||||||
log.message("Response: 250 OK.");
|
|
||||||
|
|
||||||
state = "RCPT";
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------
|
|
||||||
// If there is no default address then we will tell
|
|
||||||
// the client that the mailbox does not exist.
|
|
||||||
//--------------------------------------------------
|
|
||||||
|
|
||||||
else {
|
|
||||||
|
|
||||||
cout << "553 Mailbox does not exist" << CRLF;
|
|
||||||
log.message("Response: 553 Mailbox does not exist.");
|
|
||||||
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
// If we are not done then this is a relay request.
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
|
|
||||||
if (!done) {
|
|
||||||
|
|
||||||
//---------------------------------------------------------
|
|
||||||
// If relaying is enabled for this conversation then
|
|
||||||
// queue the mail.
|
|
||||||
//---------------------------------------------------------
|
|
||||||
|
|
||||||
if(relay) {
|
|
||||||
recipientList += cleanEMail(recipient) + " ";
|
|
||||||
cout << "250 OK" << CRLF;
|
|
||||||
log.message("Response: 250 OK.");
|
|
||||||
state = "RCPT";
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------
|
|
||||||
// Otherwise send an error.
|
|
||||||
//----------------------------------------
|
|
||||||
|
|
||||||
else {
|
|
||||||
cout << "553 Server requires authentication to relay" << CRLF;
|
|
||||||
log.message("Response: 553 Server requires authentication to relay.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cout << "503 Please use MAIL first" << CRLF;
|
|
||||||
log.message("Response: 503 Please use MAIL first.");
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
20
__SMTP_RSET.cpp
Normal file
20
__SMTP_RSET.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef ____SMTP_RSET_h__
|
||||||
|
#define ____SMTP_RSET_h__
|
||||||
|
|
||||||
|
#include "SMTPCommand.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
class __SMTP_RSET : public SMTPCommand {
|
||||||
|
|
||||||
|
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||||
|
session.state = READY;
|
||||||
|
data << "250 OK" << CRLF;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,14 +1,14 @@
|
|||||||
#ifndef ____SMTP_RSET_h__
|
#ifndef ____SMTP_RSET_h__
|
||||||
#define ____SMTP_RSET_h__
|
#define ____SMTP_RSET_h__
|
||||||
|
|
||||||
#include "Command.h"
|
#include "SMTPCommand.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_RSET : public core::Command {
|
class __SMTP_RSET : public SMTPCommand {
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data);
|
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||||
state = "READY";
|
session.state = READY;
|
||||||
data << "250 OK" << CRLF;
|
data << "250 OK" << CRLF;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
11
__SMTP_VRFY.cpp
Normal file
11
__SMTP_VRFY.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "__SMTP_VRFY.h"
|
||||||
|
|
||||||
|
namespace mail {
|
||||||
|
|
||||||
|
int __SMTP_VRFY::processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data) {
|
||||||
|
data << "252 You must know who the mail is for" << CRLF;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,16 +1,14 @@
|
|||||||
#ifndef ____SMTP_VRFY_h__
|
#ifndef ____SMTP_VRFY_h__
|
||||||
#define ____SMTP_VRFY_h__
|
# define ____SMTP_VRFY_h__
|
||||||
|
|
||||||
#include "Command.h"
|
# include "SMTPCommand.h"
|
||||||
|
# include "PString.h"
|
||||||
|
|
||||||
namespace mail {
|
namespace mail {
|
||||||
|
|
||||||
class __SMTP_VRFY : public core::Command {
|
class __SMTP_VRFY : public SMTPCommand {
|
||||||
|
|
||||||
int processCommand(std::string request, Session *session, std::stringstream &data) {
|
int processCommand(coreutils::PString request, SMTPSession &session, std::stringstream &data);
|
||||||
data << "252 You must know who the mail is for" << CRLF;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
29
compile
Executable file
29
compile
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for file in *.cpp
|
||||||
|
do
|
||||||
|
filename="${file%.*}"
|
||||||
|
list="$list $filename.o"
|
||||||
|
echo -n "Compiling $filename..."
|
||||||
|
g++ -g -c -std=c++17 -I../CoreUtils -I../ServerCore $file
|
||||||
|
if [ $? = '0' ]
|
||||||
|
then
|
||||||
|
echo "OK"
|
||||||
|
else
|
||||||
|
echo "ERROR"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
wait
|
||||||
|
echo -n "Building executable BMAMail..."
|
||||||
|
g++ -g -std=c++17 -o BMAMail $list -L../CoreUtils -lCoreUtils -L../ServerCore -lServerCore -lpthread -luuid -lssl -lcrypto
|
||||||
|
if [ $? = '0' ]
|
||||||
|
then
|
||||||
|
echo "OK"
|
||||||
|
else
|
||||||
|
echo "ERROR"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
2494
docs/Doxyfile
Normal file
2494
docs/Doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
111
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h.html
Normal file
111
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h.html
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_APPEND.h File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">BMAMail
|
||||||
|
 <span id="projectnumber">1.0.0</span>
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">E-Mail System</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.13 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#nested-classes">Classes</a> |
|
||||||
|
<a href="#namespaces">Namespaces</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_APPEND.h File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
Include dependency graph for __IMAP_APPEND.h:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___a_p_p_e_n_d_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8h">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
This graph shows which files directly or indirectly include this file:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_p_p_e_n_d_8hdep">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="22,95,193,136"/>
|
||||||
|
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="29,184,185,225"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p><a href="_____i_m_a_p___a_p_p_e_n_d_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||||
|
Classes</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">mail::__IMAP_APPEND</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||||
|
Namespaces</h2></td></tr>
|
||||||
|
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.13
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.map
Normal file
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.map
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h" name="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="22,95,193,136"/>
|
||||||
|
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="29,184,185,225"/>
|
||||||
|
</map>
|
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.md5
Normal file
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.md5
Normal file
@ -0,0 +1 @@
|
|||||||
|
22f73b6a82680dc85cb63acda50fcaa8
|
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__dep__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.map
Normal file
4
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.map
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h" name="/home/bradarant/barant/BMAMail/__IMAP_APPEND.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.md5
Normal file
1
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.md5
Normal file
@ -0,0 +1 @@
|
|||||||
|
cd58f15aee07f1189f517c74a37f4eb8
|
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
82
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h_source.html
Normal file
82
docs/html/_____i_m_a_p___a_p_p_e_n_d_8h_source.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_APPEND.h Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">BMAMail
|
||||||
|
 <span id="projectnumber">1.0.0</span>
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">E-Mail System</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.13 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_APPEND.h</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<a href="_____i_m_a_p___a_p_p_e_n_d_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef ____IMAP_APPEND_h__</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"># define ____IMAP_APPEND_h__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_command_8h.html">IMAPCommand.h</a>"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_session_8h.html">IMAPSession.h</a>"</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"><a class="line" href="namespacemail.html"> 7</a></span> <span class="keyword">namespace </span><a class="code" href="namespacemail.html">mail</a> {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  </div><div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html"> 9</a></span>  <span class="keyword">class </span><a class="code" href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">__IMAP_APPEND</a> : <span class="keyword">public</span> <a class="code" href="classmail_1_1_i_m_a_p_command.html">IMAPCommand</a> {</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keywordtype">int</span> processCommand(coreutils::PString request, <a class="code" href="classmail_1_1_i_m_a_p_session.html">IMAPSession</a> &session, std::stringstream &data) { </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  data << <span class="stringliteral">"250 OK"</span> << <a class="code" href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  }</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  };</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="_i_m_a_p_command_8h_html"><div class="ttname"><a href="_i_m_a_p_command_8h.html">IMAPCommand.h</a></div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_____i_m_a_p___a_p_p_e_n_d_html"><div class="ttname"><a href="classmail_1_1_____i_m_a_p___a_p_p_e_n_d.html">mail::__IMAP_APPEND</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:9</div></div>
|
||||||
|
<div class="ttc" id="namespacemail_html"><div class="ttname"><a href="namespacemail.html">mail</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:7</div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_i_m_a_p_command_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_command.html">mail::IMAPCommand</a></div><div class="ttdef"><b>Definition:</b> IMAPCommand.h:10</div></div>
|
||||||
|
<div class="ttc" id="_s_m_t_p_session_8h_html_a6cb23a858b0a21bdaa644b9181dc415f"><div class="ttname"><a href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a></div><div class="ttdeci">#define CRLF</div><div class="ttdef"><b>Definition:</b> SMTPSession.h:7</div></div>
|
||||||
|
<div class="ttc" id="_i_m_a_p_session_8h_html"><div class="ttname"><a href="_i_m_a_p_session_8h.html">IMAPSession.h</a></div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_i_m_a_p_session_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_session.html">mail::IMAPSession</a></div><div class="ttdef"><b>Definition:</b> IMAPSession.h:6</div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.13
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
111
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html
Normal file
111
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">BMAMail
|
||||||
|
 <span id="projectnumber">1.0.0</span>
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">E-Mail System</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.13 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#nested-classes">Classes</a> |
|
||||||
|
<a href="#namespaces">Namespaces</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
Include dependency graph for __IMAP_AUTHENTICATE.h:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
This graph shows which files directly or indirectly include this file:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8hdep">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="46,95,217,136"/>
|
||||||
|
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="53,184,209,225"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p><a href="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||||
|
Classes</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">mail::__IMAP_AUTHENTICATE</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||||
|
Namespaces</h2></td></tr>
|
||||||
|
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.13
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h" name="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="46,95,217,136"/>
|
||||||
|
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="53,184,209,225"/>
|
||||||
|
</map>
|
@ -0,0 +1 @@
|
|||||||
|
5aefedb62eaf0aa8df6f0ec27f6197bd
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h" name="/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
@ -0,0 +1 @@
|
|||||||
|
62ff7e3fdbdb1928db6d124adecf1185
|
BIN
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">BMAMail
|
||||||
|
 <span id="projectnumber">1.0.0</span>
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">E-Mail System</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.13 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_AUTHENTICATE.h</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<a href="_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef ____IMAP_AUTHENTICATE_h__</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"># define ____IMAP_AUTHENTICATE_h__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_command_8h.html">IMAPCommand.h</a>"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"># include "<a class="code" href="_i_m_a_p_session_8h.html">IMAPSession.h</a>"</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="namespacemail.html">mail</a> {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  </div><div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html"> 9</a></span>  <span class="keyword">class </span><a class="code" href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">__IMAP_AUTHENTICATE</a> : <span class="keyword">public</span> <a class="code" href="classmail_1_1_i_m_a_p_command.html">IMAPCommand</a> {</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keywordtype">int</span> processCommand(coreutils::PString request, <a class="code" href="classmail_1_1_i_m_a_p_session.html">IMAPSession</a> &session, std::stringstream &data) { </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  data << <span class="stringliteral">"250 OK"</span> << <a class="code" href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  }</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  };</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="_i_m_a_p_command_8h_html"><div class="ttname"><a href="_i_m_a_p_command_8h.html">IMAPCommand.h</a></div></div>
|
||||||
|
<div class="ttc" id="namespacemail_html"><div class="ttname"><a href="namespacemail.html">mail</a></div><div class="ttdef"><b>Definition:</b> __IMAP_APPEND.h:7</div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e_html"><div class="ttname"><a href="classmail_1_1_____i_m_a_p___a_u_t_h_e_n_t_i_c_a_t_e.html">mail::__IMAP_AUTHENTICATE</a></div><div class="ttdef"><b>Definition:</b> __IMAP_AUTHENTICATE.h:9</div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_i_m_a_p_command_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_command.html">mail::IMAPCommand</a></div><div class="ttdef"><b>Definition:</b> IMAPCommand.h:10</div></div>
|
||||||
|
<div class="ttc" id="_s_m_t_p_session_8h_html_a6cb23a858b0a21bdaa644b9181dc415f"><div class="ttname"><a href="_s_m_t_p_session_8h.html#a6cb23a858b0a21bdaa644b9181dc415f">CRLF</a></div><div class="ttdeci">#define CRLF</div><div class="ttdef"><b>Definition:</b> SMTPSession.h:7</div></div>
|
||||||
|
<div class="ttc" id="_i_m_a_p_session_8h_html"><div class="ttname"><a href="_i_m_a_p_session_8h.html">IMAPSession.h</a></div></div>
|
||||||
|
<div class="ttc" id="classmail_1_1_i_m_a_p_session_html"><div class="ttname"><a href="classmail_1_1_i_m_a_p_session.html">mail::IMAPSession</a></div><div class="ttdef"><b>Definition:</b> IMAPSession.h:6</div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.13
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
111
docs/html/_____i_m_a_p___c_h_e_c_k_8h.html
Normal file
111
docs/html/_____i_m_a_p___c_h_e_c_k_8h.html
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.13"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>BMAMail: /home/bradarant/barant/BMAMail/__IMAP_CHECK.h File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">BMAMail
|
||||||
|
 <span id="projectnumber">1.0.0</span>
|
||||||
|
</div>
|
||||||
|
<div id="projectbrief">E-Mail System</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.13 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#nested-classes">Classes</a> |
|
||||||
|
<a href="#namespaces">Namespaces</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">/home/bradarant/barant/BMAMail/__IMAP_CHECK.h File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock"><code>#include "<a class="el" href="_i_m_a_p_command_8h_source.html">IMAPCommand.h</a>"</code><br />
|
||||||
|
<code>#include "<a class="el" href="_i_m_a_p_session_8h_source.html">IMAPSession.h</a>"</code><br />
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
Include dependency graph for __IMAP_CHECK.h:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___c_h_e_c_k_8h__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8h">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
This graph shows which files directly or indirectly include this file:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png" border="0" usemap="#_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep" alt=""/></div>
|
||||||
|
<map name="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep" id="_2home_2bradarant_2barant_2_b_m_a_mail_2_____i_m_a_p___c_h_e_c_k_8hdep">
|
||||||
|
<area shape="rect" id="node2" href="_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="18,95,189,136"/>
|
||||||
|
<area shape="rect" id="node3" href="main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="25,184,181,225"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p><a href="_____i_m_a_p___c_h_e_c_k_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||||
|
Classes</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmail_1_1_____i_m_a_p___c_h_e_c_k.html">mail::__IMAP_CHECK</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||||
|
Namespaces</h2></td></tr>
|
||||||
|
<tr class="memitem:namespacemail"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemail.html">mail</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.13
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.map
Normal file
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.map
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h" name="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_service_8h.html" title="/home/bradarant/barant\l/BMAMail/IMAPService.h" alt="" coords="18,95,189,136"/>
|
||||||
|
<area shape="rect" id="node3" href="$main_8cpp.html" title="/home/bradarant/barant\l/BMAMail/main.cpp" alt="" coords="25,184,181,225"/>
|
||||||
|
</map>
|
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.md5
Normal file
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.md5
Normal file
@ -0,0 +1 @@
|
|||||||
|
a2880e4fcfb4fa8de1a024671205822a
|
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__dep__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.map
Normal file
4
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.map
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<map id="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h" name="/home/bradarant/barant/BMAMail/__IMAP_CHECK.h">
|
||||||
|
<area shape="rect" id="node2" href="$_i_m_a_p_command_8h.html" title="IMAPCommand.h" alt="" coords="129,95,255,121"/>
|
||||||
|
<area shape="rect" id="node5" href="$_i_m_a_p_session_8h.html" title="IMAPSession.h" alt="" coords="254,169,367,196"/>
|
||||||
|
</map>
|
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.md5
Normal file
1
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.md5
Normal file
@ -0,0 +1 @@
|
|||||||
|
6caede9e0cd14de85fe7fb0dc70e152b
|
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.png
Normal file
BIN
docs/html/_____i_m_a_p___c_h_e_c_k_8h__incl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user