C ++中的简单邮件服务器

时间:2013-07-20 21:23:01

标签: c++ sockets email smtp pop3

我正在尝试制作一个简单的邮件服务器来接收电子邮件并使用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

谢谢!

1 个答案:

答案 0 :(得分:1)

POP3是一种协议(读取RFC 1939),因此您必须实施它才能使用它。连接后,另一方不会发送任何内容,直到您发送问候语(“+在此处点击您的信息”)。

之后,您必须与远程客户端建立POP“对话”。

此外,POP用于从服务器检索邮件,因此客户端将连接到您的进程并尝试下载邮件。

您必须实施SMTP协议(阅读RFC 5321)才能接收发送给您的邮件。 SMTP也是一种协议,因此如果您希望另一方向您发送数据,则必须实施该协议。