Я пытаюсь сделать один простой почтовый сервер для получения электронной почты и печати на экране с использованием сокетов в C ++. Я уже делаю программу, все выглядит отлично, но не работает. Сокет и потоки работают отлично, просто войдите с помощью netcat или telnet, чтобы увидеть, что работает, но когда я пытаюсь отправить электронное письмо в программу, ничего не происходит.
Я думаю, что я делаю это неправильно в функции процесса. Видеть, что…
void process(int new_sd, void *threadid) {
int tid = (long) threadid;
ssize_t bytes_recieved;
char incomming_data_buffer[1000];
while (1) {
bytes_recieved = recv(new_sd, incomming_data_buffer, 1000, 0);
// if (bytes_recieved == 0) cout << "host shut down." << endl ;
if (bytes_recieved == -1)cout << "Recieve Error! :(" << endl ;
incomming_data_buffer[bytes_recieved] = '\0';
trimwhitespace(incomming_data_buffer);
cout << "|" << incomming_data_buffer << "|" << endl;
if (!strcmp(incomming_data_buffer, "QUIT")) {
close(new_sd);
break;
} else {
send_text(new_sd, "OK \n");
}
}
}
Полный исходный код здесь: http://pastebin.com/vLH8dSAj
Для компиляции в Linux: g ++ -lm mail.cpp -o mail
Спасибо!
POP3 — это протокол (читай RFC 1939), так что вы должны реализовать это для того, чтобы использовать его. После подключения другая сторона не отправит вам ничего, пока вы не отправите приветственное сообщение («+ OK ваше сообщение здесь»).
После этого вы должны установить POP «разговор» с удаленным клиентом.
Также POP используется для получения сообщений с сервера, поэтому клиент подключится к вашему процессу и попытается загрузить сообщения.
Вы должны реализовать протокол SMTP (читать RFC 5321) для получения сообщений, отправленных вам. SMTP также является протоколом, поэтому вы должны реализовать его, если хотите, чтобы другая сторона отправила вам данные.
Других решений пока нет …