CLX C++ Libraries - pop3
Author: clown

CLX C++ Libraries
Home >> pop3

# Declaration

    template <class Socket>
    class basic_pop3 : public Socket;

    typedef basic_pop3<tcp::socket> pop3;

# Overview

pop3 クラスは POP3 (Post Office Protocol version 3) を用いて， メールサーバからメールを受信するためのクラスです． start() メソッドでメールサーバと接続し，login() メソッドでログイン処理を行った後， 各種メソッドを用いてメールサーバと通信を行います．ログイン方法は， 平文による認証方式と APOP 認証方式に対応しています．

pop3 クラスは，サーバからエラーメッセージが返された場合には pop3_error を例外として送出します．

# Example

example_pop3.cpp

    #include <iostream>
    #include <string>
    #include "clx/pop3.h"

    int main(int argc, char* argv[]) {
        if (argc < 4) std::exit(-1);

        try {
            clx::pop3 session(argv[1], 110);

            // APOP が使用できるなら APOP 認証を用いる．
            session.login(argv[2], argv[3], session.apop_support());

            std::cout << "status: " << session.status() << std::endl;

            // LIST コマンド
            clx::pop3::list_type list = session.list();
            std::cout << "mail list" << std::endl;
            std::cout << "-----" << std::endl;
            for (size_t i = 0; i < list.size(); ++i) {
                std::cout << list[i] << std::endl;
            }
            std::cout << "-----" << std::endl;

            // TOP コマンド
            std::cout << "top [1]" << std::endl;
            std::cout << "-----" << std::endl;
            std::cout << session.top(1, 0) << std::endl;
            std::cout << "-----" << std::endl;

            session.finish();
        }
        catch (clx::pop3_error& e) {
            std::cerr << e.what() << std::endl;
            std::exit(-1);
        }
        catch (clx::socket_error& e) {
            std::cerr << e.what() << std::endl;
            std::exit(-1);
        }
        catch (std::runtime_error& e) {
            std::cerr << e.what() << std::endl;
            std::exit(-1);
        }

        return 0;
    }

    Result
    status: 6 5543
    mail list
    -----
    1 975
    2 1012
    3 960
    4 866
    5 864
    6 866
    -----
    top [1]
    -----
    Return-Path: <clown@abeam.ocn.ne.jp>
    Delivered-To: clown@cielquis.net

    ・・・（以下略）・・・

# Template Parameters

Socket
  ソケットクラスを指定します．

# Related Types

    typedef Socket socket_type;
    typedef char char_type;
    typedef std::basic_string<char_type> string_type;
    typedef std::vector<string_type> list_type;

# Construction and Member Functions

    basic_pop3();
    basic_pop3(const basic_pop3& cp);
    explicit basic_pop3(const string_type& host, int port = 110);
    explicit basic_pop3(const char_type* host, int port = 110);
    virtual ~basic_pop3();

    basic_pop3& start();
    basic_pop3& start(const string_type& host, int port = 110);
    basic_pop3& start(const char_type* host, int port = 110);

    void finish();

    basic_pop3& login(const string_type& id, const string_type& pass, bool apop = false);
    basic_pop3& login(const char_type* id, const char_type* pass, bool apop = false);
    basic_pop3& apop(const string_type& id, const string_type& pass);
    basic_pop3& apop(const char_type* id, const char_type* pass);

start() メソッドで SMTP サーバと接続し，login() メソッドでログイン処理を行います． login() メソッドの第 3 引数が true の場合，APOP 認証を試みます．これは，login() メソッドの代わりに apop() メソッドを実行した場合と等価です． サーバが APOP 認証に対応しているかどうか不明な場合は，apop_suppert() メソッドの返り値を第 3 引数に指定しておくと，APOP 認証が可能なときだけ APOP 認証を実行するように設定することができます．

    string_type status();

    list_type list();
    list_type uid_list();
    string_type list(int n);
    string_type uid_list(int n);

    string_type retrieve(int n);
    string_type top(int n, int line);

    basic_pop3& erase(int n);
    basic_pop3& reset();
    basic_pop3& noop();

status(), list(), uid_list(), retrieve(), top(), erase(), reset(), noop() メソッドは， それぞれ POP3 で定められている STAT, LIST, UIDL, RETR, TOP, DELE, RSET, NOOP コマンドをメールサーバへ送信し，サーバからの応答を受信します．

    bool apop_support() const;

apop_support() メソッドは，通信しているメールサーバが APOP 認証に対応している場合に true を返します．

# Related Page

1. CLX C++ Libraries - pop3s