Click here to Skip to main content
11,502,800 members (37,435 online)
Click here to Skip to main content

CPopProxyMT - A multi-threaded POP3 proxy skeleton

, 9 Oct 2002 CPOL 136.3K 1.7K 34
Rate this:
Please Sign up or sign in to vote.
CPopProxyMT is a skeletal class that wraps a multi-threaded POP3 proxy. You can further modify this class to suite your needs.

Introduction

CPopProxyMT is a multi-threaded POP3 proxy server class that is a skeleton for you to work on and modify to suite your own purposes. In its bare condition, it is a simple POP3 proxy that can be installed and run on any Windows machine. Obviously some of you might have further uses for it, in which case you can expand on the class - for example you might want to filter out certain mails or you might want to log every mail that's received.

Class structure

class CPopProxyMT
{
public:
    CPopProxyMT(void);
    ~CPopProxyMT(void);
private:
    SOCKET m_PopServerSocket;
    HANDLE m_ServerThread;
    // The thread that listens for connections
    static DWORD ServerThread(DWORD arg);
    int m_port;
    DWORD MServerThread(void); 
    static char* MakeCaps(char* str);
public:
    // This starts the multi-threaded POP proxy server
    int StartProxy(int port); 
private:
    // Flag that's set if the proxy is running
    BOOL bRunning;
    static DWORD ClientThread(DWORD arg); 
    void StartClientThread(SOCKET sock);
    static void StartDataThread(DWORD parm);
    static DWORD DataThread(DWORD parm);
public:
    BOOL IsRunning(void);
    void StopProxy(void);
};

Sample usage

//...

CPopProxyMT pop_proxy;

//...

case WM_COMMAND: 
    switch (LOWORD(wParam)) 
    {
    case IDOK:
        // This is a sorta toggle button
        // It starts/stops the proxy alternatively
        if(pop_proxy.IsRunning())
        {
            pop_proxy.StopProxy();
            SetDlgItemText(hwnd,IDOK,"Start");
            SetDlgItemText(hwnd,IDC_EDIT1,"POP Proxy stopped");
        }
        else
        {               
            pop_proxy.StartProxy(3110);
            SetDlgItemText(hwnd,IDOK,"Stop");
            SetDlgItemText(hwnd,IDC_EDIT1,"POP Proxy running");
        }
        return TRUE;

//...

Features

  • Multi-threaded (any number of POP clients can connect)
  • No MFC required

POP client configuration

  • POP3 server - This should be the domain name or IP address of your POP3 proxy server
  • Username - This should be the format :- username/POP3 server
  • Password - Your POP3 password

A sample configuration is shown below for Outlook Express 6

Credits

Well I wouldn't have written this class if not for Colin Davies who had asked me whether I'd mind writing such a class for him (he is a man with the most amazing ideas and I reckon this one is for one such idea of his). Thanks Colin, this one is for you Smile | :)

History

  • October 10th 2002 - Although most of the code was written somewhere in mid-2001, this class was written only on 10-10-02

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Nish Nishant

United States United States
Nish Nishant is a Software Architect/Consultant based out of Columbus, Ohio. He has over 15 years of software industry experience in various roles including Lead Software Architect, Principal Software Engineer, and Product Manager. Nish is a recipient of the annual Microsoft Visual C++ MVP Award since 2002 (13 consecutive awards as of 2014).

Nish is an industry acknowledged expert in the Microsoft technology stack. He authored
C++/CLI in Action for Manning Publications in 2005, and had previously co-authored
Extending MFC Applications with the .NET Framework for Addison Wesley in 2003. In addition, he has over 140 published technology articles on CodeProject.com and another 250+ blog articles on his
WordPress blog. Nish is vastly experienced in team management, mentoring teams, and directing all stages of software development.

Contact Nish : You can reach Nish on his google email id voidnish.

Website and Blog

Comments and Discussions

 
GeneralProblem in In/Outgoing mail server setting... Pin
Member 3798985-Jul-09 1:48
memberMember 3798985-Jul-09 1:48 
GeneralProblem in configuring outlook express to proxy server Pin
k_swathi14328-Jan-07 19:54
memberk_swathi14328-Jan-07 19:54 
QuestionHow to configure outlook express to my proxy server Pin
k_swathi14319-Jan-07 23:13
memberk_swathi14319-Jan-07 23:13 
GeneralThread stopping problem Pin
Holms12-Mar-04 9:53
memberHolms12-Mar-04 9:53 
GeneralPlug-in for Outlook Express. Please help....... Pin
Atif Bashir4-Aug-03 1:38
memberAtif Bashir4-Aug-03 1:38 
GeneralRe: Plug-in for Outlook Express. Please help....... Pin
tyounsi18-Feb-04 7:50
membertyounsi18-Feb-04 7:50 
Generaldoesn't work at all for me. Pin
leemidgley2-Jul-03 9:59
memberleemidgley2-Jul-03 9:59 
Questionhow can i browse email as OutLook Pin
fhgu14-Jan-03 21:27
memberfhgu14-Jan-03 21:27 
Generali can't compile .... Pin
casperx28-Oct-02 15:38
membercasperx28-Oct-02 15:38 
GeneralRe: i can't compile .... Pin
Nish [not logged in]28-Oct-02 17:18
sussNish [not logged in]28-Oct-02 17:18 
GeneralRe: i can't compile .... Pin
Anonymous1-Nov-02 12:55
sussAnonymous1-Nov-02 12:55 
QuestionIs there another way to proxy? Pin
b_p_smith15-Oct-02 4:13
memberb_p_smith15-Oct-02 4:13 
AnswerRe: Is there another way to proxy? Pin
Petr Prazak19-Oct-02 4:47
memberPetr Prazak19-Oct-02 4:47 
GeneralRe: Is there another way to proxy? Pin
b_p_smith19-Oct-02 9:18
memberb_p_smith19-Oct-02 9:18 
GeneralRe: Is there another way to proxy? Pin
tonymudd8-Jan-03 2:48
membertonymudd8-Jan-03 2:48 
GeneralRaw Sockets Pin
Matthew R. Miller11-Oct-02 4:23
memberMatthew R. Miller11-Oct-02 4:23 
GeneralVC6 compilation Pin
__Stephane Rodriguez__10-Oct-02 7:36
member__Stephane Rodriguez__10-Oct-02 7:36 
GeneralRe: VC6 compilation Pin
Nishant S10-Oct-02 7:47
editorNishant S10-Oct-02 7:47 
GeneralRe: VC6 compilation Pin
__Stephane Rodriguez__10-Oct-02 21:04
member__Stephane Rodriguez__10-Oct-02 21:04 
GeneralRe: VC6 compilation Pin
Nishant S10-Oct-02 21:07
editorNishant S10-Oct-02 21:07 
GeneralRe: VC6 compilation Pin
Colin Davies10-Oct-02 18:46
memberColin Davies10-Oct-02 18:46 
GeneralRe: VC6 compilation Pin
Nishant S10-Oct-02 18:52
editorNishant S10-Oct-02 18:52 
GeneralRe: VC6 compilation Pin
Colin Davies10-Oct-02 20:12
memberColin Davies10-Oct-02 20:12 
GeneralRe: VC6 compilation Pin
Steve S10-Oct-02 22:01
memberSteve S10-Oct-02 22:01 
GeneralRe: VC6 compilation Pin
Anthony_Yio23-Oct-02 17:37
memberAnthony_Yio23-Oct-02 17:37 
GeneralRe: VC6 compilation Pin
Nishant S23-Oct-02 17:59
editorNishant S23-Oct-02 17:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150520.1 | Last Updated 10 Oct 2002
Article Copyright 2002 by Nish Nishant
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid