59 lines
1.8 KiB
Plaintext
59 lines
1.8 KiB
Plaintext
#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);
|
|
}
|
|
|
|
}
|