前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXPOP3
[内部的に利用されるクラスです] POP3 プロトコルを処理するためのクラスです。
#include <SFXPOP3.h.hpp>
class SFXPOP3;
SFMTYPEDEFCLASS(SFXPOP3)

協調図

SFXPOP3 クラスの協調図

解説

SFXPOP3 クラスは、POP3 プロトコルを処理するためのクラスです。

[Note] 注意

SFXPOP3 クラスは、 SFXPOP3Receiver クラスを実装するために使用される内部実装クラスです。

SFXPOP3Receiver クラスに代わる開発者独自のメール受信クラスを実装する場合に使用します。

POP3 メール受信の手順

  1. SFXPOP3 インスタンスを生成します (この時点では、POP3 メール受信のためのリソースは確保されていません)。
  2. SFXPOP3::Open 関数を呼び出して POP3 メール受信の初期化を行います。
  3. SFXPOP3::Connect 関数を呼び出して POP3 サーバーに接続します。 POP3 サーバー接続の結果は、 SFXPOP3::Connect 関数の引数に指定したコールバック関数に通知されます (POP3 サーバーとの接続が確立すると、POP3 メール受信を開始できます)。
  4. SFXPOP3::SendCommand などの関数を使用して POP3 コマンドを発行します。 POP3 コマンドに対する POP3 サーバーからの応答は、 SFXPOP3::Connect 関数の引数に指定したコールバック関数に通知されます。
  5. 応答テキストは SFXPOP3::GetResponseText 関数を呼び出して取得します (SFXPOP3::GetResponseBuffer 関数を呼び出すと、"+OK" または "-ERR" を含む応答を取得できます)。
  6. POP3 メール受信が完了すると、 SFXPOP3::SendQuitCommand 関数を呼び出して QUIT コマンドを発行します。
  7. POP3 サーバーからの応答を確認してから、 SFXPOP3::Close 関数を呼び出して POP3 サーバーとの接続を切断します。

POP3 セッションの状態

POP3 セッションは、以下の 3 種類の状態の何れかをとります。

  1. 承認状態(Authorization State): 最初の状態です。この状態では、認証用の USER / PASS / APOP コマンドと、QUIT コマンドだけが有効です。 認証に成功すれば、トランザクション状態に移行します。
  2. トランザクション状態(Transaction State): POP3 メール受信のやり取りが行われる状態です。 QUIT コマンドが発行されるか、セッションが切断されるまでこの状態に留まります。
  3. 更新状態(Update State): QUIT コマンドが発行されると、この状態に移行し、削除マークの付いたメールメッセージを物理的に削除します。
[Caution] タイムアウトの制御

タイムアウトの制御は、アプリケーション側で行います。

[Note] POP3 プロトコルについて

POP3 プロトコルの仕様は、 RFC1939(Post Office Protocol - Version 3) を参照してください。

例 836. SFXPOP3Receiver クラスの実装

/***************************************************************************************
****************************************************************************************
***
***     File            : SFXPOP3Receiver.f.hpp
***
****************************************************************************************
****************************************************************************************/

#ifndef __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_FHPP
#define __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_FHPP

#include <SFXGeneral/SFXEnvironment.h.hpp>

SFMTYPEDEFCLASS(SFXPOP3Receiver)

#endif // __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_FHPP //


/***************************************************************************************
****************************************************************************************
***
***     File            : SFXPOP3Receiver.h.hpp
***
****************************************************************************************
****************************************************************************************/

#ifndef __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_HHPP
#define __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_HHPP

#include <SFXGeneral/SFXEnvironment.h.hpp>
#include <SFXProtocol/SFXMail/SFXPOP3Receiver.f.hpp>
#include <SFXProtocol/SFXMail/SFXPOP3.h.hpp>
#include <SFXCollection/SFXArray.h.hpp>

class SFXPOP3Receiver {
    SFMSEALCOPY(SFXPOP3Receiver)
    public:
        enum ProgressEnum {
            PROGRESS_NONE                       = 0,
            PROGRESS_CONNECT,
            PROGRESS_USER,
            PROGRESS_PASS,
            PROGRESS_LIST,
            PROGRESS_UIDL,
            PROGRESS_TOP,
            PROGRESS_RETR,
            PROGRESS_DELE,
            PROGRESS_QUIT,
            PROGRESS_DONE
        };
        enum AuthEnum {
            AUTH_NONE                           = 0,
            AUTH_APOP_AND_USERPASS,
            AUTH_ONLY_APOP,
            AUTH_ONLY_USERPASS
        };
    private:
        enum StateEnum {
            STATE_STANDBY                       = 0,
            STATE_RECEIVING
        };

    public:
        typedef Void                            (*CallbackSPP)                  (SFCError error, VoidPtr reference);
        SFMTYPEDEFSTRUCT(MailInfo)
        struct MailInfo {
            UInt32                              size;
            SFXAnsiString                       uidl;
            SFXAnsiString                       mail;
        };
        SFMTYPEDEFALIAS(SFXArray<SFXAnsiStringPtr>, UidlArray)
        SFMTYPEDEFALIAS(SFXArray<MailInfoPtr>, MailArray)

    private:
                StateEnum                       _state;
                ProgressEnum                    _progress;
                CallbackSPP                     _spp;
                VoidPtr                         _reference;
                SFXPOP3                         _pop3;
                SFXSocketAddress                _server;
                SFXAnsiString                   _user;
                SFXAnsiString                   _password;
                SInt32                          _line;
                UInt32                          _limit;
                UidlArray                       _singleUidlArray;
                UidlArrayPtr                    _targetUidlArray;
                Bool                            _invertTarget;
                Bool                            _isAutoDelete;
                SInt32                          _deleteCandNum;
                Bool                            _noUidl;
                AuthEnum                        _auth;
                Bool                            _apop;
                MailArray                       _receivedMailArray;
                SFXPOP3::NumberSizeRecPtr       _numSizeList;
                SInt32                          _numSizeCount;
                SFXPOP3::NumberUidlRecPtr       _numUidlList;
                SInt32                          _numUidlCount;
                SInt32                          _numSizeIndex;
                UInt32                          _index;
                MailInfo                        _nextMailInfo;
                Bool                            _isSSL;
                UInt32                          _sslTrustMode;

    public:
        explicit                                SFXPOP3Receiver                 (Void);
                                                ~SFXPOP3Receiver                (Void);
                SFXPOP3Ref                      GetSFXPOP3                      (Void);
                ProgressEnum                    GetProgress                     (Void) const;
                Void                            SetSSLMode                      (Bool isSSL);
                Bool                            GetSSLMode                      (Void) const;
                Void                            SetTrustMode                    (UInt32 sslTrustMode);
                UInt32                          GetTrustMode                    (Void) const;
                Void                            SetAutoDelete                   (Bool isAutoDelete);
                Bool                            GetAutoDelete                   (Void) const;
                Void                            Cancel                          (Void);
                Void                            Clear                           (Void);
                Void                            SetServer                       (SFXSocketAddressConstRef server);
                Void                            SetLimit                        (UInt32 limit);
                Void                            SetNumberOfLines                (SInt32 number);
                SFCError                        SetAccount                      (SFXAnsiStringConstRef user, SFXAnsiStringConstRef password, AuthEnum auth = AUTH_APOP_AND_USERPASS);
                SFCError                        Receive                         (CallbackSPP spp, VoidPtr reference);
                SFCError                        Receive                         (SFXAnsiStringConstRef targetUidl, CallbackSPP spp, VoidPtr reference);
                SFCError                        Receive                         (UidlArrayPtr targetUidlArray, Bool invertTarget, CallbackSPP spp, VoidPtr reference);
                SFCError                        Delete                          (CallbackSPP spp, VoidPtr reference);
                SFCError                        Delete                          (SFXAnsiStringConstRef uidl, CallbackSPP spp, VoidPtr reference);
                SFCError                        Delete                          (UidlArrayPtr targetUidlArray, Bool invertTarget, CallbackSPP spp, VoidPtr reference);
                MailArrayConstRef               GetReceivedMailArray            (Void) const;
    private:
                SFCError                        ProceedConnect                  (Void);
                SFCError                        ProceedUser                     (Void);
                SFCError                        ProceedPass                     (Void);
                SFCError                        ProceedList                     (Void);
                SFCError                        ProceedUidl                     (Bool receiving);
                SFCError                        ProceedReceivingRetr            (Void);
                SFCError                        SendAuthCommand                 (Void);
                SFCError                        ReceiveNextMail                 (BoolPtr next);
                SFCError                        DeleteNextMail                  (BoolPtr next);
                Void                            Finish                          (SFCError error);
                SFCError                        SetSingleUidl                   (SFXAnsiStringConstRef uidl);
                Void                            FreeNumSizeList                 (Void);
                Void                            FreeNumUidlList                 (Void);
                Void                            FreeSingleUidl                  (Void);
                Bool                            IsTargetUidl                    (SFXAnsiStringConstRef uidl);
                SInt32                          FindNextTarget                  (Void);
                XALLBACK_DECLARE_SFXPOP3(OnPOP3Receive)
                XALLBACK_DECLARE_SFXPOP3(OnPOP3Delete)
};

#define     XALLBACK_DECLARE_SFXPOP3RECEIVER(FUNCTION)                          XALLBACK_DECLARE_SFXPOP3(FUNCTION)

#include <SFXProtocol/SFXMail/SFXPOP3Receiver.i.hpp>

#endif // __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_HHPP //


/***************************************************************************************
****************************************************************************************
***
***     File            : SFXPOP3Receiver.i.hpp
***
****************************************************************************************
****************************************************************************************/

#ifndef __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_IHPP
#define __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_IHPP

#include <SFXGeneral/SFXEnvironment.h.hpp>

/*public */inline SFXPOP3Ref SFXPOP3Receiver::GetSFXPOP3(Void)
{
    return _pop3;
}// SFXPOP3Receiver::GetSFXPOP3 //

/*public */inline SFXPOP3Receiver::ProgressEnum SFXPOP3Receiver::GetProgress(Void) const
{
    return _progress;
}// SFXPOP3Receiver::GetProgress //

/*public */inline Void SFXPOP3Receiver::SetSSLMode(Bool isSSL)
{
    _isSSL = isSSL;
    return;
}// SFXPOP3Receiver::SetSSLMode //

/*public */inline Bool SFXPOP3Receiver::GetSSLMode(Void) const
{
    return _isSSL;
}// SFXPOP3Receiver::GetSSLMode //

/*public */inline Void SFXPOP3Receiver::SetTrustMode(UInt32 sslTrustMode)
{
    _sslTrustMode = sslTrustMode;
    return;
}// SFXPOP3Receiver::SetTrustMode //

/*public */inline UInt32 SFXPOP3Receiver::GetTrustMode(Void) const
{
    return _sslTrustMode;
}// SFXPOP3Receiver::GetTrustMode //

/*public */inline Void SFXPOP3Receiver::SetAutoDelete(Bool isAutoDelete)
{
    _isAutoDelete = isAutoDelete;
    return;
}// SFXPOP3Receiver::SetAutoDelete //

/*public */inline Bool SFXPOP3Receiver::GetAutoDelete(Void) const
{
    return _isAutoDelete;
}// SFXPOP3Receiver::GetAutoDelete //

/*public */inline Void SFXPOP3Receiver::SetServer(SFXSocketAddressConstRef server)
{
    _server.Set(server);
}// SFXPOP3Receiver::SetServer //

/*public */inline Void SFXPOP3Receiver::SetLimit(UInt32 limit)
{
    _limit = limit;
}// SFXPOP3Receiver::SetLimit //

/*public */inline Void SFXPOP3Receiver::SetNumberOfLines(SInt32 number)
{
    _line = number;
}// SFXPOP3Receiver::SetNumberOfLines //

/*public */inline SFCError SFXPOP3Receiver::Receive(CallbackSPP spp, VoidPtr reference)
{
    return Receive(null, false, spp, reference);
}// SFXPOP3Receiver::Receive //

/*public */inline SFCError SFXPOP3Receiver::Delete(CallbackSPP spp, VoidPtr reference)
{
    return Delete(null, false, spp, reference);
}// SFXPOP3Receiver::Delete //

/*public */inline SFXPOP3Receiver::MailArrayConstRef SFXPOP3Receiver::GetReceivedMailArray(Void) const
{
    return _receivedMailArray;
}// SFXPOP3Receiver::GetReceivedMailArray //

#define     XALLBACK_IMPLEMENT_SFXPOP3RECEIVER(TYPE, FUNCTION, ERROR)           XALLBACK_IMPLEMENT_SFXPOP3(TYPE, FUNCTION, ERROR)

#endif // __SOPHIAFRAMEWORK_SFXPOP3RECEIVER_IHPP //


/***************************************************************************************
****************************************************************************************
***
***     File            : SFXPOP3Receiver.i.cpp
***
****************************************************************************************
****************************************************************************************/

#include <SFXProtocol/SFXMail/SFXPOP3Receiver.h.hpp>

/*public */SFXPOP3Receiver::SFXPOP3Receiver(Void) : _state(STATE_STANDBY), _progress(PROGRESS_NONE), _line(-1), _limit(0), _targetUidlArray(null), _isAutoDelete(false), _deleteCandNum(0), _noUidl(false), _auth(AUTH_NONE), _numSizeList(null), _numUidlList(null), _isSSL(false), _sslTrustMode(SSL_TRUST_MODE_FAIL)
{
}// SFXPOP3Receiver::SFXPOP3Receiver //

/*public */SFXPOP3Receiver::~SFXPOP3Receiver(Void)
{
    Cancel();
}// SFXPOP3Receiver::~SFXPOP3Receiver //

/*public */Void SFXPOP3Receiver::Cancel(Void)
{
    _state = STATE_STANDBY;
    _progress = PROGRESS_NONE;
    _spp = null;
    _reference = null;
    _pop3.Close();
    Clear();
    return;
}// SFXPOP3Receiver::Cancel //

/*public */Void SFXPOP3Receiver::Clear(Void)
{
    MailArray::Iterator itor;
    SFXAnsiStringPtr string;
    MailInfoPtr minfo;

    _server.Set(0, 0);
    _user.Clear();
    _password.Clear();

    itor = _receivedMailArray.GetFirstIterator();
    while (itor.HasNext()) {
        minfo = itor.GetNext();
        ::delete minfo;
    }
    _receivedMailArray.Clear();
    FreeSingleUidl();
    FreeNumSizeList();
    FreeNumUidlList();
    return;
}// SFXPOP3Receiver::Clear //

/*public */SFCError SFXPOP3Receiver::SetAccount(SFXAnsiStringConstRef user, SFXAnsiStringConstRef password, AuthEnum auth)
{
    SFCError error;

    if ((error = _user.Set(user)) == SFERR_NO_ERROR) {
        if ((error = _password.Set(password)) == SFERR_NO_ERROR) {
            _auth = auth;
        }
    }
    return error;
}// SFXPOP3Receiver::SetAccount //

/*public */SFCError SFXPOP3Receiver::Receive(SFXAnsiStringConstRef targetUidl, CallbackSPP spp, VoidPtr reference)
{
    SFCError error;

    if (!targetUidl.IsEmpty()) {
        if ((error = SetSingleUidl(targetUidl)) == SFERR_NO_ERROR) {
            error = Receive(&_singleUidlArray, false, spp, reference);
        }
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    return error;
}// SFXPOP3Receiver::Receive //

/*public */SFCError SFXPOP3Receiver::Receive(UidlArrayPtr targetUidlArray, Bool invertTarget, CallbackSPP spp, VoidPtr reference)
{
    SFCError error;

    if (_state == STATE_STANDBY) {
        _targetUidlArray = targetUidlArray;
        _invertTarget = invertTarget;
        _apop = false;
        _spp = spp;
        _reference = reference;
        _pop3.Close();
        if ((error = _pop3.Open()) == SFERR_NO_ERROR) {
            _pop3.SetSSLMode(_isSSL);
            if ((error = _pop3.SetTrustMode(_sslTrustMode)) == SFERR_NO_ERROR) {
                if ((error = _pop3.Connect(_server, XALLBACK_INTERNAL(OnPOP3Receive))) == SFERR_NO_ERROR) {
                    _state = STATE_RECEIVING;
                    _progress = PROGRESS_CONNECT;
                }
            }
            if (error != SFERR_NO_ERROR) {
                _pop3.Close();
            }
        }
    }
    else {
        error = SFERR_INVALID_STATE;
    }
    return error;
}// SFXPOP3Receiver::Receive //

/*public */SFCError SFXPOP3Receiver::Delete(SFXAnsiStringConstRef uidl, CallbackSPP spp, VoidPtr reference)
{
    SFCError error;

    if (!uidl.IsEmpty()) {
        if ((error = SetSingleUidl(uidl)) == SFERR_NO_ERROR) {
            error = Delete(&_singleUidlArray, false, spp, reference);
        }
    }
    else {
        error = SFERR_INVALID_PARAM;
    }
    return error;
}// SFXPOP3Receiver::Delete //

/*public */SFCError SFXPOP3Receiver::Delete(UidlArrayPtr targetUidlArray, Bool invertTarget, CallbackSPP spp, VoidPtr reference)
{
    SFCError error;

    if (_state == STATE_STANDBY) {
        _targetUidlArray = targetUidlArray;
        _invertTarget = invertTarget;
        _spp = spp;
        _reference = reference;
        _pop3.Close();
        if ((error = _pop3.Open()) == SFERR_NO_ERROR) {
            _pop3.SetSSLMode(_isSSL);
            if ((error = _pop3.SetTrustMode(_sslTrustMode)) == SFERR_NO_ERROR) {
                if ((error = _pop3.Connect(_server, XALLBACK_INTERNAL(OnPOP3Delete))) == SFERR_NO_ERROR) {
                    _state = STATE_RECEIVING;
                    _progress = PROGRESS_CONNECT;
                }
            }
            if (error != SFERR_NO_ERROR) {
                _pop3.Close();
            }
        }
    }
    else {
        error = SFERR_INVALID_STATE;
    }
    return error;
}// SFXPOP3Receiver::Delete //

/*private */XALLBACK_IMPLEMENT_SFXPOP3(SFXPOP3Receiver, OnPOP3Receive, error)
{
    Bool next;

    if (error == SFERR_NO_ERROR) {
        switch (_progress) {
            case PROGRESS_CONNECT:
                error = ProceedConnect();
                break;
            case PROGRESS_USER:
                error = ProceedUser();
                break;
            case PROGRESS_PASS:
                error = ProceedPass();
                break;
            case PROGRESS_LIST:
                error = ProceedList();
                break;
            case PROGRESS_UIDL:
                error = ProceedUidl(true);
                break;
            case PROGRESS_RETR:
            case PROGRESS_TOP:
                error = ProceedReceivingRetr();
                break;
            case PROGRESS_DELE:
                if (_pop3.IsResponseOk()) {
                    if ((error = ReceiveNextMail(&next)) == SFERR_NO_ERROR) {
                        if (!next) {
                            _progress = PROGRESS_QUIT;
                            error = _pop3.SendQuitCommand();
                        }
                    }
                }
                else {
                    error = SFERR_FAILED;
                }
                break;
            case PROGRESS_QUIT:
                if (_pop3.IsResponseOk()) {
                    _progress = PROGRESS_DONE;
                    Finish(SFERR_NO_ERROR);
                }
                else {
                    error = SFERR_FAILED;
                }
                break;
            case PROGRESS_DONE:
            case PROGRESS_NONE:
            default:
                error = SFERR_FAILED;
                break;
        }
    }
    if (error != SFERR_NO_ERROR) {
        Finish(error);
    }
    return;
}// XALLBACK_IMPLEMENT_SFXPOP3(SFXPOP3Receiver, OnPOP3, error) //

/*private */SFCError SFXPOP3Receiver::ProceedConnect(Void)
{
    SFCError error;

    if (_auth == AUTH_NONE || _user.IsEmpty() && _password.IsEmpty()) {
// skip user authorization
        _progress = PROGRESS_LIST;
        error = _pop3.SendListCommand();
    }
    else {
        error = SendAuthCommand();
    }
    return error;
}// SFXPOP3Receiver::ProceedConnect //

/*private */SFCError SFXPOP3Receiver::ProceedUser(Void)
{
    SFCError error;

    if (_pop3.IsResponseOk()) {
        _progress = PROGRESS_PASS;
        error = _pop3.SendPassCommand(_password);
    }
    else {
        error = SFERR_FAILED;
    }
    return error;
}// SFXPOP3Receiver::ProceedUser //

/*private */SFCError SFXPOP3Receiver::ProceedPass(Void)
{
    SFCError error;

    if (_pop3.IsResponseOk()) {
        _progress = PROGRESS_LIST;
        error = _pop3.SendListCommand();
    }
    else {
        if (_apop && _auth == AUTH_APOP_AND_USERPASS) {
// The server does not support APOP.
            _apop = false;
            _progress = PROGRESS_USER;
            error = _pop3.SendUserCommand(_user);
        }
        else {
            error = SFERR_MAIL_INVALID_PASSWORD;
        }
    }
    return error;
}//SFXPOP3Receiver::ProceedPass //

/*private */SFCError SFXPOP3Receiver::ProceedList(Void)
{
    SFCError error;

    if (_pop3.IsResponseOk()) {
        FreeNumSizeList();
        if ((error = _pop3.GetListResponse(&_numSizeList, &_numSizeCount)) == SFERR_NO_ERROR) {
            if (_numSizeCount > 0) {
                _progress = PROGRESS_UIDL;
                error = _pop3.SendUidlCommand();
            }
            else {
                _progress = PROGRESS_QUIT;
                error = _pop3.SendQuitCommand();
            }
        }
    }
    else {
        error = SFERR_FAILED;
    }
    return error;
}// SFXPOP3Receiver::ProceedList //

/*private */SFCError SFXPOP3Receiver::ProceedUidl(Bool receiving)
{
    SFCError error(SFERR_NO_ERROR);
    Bool nextMail(false);

    if (!_pop3.IsResponseOk()) {
        if (_targetUidlArray == null && !_invertTarget) {
            _noUidl = true; // The server is not support uidl command.
        }
        else {
            error = SFERR_MAIL_NOT_SUPPORT_UIDL;
        }
    }
    if (error == SFERR_NO_ERROR) {
        FreeNumUidlList();
        if (!_noUidl) {
            error = _pop3.GetUidlResponse(&_numUidlList, &_numUidlCount);
        }
        else {
            _numUidlCount = _numSizeCount;
        }
        if (error == SFERR_NO_ERROR) {
            if (!receiving || _numUidlCount > 0) {
                _index = 0;
                _numSizeIndex = 0;
                error = (receiving) ? (ReceiveNextMail(&nextMail)) : (DeleteNextMail(&nextMail));
            }
            if (error == SFERR_NO_ERROR) {
                if (!nextMail) {
                    error = _pop3.SendQuitCommand();
                }
            }
        }
    }
    return error;
}// SFXPOP3Receiver::ProceedUidl //

/*private */SFCError SFXPOP3Receiver::ProceedReceivingRetr(Void)
{
    SFCError error(SFERR_NO_ERROR);
    MailInfoPtr minfo;
    Bool next;

    if (_pop3.IsResponseOk()) {
        if ((minfo = ::new MailInfo) != null) {
            if ((error = _receivedMailArray.InsertLast(minfo)) == SFERR_NO_ERROR) {
                minfo->size = _nextMailInfo.size;
                if ((error = minfo->uidl.Set(_nextMailInfo.uidl)) == SFERR_NO_ERROR) {
                    if (_progress == PROGRESS_RETR) {
                        error = _pop3.GetRetrResponse(&minfo->mail);
                    }
                    else {
                        error = _pop3.GetTopResponse(&minfo->mail);
                    }
                    if (error == SFERR_NO_ERROR) {
                        ++_index;
                        if (_isAutoDelete) {
                            _progress = PROGRESS_DELE;
                            error = _pop3.SendDeleCommand(_deleteCandNum);
                        }
                        else {
                            if ((error = ReceiveNextMail(&next)) == SFERR_NO_ERROR) {
                                if (!next) {
                                    _progress = PROGRESS_QUIT;
                                    error = _pop3.SendQuitCommand();
                                }
                            }
                        }
                    }
                }
            }
            if (error != SFERR_NO_ERROR) {
                ::delete minfo;
            }
        }
        else {
            error = SFERR_NO_MEMORY;
        }
    }
    else {
        error = SFERR_FAILED;
    }
    return error;
}// SFXPOP3Receiver::ProceedReceivingRetr //

/*private */SFCError SFXPOP3Receiver::ReceiveNextMail(BoolPtr next)
{
    SFCError error(SFERR_NO_ERROR);
    SInt32 number;

    if (_limit > 0 && _index >= _limit) {
        *next = false;
    }
    else {
        if ((number = FindNextTarget()) > -1) {
            _deleteCandNum = number;
            if (_line < 0) {
                _progress = PROGRESS_RETR;
                error = _pop3.SendRetrCommand(number);
            }
            else {
                _progress = PROGRESS_TOP;
                error = _pop3.SendTopCommand(number, _line);
            }
            *next = true;
        }
        else {
            *next = false;
        }
    }
    return error;
}// SFXPOP3Receiver::ReceiveNextMail //

/*private */XALLBACK_IMPLEMENT_SFXPOP3(SFXPOP3Receiver, OnPOP3Delete, error)
{
    Bool next;

    if (error == SFERR_NO_ERROR) {
        switch (_progress) {
            case PROGRESS_CONNECT:
                error = ProceedConnect();
                break;
            case PROGRESS_USER:
                error = ProceedUser();
                break;
            case PROGRESS_PASS:
                error = ProceedPass();
                break;
            case PROGRESS_LIST:
                error = ProceedList();
                break;
            case PROGRESS_UIDL:
                error = ProceedUidl(false);
                break;
            case PROGRESS_DELE:
                if (_pop3.IsResponseOk()) {
                    if ((error = DeleteNextMail(&next)) == SFERR_NO_ERROR) {
                        if (!next) {
                            _progress = PROGRESS_QUIT;
                            error = _pop3.SendQuitCommand();
                        }
                    }
                }
                else {
                    error = SFERR_FAILED;
                }
                break;
            case PROGRESS_QUIT:
                if (_pop3.IsResponseOk()) {
                    _progress = PROGRESS_DONE;
                    Finish(SFERR_NO_ERROR);
                }
                else {
                    error = SFERR_FAILED;
                }
                break;
            case PROGRESS_RETR:
            case PROGRESS_TOP:
            case PROGRESS_DONE:
            case PROGRESS_NONE:
            default:
                error = SFERR_FAILED;
                break;
        }
    }
    if (error != SFERR_NO_ERROR) {
        Finish(error);
    }
    return;
}// XALLBACK_IMPLEMENT_SFXPOP3(SFXPOP3Receiver, OnPOP3, error) //

/*private */SFCError SFXPOP3Receiver::DeleteNextMail(BoolPtr next)
{
    SFCError error(SFERR_NO_ERROR);
    SInt32 number;

    if ((number = FindNextTarget()) > -1) {
        _progress = PROGRESS_DELE;
        error = _pop3.SendDeleCommand(number);
        *next = true;
    }
    else {
        *next = false;
    }
    return error;
}// SFXPOP3Receiver::DeleteNextMail //

/*private */Void SFXPOP3Receiver::Finish(SFCError error)
{
    _state = STATE_STANDBY;
    FreeNumSizeList();
    FreeNumUidlList();
    _pop3.Close();
    if (_spp != null) {
        _spp(error, _reference);
    }
    return;
}// SFXPOP3Receiver::Finish //

/*private */SFCError SFXPOP3Receiver::SetSingleUidl(SFXAnsiStringConstRef uidl)
{
    SFCError error;
    SFXAnsiStringPtr string;

    FreeSingleUidl();
    if ((string = ::new SFXAnsiString(uidl)) != null) {
        if ((error = _singleUidlArray.InsertLast(string)) != SFERR_NO_ERROR) {
            ::delete string;
        }
    }
    else {
        error = SFERR_NO_MEMORY;
    }
    return error;
}// SFXPOP3Receiver::SetSingleUidl //

/*private */Void SFXPOP3Receiver::FreeNumSizeList(Void)
{
    if (_numSizeList != null) {
        ::delete [] _numSizeList;
        _numSizeList = null;
        _numSizeCount = 0;
    }
    return;
}// SFXPOP3Receiver::FreeNumSizeList //

/*private */Void SFXPOP3Receiver::FreeNumUidlList(Void)
{
    if (_numUidlList != null) {
        ::delete [] _numUidlList;
        _numUidlList = null;
        _numUidlCount = 0;
    }
    return;
}// SFXPOP3Receiver::FreeNumUidlList //

/*private */Void SFXPOP3Receiver::FreeSingleUidl(Void)
{
    UidlArray::Iterator itor;

    if (!_singleUidlArray.IsEmpty()) {
        itor = _singleUidlArray.GetFirstIterator();
        while (itor.HasNext()) {
            ::delete itor.GetNext();
        }
        _singleUidlArray.Clear();
    }
    return;
}// SFXPOP3Receiver::FreeSingleUidl //

/*private */Bool SFXPOP3Receiver::IsTargetUidl(SFXAnsiStringConstRef uidl)
{
    Bool result(false);
    SInt32 r0;

    if (_targetUidlArray == null) {
        result = true;
    }
    else {
        for (r0 = 0; r0 < _targetUidlArray->GetSize(); ++r0) {
            if (_targetUidlArray->Get(r0)->Equals(uidl)) {
                break;
            }
        }
        result = (r0 < _targetUidlArray->GetSize());
        if (_invertTarget) {
            result = !result;
        }
    }
    return result;
}// SFXPOP3Receiver::IsTargetUidl //

/*private */SInt32 SFXPOP3Receiver::FindNextTarget(Void)
{
    SInt32 result(-1);
    UInt32 number;
    UInt32 size;
    SInt32 r0;

    if (_noUidl) {
        if (_numSizeIndex < _numSizeCount) {
            _nextMailInfo.size = _numSizeList[_numSizeIndex].size;
            _nextMailInfo.uidl.Clear();
            _nextMailInfo.mail.Clear();
            ++_numSizeIndex;
            result = _numSizeIndex;
        }
    }
    else {
        for (; _numSizeIndex < _numSizeCount; ++_numSizeIndex) {
            number = _numSizeList[_numSizeIndex].number;
            size = _numSizeList[_numSizeIndex].size;
            for (r0 = 0; r0 < _numUidlCount; ++r0) {
                if (_numUidlList[r0].number == number) {
                    if (IsTargetUidl(_numUidlList[r0].uidl)) {
                        _nextMailInfo.size = size;
                        _nextMailInfo.uidl = _numUidlList[r0].uidl;
                        _nextMailInfo.mail.Clear();
                        ++_numSizeIndex;
                        result = number;
                        break;
                    }
                }
            }
            if (result > -1) {
                break;
            }
        }
    }
    return result;
}// SFXPOP3Receiver::FindNextTarget //

/*private */SFCError SFXPOP3Receiver::SendAuthCommand(Void)
{
    SFCError error(SFERR_NO_ERROR);
    SFXAnsiString challenge;
    SInt32 start, end;

    switch (_auth) {
        case AUTH_APOP_AND_USERPASS:
        case AUTH_ONLY_APOP:
            _apop = true;
            _progress = PROGRESS_PASS;
            if ((error = challenge.Set(_pop3.GetResponseText())) == SFERR_NO_ERROR) {
                if ((start = challenge.FirstIndexOf('<')) >= 0) {
                    if ((end = challenge.LastIndexOf('>')) >= 0) {
                        error = _pop3.SendApopCommand(_user, _password, challenge.Substring(start, end));
                    }
                    else {
                        error = SFERR_FAILED;
                    }
                }
                else {
                    error = SFERR_FAILED;
                }
            }
            break;
        case AUTH_ONLY_USERPASS:
            _progress = PROGRESS_USER;
            error = _pop3.SendUserCommand(_user);
            break;
        case AUTH_NONE:
        default:
            break;
    }
    return error;
}// SFXPOP3Receiver::SendAuthCommand //

参照

SFXPOP3Receiver | メール送受信 | RFC1939(Post Office Protocol - Version 3)

メンバ

コンストラクタ/デストラクタ
SFXPOP3( Void )
SFXPOP3 クラスのコンストラクタです。
~SFXPOP3( Void )
SFXPOP3 クラスのデストラクタです。
パブリック関数
Void Cancel( Void )
POP3 メール受信をキャンセルします。
Void Close( Void )
POP3 サーバーとの接続を終了します。
SFCError Connect( SFXSocketAddressConstRef address , CallbackSPP spp , VoidPtr reference )
POP3 サーバーに接続します。
SFCError GetListResponse( NumberSizeRecHandle recHandle , SInt32Ptr recCount )
LIST コマンドの応答を取得します。
SFCError GetListResponse( NumberSizeRecPtr rec )
LIST コマンドの応答を取得します。
SFCError GetLocalAddress( SFXSocketAddressPtr result )
POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
SFCError GetRemoteAddress( SFXSocketAddressPtr result )
POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
VoidConstPtr GetResponseBuffer( UInt32Ptr size = null )
応答バッファを取得します。
SFXAnsiString GetResponseText( Void )
応答テキストを取得します。
SFCError GetResponseText( SFXAnsiStringPtr result )
応答テキストを取得します。
SFCError GetRetrResponse( ACharConstHandle response )
RETR コマンドの応答を取得します。
SFCError GetRetrResponse( SFXAnsiStringPtr response )
RETR コマンドの応答を取得します。
Bool GetSSLMode( Void )
SSL 接続モードを取得します。
SFCError GetStatResponse( UInt32Ptr count = null , UInt32Ptr size = null )
STAT コマンドの応答を取得します。
SFCError GetTopResponse( ACharConstHandle response )
TOP コマンドの応答を取得します。
SFCError GetTopResponse( SFXAnsiStringPtr response )
TOP コマンドの応答を取得します。
UInt32 GetTrustMode( Void )
SSL 認証モードを取得します。
SFCError GetUidlResponse( NumberUidlRecHandle recHandle , SInt32Ptr recCount )
UIDL コマンドの応答を取得します。
SFCError GetUidlResponse( NumberUidlRecPtr rec )
UIDL コマンドの応答を取得します。
Bool IsResponseErr( Void )
直前の POP3 コマンドの応答ステータスが "-ERR" であるかどうか判定します。
Bool IsResponseOk( Void )
直前の POP3 コマンドの応答ステータスが "+OK" であるかどうか判定します。
SFCError Open( Void )
POP3 サーバーに接続するための初期化を行います。
SFCError SendApopCommand( SFXAnsiStringConstRef user , SFXAnsiStringConstRef password , SFXAnsiStringConstRef challenge )
APOP コマンドを発行します。
SFCError SendCommand( ACharConstPtr command , UInt32 size , Bool multiline )
POP3 コマンドを発行します。
SFCError SendCommand( SFXAnsiStringConstRef command , Bool multiline )
POP3 コマンドを発行します。
SFCError SendDeleCommand( SInt32 number )
DELE コマンドを発行します。
SFCError SendListCommand( Void )
LIST コマンドを発行します。
SFCError SendListCommand( SInt32 number )
LIST コマンドを発行します。
SFCError SendNoopCommand( Void )
NOOP コマンドを発行します。
SFCError SendPassCommand( SFXAnsiStringConstRef password )
PASS コマンドを発行します。
SFCError SendQuitCommand( Void )
QUIT コマンドを発行します。
SFCError SendRetrCommand( SInt32 number )
RETR コマンドを発行します。
SFCError SendRsetCommand( Void )
RSET コマンドを発行します。
SFCError SendStatCommand( Void )
STAT コマンドを発行します。
SFCError SendTopCommand( SInt32 number , UInt32 lines )
TOP コマンドを発行します。
SFCError SendUidlCommand( Void )
UIDL コマンドを発行します。
SFCError SendUidlCommand( SInt32 number )
UIDL コマンドを発行します。
SFCError SendUserCommand( SFXAnsiStringConstRef user )
USER コマンドを発行します。
Void SetSSLMode( Bool isSSL )
SSL 接続モードに設定します。
SFCError SetTrustMode( UInt32 sslTrustMode )
SSL 認証モードを設定します。
CallbackSPP
POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数の型です。
NumberSizeRec
SFXPOP3::GetListResponse 関数の返却値として使用される構造体です。
NumberUidlRec
SFXPOP3::GetUidlResponse 関数の返却値として使用される構造体です。

SFXPOP3::SFXPOP3
SFXPOP3 クラスのコンストラクタです。
[ public, explicit ]
SFXPOP3(Void);

解説

このコンストラクタでは、SSL 接続モードを OFF(false)に設定します。

[Note] 注意

POP3 メール受信に必要なリソースは、 SFXPOP3::OpenSFXPOP3::Connect などの関数を呼び出したときに確保されます。

参照

SFXPOP3::SetSSLMode | SFXPOP3::Open | SFXPOP3::Connect


SFXPOP3::~SFXPOP3
SFXPOP3 クラスのデストラクタです。
[ public, virtual ]
~SFXPOP3(Void);

解説

このデストラクタは、POP3 サーバーとの接続を終了します。

内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルし、 同時にリソースを解放します。

[Note] 注意

SFXPOP3::Close 関数と同等の処理を行います。

参照

SFXPOP3::Close


SFXPOP3::Cancel
POP3 メール受信をキャンセルします。
[ public ]
Void Cancel(Void);

解説

この関数は、POP3 メール送信をキャンセルします。

内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルします。

[Note] 注意

この関数は、内部的に SFXPOP3::Close 関数から呼び出されます。

参照

SFXPOP3::Close


SFXPOP3::Close
POP3 サーバーとの接続を終了します。
[ public ]
Void Close(Void);

解説

この関数は、POP3 サーバーとの接続を終了します。

内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルし、 同時にリソースを解放します。

[Note] 注意

この関数は、内部的に SFXPOP3::Cancel 関数を呼び出します。

[Note] POP3 サーバーとの接続の切断方法

SFXPOP3::SendQuitCommand 関数を使用して QUIT コマンドを発行し、 POP3 サーバーからの応答を確認した後、 この関数を呼び出して POP3 サーバーとの接続を切断します。

※ POP3 プロトコル(RFC1939)では、 QUIT コマンドを発行せずに強制的に切断することを推奨していないため、 通信中にこの関数を明示的に呼ぶべきではありません。

参照

SFXPOP3::SendQuitCommand | SFXPOP3::Connect | RFC1939(Post Office Protocol - Version 3)


SFXPOP3::Connect
POP3 サーバーに接続します。
[ public ]
SFCError Connect(
    SFXSocketAddressConstRef address   // [入力] POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)
    CallbackSPP spp                    // [入力] POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数
    VoidPtr reference                  // [入力] コールバック関数に渡すデータ(参照値)
);

引数

endpoint

POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を指定します。

spp

POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数を指定します。

reference

コールバック関数に渡すデータ(参照値)を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが開いていない、または既に接続されている(処理中を含む)とき: SFERR_INVALID_STATE
  • POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)が設定されていないとき: SFERR_INVALID_STATE
  • SFBNetMgr インスタンスの作成に失敗したとき: SFERR_FAILED
  • メモリ不足のとき: SFERR_NO_MEMORY
  • ネットワークエラーのとき[※コールバック関数に通知される]: BREW API ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、POP3 サーバーに接続します。

[Caution] コールバック関数

POP3 サーバー接続や POP3 コマンド発行の結果は、 spp 引数に指定するコールバック関数(SFXPOP3::CallbackSPP)に通知されます。

参照

SFXPOP3::Open | SFXPOP3::Close | SFXSocketAddress | SFXPOP3::CallbackSPP | BREW API ISOCKET_GetLastError


SFXPOP3::GetListResponse
LIST コマンドの応答を取得します。
[ public, const ]
SFCError GetListResponse(
    NumberSizeRecHandle recHandle   // [出力] NumberSizeRec 構造体の配列へのポインタ(ハンドル)
    SInt32Ptr recCount              // [出力] NumberSizeRec 構造体の配列の要素数を格納する変数へのポインタ
);
[ public, const ]
SFCError GetListResponse(
    NumberSizeRecPtr rec   // [出力] NumberSizeRec 構造体を格納する変数へのポインタ
);

引数

recHandle

POP3 サーバーが応答するメールメッセージの番号とサイズからなる SFXPOP3::NumberSizeRec 構造体の配列へのポインタ(ハンドル)が返却されます。 この配列は、呼び出し側が "::delete []" で破棄する必要があります。

recCount

POP3 サーバーが応答する recHandle 配列の要素数を格納した変数へのポインタが返却されます。

rec

POP3 サーバーが応答するメールメッセージの番号とサイズからなる SFXPOP3::NumberSizeRec 構造体を格納するための変数へのポインタが返却されます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき、または直前の POP3 コマンドの応答ステータスが "+OK" でないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、LIST コマンドの応答を取得します。

[Note] 注意

SFXPOP3::SendListCommand 関数の引数の数により使用する関数が異なります。

引数なしで SFXPOP3::SendListCommand 関数を呼んだとき

2 つの引数 recHandle と recCount を指定する必要があります。 全てのメールメッセージの番号とサイズ()を取得します。

引数 1 つで SFXPOP3::SendListCommand 関数を呼んだとき

引数 rec のみ必要です。 SFXPOP3::SendListCommand 関数で指定したメールメッセージの番号のサイズを取得します。

これらが対応していないと、この関数は失敗し、SFERR_INVALID_FORMAT が返ります。 戻り値が SFERR_NO_ERROR 以外の場合、引数に設定される値は不定となります。

[Note] 注意

LIST コマンドは、削除マークが付いていないメールメッセージのサイズを取得するためのコマンドです。

LIST コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

参照

SFXPOP3::SendListCommand | SFXPOP3::NumberSizeRec | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::GetLocalAddress
POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
[ public, const ]
SFCError GetLocalAddress(
    SFXSocketAddressPtr result   // [出力] POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)の格納先へのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • その他: BREW API ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。

参照

SFXInetAddress::LocalInetAddress | SFXTCPSocket::GetLocalAddress | SFXSocketAddress | BREW API ISOCKET_GetLastError


SFXPOP3::GetRemoteAddress
POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
[ public, const ]
SFCError GetRemoteAddress(
    SFXSocketAddressPtr result   // [出力] POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)の格納先へのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • その他: BREW API ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。

参照

SFXTCPSocket::GetRemoteAddress | SFXSocketAddress | BREW API ISOCKET_GetLastError


SFXPOP3::GetResponseBuffer
応答バッファを取得します。
[ public, const ]
VoidConstPtr GetResponseBuffer(
    UInt32Ptr size = null   // [出力] 応答バッファのサイズが格納された場所へのポインタ
);

引数

size

POP3 サーバーの応答メッセージのサイズが格納された場所へのポインタが返却されます。 取得する必要がない場合は、null を指定します[デフォルト]。

戻り値

応答バッファ(POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は null が返却されます)。

解説

この関数は、応答バッファを取得します。

[Note] 注意

POP3 サーバーの応答メッセージは、 最初に POP3 サーバーの状態を表す大文字の応答ステータス("+OK" または "-ERR")があり、 その後に付加情報として応答テキストから構成されます(付加情報はない場合もあります)。

POP3 サーバーの応答メッセージの終わりは CRLF 文字までであり、 その長さは CRLF 文字を含めて最大 512 文字です。

単一行応答の場合、 終了を表す "\r\n" を除く POP3 サーバーの応答メッセージが応答バッファに格納されます。

複数行応答の場合、 最終行の ".\r\n" を除く POP3 サーバーの応答メッセージが応答バッファに格納されます (但し、行頭のピリオドは削除されています)。

応答バッファの内容は、 何らかのコマンドを発行したり、 SFXPOP3::Close 関数を呼び出して状態は変更されるまで有効です。

※ 単一行応答と複数行応答の先頭行の最大長は CRLF を含めて 512 バイトです。 また、複数行応答の 2 行目以降の最大長は CRLF を含めて 1000 バイトです。

参照

SFXPOP3::GetResponseText | SFXPOP3::Connect | SFXPOP3::Close | RFC1939: 3. Basic Operation


SFXPOP3::GetResponseText
応答テキストを取得します。
[ public, const ]
SFXAnsiString GetResponseText(Void);
[ public, const ]
SFCError GetResponseText(
    SFXAnsiStringPtr result   // [出力] POP3 サーバーから取得した応答テキストが格納された場所へのポインタ
);

引数

result

POP3 サーバーから取得した応答テキストが格納された場所へのポインタが返却されます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

引数を指定しない場合は、応答テキスト(POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は空文字列が返却されます)。

解説

この関数は、応答テキストを取得します。

[Note] 注意
[Note] 応答テキストとは

POP3 サーバーの応答メッセージから POP3 サーバーの状態を表す大文字の応答ステータス("+OK" または "-ERR") とそれに続く空白文字を削除したテキストのことです。

単一行応答の場合、応答テキストに応答メッセージの最後を表す "\r\n" は含まれません。

複数行応答の場合は、応答テキストに最終行の ".\r\n" は含まれません(応答メッセージの行頭のピリオドは削除されます)。

※ 単一行応答と複数行応答の先頭行の最大長は CRLF を含めて 512 バイトです。 また、複数行応答の 2 行目以降の最大長は CRLF を含めて 1000 バイトです。

応答テキストの詳細は、 RFC1939: 3. Basic Operation を参照してください。

参照

SFXPOP3::GetResponseBuffer | SFXPOP3::Connect | RFC1939: 3. Basic Operation


SFXPOP3::GetRetrResponse
RETR コマンドの応答を取得します。
[ public, const ]
SFCError GetRetrResponse(
    ACharConstHandle response   // [出力] 応答バッファ内の 2 行目の行頭へのポインタ(ハンドル)
);
[ public, const ]
SFCError GetRetrResponse(
    SFXAnsiStringPtr response   // [出力] 応答バッファの 2 行目以降の内容をコピーした文字列へのポインタ
);

引数

response

応答バッファ内の 2 行目の行頭へのポインタ または応答バッファの 2 行目以降の内容をコピーした文字列へのポインタが返却されます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • response 引数が null であるとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき、または直前の POP3 コマンドの応答ステータスが "+OK" でないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、RETR コマンドの応答を取得します。

このコマンドの応答は複数行応答になります。 1 行目はコマンドの結果("+OK" または "-ERR .....")であり、 2 行目以降から ".\r\n" の最終行までの間の行はドット・スタッフィング(dot-stuffing)による行頭の "." を除けば実際のメールメッセージの内容になります。

このコマンドの応答の 2 行目以降にある実際のメールメッセージの内容は、 この関数を呼び出して取得することが可能です。 このとき、取得したメールメッセージには、 ドット・スタッフィング(dot-stuffing)による行頭の "." や最終行を表す ".\r\n" 行は取り除かれています。

※なお、このコマンドの応答の 1 行目の最大長は CRLF を含めて 512 バイト、 2 行目以降の最大長は CRLF を含めて 1000 バイトです。

[Caution] 注意

ACharConstHandle 型の response 引数の戻り値は、SFXPOP3 クラスの内部クラスのバッファへのポインタです。 呼び出し側でこのバッファを解放してはいけません。

[Note] 注意

RETR コマンドは、メールメッセージを取得するためのコマンドです。

RETR コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

参照

SFXPOP3::SendRetrCommand | SFXPOP3::GetResponseBuffer | RFC1939: 5. The TRANSACTION State


SFXPOP3::GetSSLMode
SSL 接続モードを取得します。
[ public, const ]
Bool GetSSLMode(Void);

戻り値

  • SSL 接続モードが ON であるとき: true
  • そうでないとき: false

解説

この関数は、POP3 メール受信の SSL 接続モードを取得します。

参照

SFXPOP3::SetSSLMode


SFXPOP3::GetStatResponse
STAT コマンドの応答を取得します。
[ public, const ]
SFCError GetStatResponse(
    UInt32Ptr count = null   // [出力] メールメッセージの数が格納された場所へのポインタ
    UInt32Ptr size = null    // [出力] メールメッセージの全サイズが格納された場所へのポインタ
);

引数

count

メールメッセージの数が格納された場所へのポインタが返却されます。 取得する必要がない場合、null を指定します。

size

全てのメールメッセージの合計サイズが格納された場所へのポインタが返却されます。 取得する必要がない場合、null を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき、または直前の POP3 コマンドの応答ステータスが "+OK" でないとき: SFERR_INVALID_STATE

解説

この関数は、STAT コマンドの応答を取得します。

[Note] STAT コマンドについて

STAT コマンドは、メールメッセージの数とサイズを取得するためのコマンドです。

STAT コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

参照

SFXPOP3::SendStatCommand | RFC1939: 5. The TRANSACTION State


SFXPOP3::GetTopResponse
TOP コマンドの応答を取得します。
[ public, const ]
SFCError GetTopResponse(
    ACharConstHandle response   // [出力] 応答バッファ内の 2 行目の行頭へのポインタ(ハンドル)
);
[ public, const ]
SFCError GetTopResponse(
    SFXAnsiStringPtr response   // [出力] 応答バッファの 2 行目以降の内容をコピーした文字列が格納された場所へのポインタ
);

引数

response

応答バッファ内の 2 行目の行頭へのポインタ または応答バッファの 2 行目以降の内容をコピーした文字列が格納された場所へのポインタが返却されます。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • response 引数が null であるとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき、または直前の POP3 コマンドの応答ステータスが "+OK" でないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、TOP コマンドの応答を取得します。

この関数は、 メールメッセージのヘッダーと本文から SFXPOP3::SendTopCommand 関数の lines 引数で指定した行数分を取得します。

このコマンドの応答は複数行応答になります。 1 行目はコマンドの結果("+OK" または "-ERR .....")であり、 2 行目以降から ".\r\n" の最終行までの間の行はドット・スタッフィング(dot-stuffing)による行頭の "." を除けば実際のメールメッセージの内容になります。

このコマンドの応答の 2 行目以降にある実際のメールメッセージの内容は、 この関数を呼び出して取得することが可能です。 このとき、取得したメールメッセージには、 ドット・スタッフィング(dot-stuffing)による行頭の "." や最終行を表す ".\r\n" 行は取り除かれています。

※なお、このコマンドの応答の 1 行目の最大長は CRLF を含めて 512 バイト、 2 行目以降の最大長は CRLF を含めて 1000 バイトです。

[Caution] 注意

ACharConstHandle 型の response 引数の戻り値は、SFXPOP3 クラスの内部クラスのバッファへのポインタです。 呼び出し側でこのバッファを解放してはいけません。

[Note] 注意

SFXPOP3::GetRetrResponse 関数と同等です。

[Note] TOP コマンドについて

TOP コマンドは、メールメッセージのヘッダーと本文から指定した行数分を取得するためのコマンドです。

TOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

参照

SFXPOP3::SendTopCommand | SFXPOP3::GetRetrResponse | RFC1939: 7. Optional POP3 Commands


SFXPOP3::GetTrustMode
SSL 認証モードを取得します。
[ public, const ]
UInt32 GetTrustMode(Void);

戻り値

SSL 認証モード

解説

この関数は、POP3 メール受信の SSL 認証モードを取得します。

以下の 4 種類の SSL 認証モードの何れかが返却されます。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。

参照

SFXPOP3::SetTrustMode | BREW API ISSL_NegotiateV


SFXPOP3::GetUidlResponse
UIDL コマンドの応答を取得します。
[ public, const ]
SFCError GetUidlResponse(
    NumberUidlRecHandle recHandle   // [出力] NumberUidlRec 構造体の配列へのポインタ(ハンドル)
    SInt32Ptr recCount              // [出力] NumberUidlRec 構造体の配列の要素数を格納する変数へのポインタ
);
[ public, const ]
SFCError GetUidlResponse(
    NumberUidlRecPtr rec   // [出力] NumberUidlRec 構造体へのポインタを格納する変数へのポインタ
);

引数

recHandle

メールメッセージの番号とその一意識別子からなる NumberUidlRec 構造体の配列へのポインタ(ハンドル)を返却します。 この配列は "::delete[]" で破棄する必要があります。

recCount

NumberUidlRec 構造体の配列の要素数を格納する変数へのポインタを返却します。

rec

NumberUidlRec 構造体へのポインタを格納する変数へのポインタを返却します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • rec 引数が null であるとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき、または直前の POP3 コマンドの応答ステータスが "+OK" でないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、UIDL コマンドの応答を取得します。

SFXPOP3::SendUidlCommand 関数の引数の数により使用する関数が異なります。

引数なしで SFXPOP3::SendUidlCommand 関数を呼んだとき

2 つの引数 recHandle と recCount が必要です。全てのメールメッセージの番号とその一意識別子を取得します。

引数 1 つで SFXPOP3::SendUidlCommand 関数を呼んだとき

引数 rec のみ必要です。 SFXPOP3::SendUidlCommand 関数で指定したメールメッセージの番号の一意識別子を取得します。

これらが対応していないと、この関数は失敗し、SFERR_INVALID_FORMAT を返します。 戻り値が SFERR_NO_ERROR 以外の場合、引数の値は不定となります。

[Note] UIDL コマンドについて

UIDL コマンドは、指定されたメールメッセージ番号に対する一意識別子を取得するためのコマンドです。 メールメッセージ番号を指定しなかった場合は、すべてのメールメッセージの番号とその一意識別子が返却されます。

UIDL コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

参照

SFXPOP3::SendUidlCommand | SFXPOP3::GetRetrResponse | SFXPOP3::NumberUidlRec | RFC1939: 7. Optional POP3 Commands


SFXPOP3::IsResponseErr
直前の POP3 コマンドの応答ステータスが "-ERR" であるかどうか判定します。
[ public, const ]
Bool IsResponseErr(Void);

戻り値

  • "-ERR" であるとき: true
  • そうでないとき: false

解説

この関数は、直前の POP3 コマンドの応答ステータスが "-ERR" であるかどうかを判定します。

[Caution] 注意

応答メッセージの受信に失敗したとき (POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は)も false が返却されます。

参照

SFXPOP3::GetResponseBuffer | SFXPOP3::IsResponseOk | RFC1939: 3. Basic Operation


SFXPOP3::IsResponseOk
直前の POP3 コマンドの応答ステータスが "+OK" であるかどうか判定します。
[ public, const ]
Bool IsResponseOk(Void);

戻り値

  • "+OK" であるとき: true
  • そうでないとき: false

解説

この関数は、直前の POP3 コマンドの応答ステータスが "+OK" であるかどうかを判定します。

[Caution] 注意

応答メッセージの受信に失敗したとき (POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は)も false が返却されます。

参照

SFXPOP3::GetResponseBuffer | SFXPOP3::IsResponseErr | RFC1939: 3. Basic Operation


SFXPOP3::Open
POP3 サーバーに接続するための初期化を行います。
[ public ]
SFCError Open(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが既に開いているとき: SFERR_INVALID_STATE
  • SFBNetMgr クラス、もしくは SFBSSL インスタンスの生成に失敗したとき: SFERR_FAILED
  • 失敗したとき: AEE_NET_ERROR

解説

この関数は、POP3 サーバーに接続するための初期化を行います。

[Note] 注意

この関数は、 内部的に SFXSSLSocket::Open 関数を呼び出します (TCP 接続の場合は、内部で使用している SFXSSLSocket::Connect 関数のコールバック関数内で SFXSSLSocket::Permit 関数を呼び出します)。

参照

SFXSSLSocket::Open | SFXSSLSocket::Connect | SFXSSLSocket::Permit | SFXPOP3::Close


SFXPOP3::SendApopCommand
APOP コマンドを発行します。
[ public ]
SFCError SendApopCommand(
    SFXAnsiStringConstRef user        // [入力] ユーザー名
    SFXAnsiStringConstRef password    // [入力] パスワード
    SFXAnsiStringConstRef challenge   // [入力] チャレンジコード
);

引数

user

ユーザー名を指定します。

password

パスワードを指定します。

challenge

APOP 認証のためのチャレンジコードを指定します。 EHLO コマンドの応答に含まれる、 "<" と ">" で囲まれた文字列("<" と ">" を含む)を渡します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、APOP コマンドを発行します。

この関数は、SFXPOP3::Connect 関数で POP3 サーバーに接続した直後に呼び出します。

[Note] APOP コマンドについて

APOP コマンドは、APOP 認証のためのコマンドです(USER / PASS コマンドを用いた認証の代わりに利用されます)。

APOP コマンドでは、平文のパスワードを送信せずに認証を行うことができます。

APOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands


SFXPOP3::SendCommand
POP3 コマンドを発行します。
[ public ]
SFCError SendCommand(
    ACharConstPtr command   // [入力] POP3 コマンド文字列
    UInt32 size             // [入力] POP3 コマンド文字列のサイズ
    Bool multiline          // [入力] 複数行応答の POP3 コマンドかどうか
);
[ public ]
SFCError SendCommand(
    SFXAnsiStringConstRef command   // [入力] POP3 コマンド文字列
    Bool multiline                  // [入力] 複数行応答の POP3 コマンドかどうか
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 引数が不正であるとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、POP3 コマンドを発行します。

POP3 コマンドは、大文字小文字の区別のないキーワード(コマンド名)と 0 個以上の引数で構成されます。 そして全てのコマンドは "\r\n" の文字で終わります。

キーワードと引数は、印刷可能な ASCII 文字から構成され、1 つ以上の空白文字で区切られます。 キーワードは 3 または 4 文字、引数は最大 40 文字までの長さの文字列を指定できます。

単一行または複数行の応答のコマンドであるかどうかは、引数で指定します。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::SendApopCommand | SFXPOP3::SendDeleCommand | SFXPOP3::SendListCommand | SFXPOP3::SendNoopCommand | SFXPOP3::SendPassCommand | SFXPOP3::SendQuitCommand | SFXPOP3::SendRetrCommand | SFXPOP3::SendRsetCommand | SFXPOP3::SendStatCommand | SFXPOP3::SendTopCommand | SFXPOP3::SendUidlCommand | SFXPOP3::SendUserCommand | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 3. Basic Operation


SFXPOP3::SendDeleCommand
DELE コマンドを発行します。
[ public ]
SFCError SendDeleCommand(
    SInt32 number   // [入力] メッセージ番号
);

引数

number

削除するメールメッセージの番号を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、DELE コマンドを発行します。

[Note] 注意

DELE コマンドは、メールメッセージに削除するためのマークをつけるコマンドです。

QUIT コマンドが発行されるまではメールメッセージは物理的に削除されません。

DELE コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::SendQuitCommand SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::SendListCommand
LIST コマンドを発行します。
[ public ]
SFCError SendListCommand(Void);
[ public ]
SFCError SendListCommand(
    SInt32 number   // [入力] メールメッセージ番号
);

引数

number

メールメッセージ番号(1 以上の整数)を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • number が 0 以下のとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、LIST コマンドを発行します。

すべてのメールメッセージのサイズを取得するには、引数を指定せずにこの関数を呼び出します。 特定のメールメッセージのサイズを取得するには、引数にそのメールメッセージ番号を指定します。 LIST コマンドの結果は、SFXPOP3::GetListResponse 関数で取得します。

[Note] LIST コマンドについて

LIST コマンドは、 削除マークの付いていないメールメッセージのサイズを取得するためのコマンドです。

LIST コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::GetListResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::SendNoopCommand
NOOP コマンドを発行します。
[ public ]
SFCError SendNoopCommand(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、NOOP コマンドを発行します。

POP3 サーバーは NOOP コマンドを受け取ると、応答メッセージだけを返します。

[Note] NOOP コマンドについて

NOOP コマンドを発行しても何も起きません。

このコマンドによりタイマによる自動ログアウトを回避したり、 POP3 サーバーとの接続を確認することができます。

NOOP コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::SendPassCommand
PASS コマンドを発行します。
[ public ]
SFCError SendPassCommand(
    SFXAnsiStringConstRef password   // [入力] パスワード
);

引数

password

パスワードを指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、PASS コマンドを発行します。

この関数は、SFXPOP3::SendUserCommand 関数でユーザー名を送信した直後に呼び出します。

[Note] PASS コマンドについて

PASS コマンドは、ユーザー認証に必要なパスワードを指定するためのコマンドです。

このコマンドは、USER コマンドの直後のみ有効です。 PASS コマンドに失敗した場合は、USER コマンドを再発行しなければいけません。

PASS コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands


SFXPOP3::SendQuitCommand
QUIT コマンドを発行します。
[ public ]
SFCError SendQuitCommand(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、QUIT コマンドを発行します。

[Note] POP3 メール受信のセッションの終了

この関数で QUIT コマンドを発行して、その応答を確認してから、SFXPOP3::Close 関数を呼び出して POP3 サーバーとの接続を切断します。

[Note] QUIT コマンドについて

QUIT コマンドは、POP3 メール受信のセッションを終了するためのコマンドです。

セッションがトランザクション状態にあるときに QUIT コマンドが発行されると、 更新状態に移行し、セッションが終了する前に DELE コマンドにより削除マークのついたメールメッセージをすべて物理的に削除します。

QUIT コマンドの詳細は、 RFC1939: 6. The UPDATE State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::Close | SFXPOP3::SendDeleCommand | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 6. The UPDATE State


SFXPOP3::SendRetrCommand
RETR コマンドを発行します。
[ public ]
SFCError SendRetrCommand(
    SInt32 number   // [入力] メッセージ番号
);

引数

number

メールメッセージ番号(1 以上の整数)を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • number が 0 以下のとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、RETR コマンドを発行します。

[Note] RETR コマンドについて

RETR コマンドは、指定された番号を持つメールメッセージを取得するためのコマンドです。

指定された番号を持つメッセージが存在する場合、 POP3 サーバーから RFC822 メッセージを受信します。

このコマンドは、トランザクション状態でのみ有効です。

このコマンドの応答は複数行応答になります。 1 行目はコマンドの結果("+OK" または "-ERR .....")であり、 2 行目以降から ".\r\n" の最終行までの間の行はドット・スタッフィング(dot-stuffing)による行頭の "." を除けば実際のメールメッセージの内容になります。

このコマンドの応答の 2 行目以降にある実際のメールメッセージの内容は、 SFXPOP3::GetRetrResponse 関数を呼び出して取得することが可能です。 このとき、取得したメールメッセージには、 ドット・スタッフィング(dot-stuffing)による行頭の "." や最終行を表す ".\r\n" 行は取り除かれています。

※なお、このコマンドの応答の 1 行目の最大長は CRLF を含めて 512 バイト、 2 行目以降の最大長は CRLF を含めて 1000 バイトです。

RETR コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::GetRetrResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State | RFC822: Standard for the Format of ARPA-Internet Text Messages


SFXPOP3::SendRsetCommand
RSET コマンドを発行します。
[ public ]
SFCError SendRsetCommand(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、RSET コマンドを発行します。

SFXPOP3::SendUserCommand / SFXPOP3::SendPassCommand 関数の結果は破棄され、 POP3 サーバーに接続したときの状態(初期状態)になります。

[Note] RSET コマンドについて

RSET コマンドは、POP3 メール受信のセッションをリセットするためのコマンドです。

RSET コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::SendStatCommand
STAT コマンドを発行します。
[ public ]
SFCError SendStatCommand(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、STAT コマンドを発行します。

STAT コマンドの結果は、SFXPOP3::GetStatResponse 関数で取得します。

[Note] STAT コマンドについて

STAT コマンドは、メールボックス内のメールメッセージの数とサイズを取得するためのコマンドです。

STAT コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::GetStatResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State


SFXPOP3::SendTopCommand
TOP コマンドを発行します。
[ public ]
SFCError SendTopCommand(
    SInt32 number   // [入力] メッセージ番号
    UInt32 lines    // [入力] 取得する行数
);

引数

number

メールメッセージ番号(1 以上の整数)を指定します。

lines

取得する本文の行数(0 以上の整数)を指定します。 0 の場合、ヘッダーのみの取得します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • number が 0 以下のとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、TOP コマンドを発行します (メールメッセージのヘッダーと本文から lines 引数で指定した行数分を取得します)。

TOP コマンドの結果は、 SFXPOP3::GetTopResponse 関数で取得します。

[Note] TOP コマンドについて

TOP コマンドは、メールメッセージのヘッダーと本文の指定した行数分を取得するためのコマンドです。

TOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::GetTopResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands


SFXPOP3::SendUidlCommand
UIDL コマンドを発行します。
[ public ]
SFCError SendUidlCommand(Void);
[ public ]
SFCError SendUidlCommand(
    SInt32 number   // [入力] メールメッセージの番号
);

引数

number

メールメッセージの番号(1 以上の整数)を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • number が 0 以下のとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、UIDL コマンドを発行します。

特定のメールメッセージの一意識別子を取得する場合は、 引数にそのメールメッセージの番号を指定します。

すべてのメールメッセージの番号とその一意識別子を取得する場合は、 引数を指定せずにこの関数を呼び出します。

UIDL コマンドの結果は、 コールバック関数内で SFXPOP3::GetUidlResponse 関数を呼び出して取得します。

[Note] UIDL コマンドについて

UIDL コマンドは、指定されたメールメッセージ番号に対する一意識別子を取得するためのコマンドです。 メールメッセージ番号を指定しなかった場合は、すべてのメールメッセージの番号とその一意識別子が返却されます。

UIDL コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::GetUidlResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands


SFXPOP3::SendUserCommand
USER コマンドを発行します。
[ public ]
SFCError SendUserCommand(
    SFXAnsiStringConstRef user   // [入力] ユーザー名
);

引数

user

ユーザー名を指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE

解説

この関数は、USER コマンドを発行します。

この関数は、SFXPOP3::Connect 関数で POP3 サーバーに接続してから呼び出します。

[Note] USER コマンドについて

USER コマンドは、ユーザー認証に必要なユーザー名を指定するためのコマンドです。

USER コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。

[Caution] 通信エラー / コマンド エラーの取得

戻り値として返るのは、内部処理でのエラーだけです。

通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。

コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。

参照

SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands


SFXPOP3::SetSSLMode
SSL 接続モードに設定します。
[ public ]
Void SetSSLMode(
    Bool isSSL   // [入力] SSL 接続モードを ON にするか否か
);

解説

この関数は、SSL 接続モードを設定します。

デフォルト値: false(SSL 接続モードは OFF)

[Note] 注意

SSL 接続モードを ON する場合、isSSL 引数に true を指定します。

参照

SFXPOP3::GetSSLMode | SFXPOP3::SFXPOP3


SFXPOP3::SetTrustMode
SSL 認証モードを設定します。
[ public ]
SFCError SetTrustMode(
    UInt32 sslTrustMode   // [入力] SSL 認証モード
);

引数

sslTrustMode

以下の 4 種類の何れかの SSL 認証モードを指定します。

  • SSL_TRUST_MODE_FAIL: デフォルトです。認証エラーがあると接続が失敗します。
  • SSL_TRUST_MODE_CHECK: 認証エラーの場合、チェックまたは無効にできるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべての認証エラーを無効にします。
  • SSL_TRUST_MODE_ALWAYS: 認証をチェックできるように常に中断します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき: SFERR_INVALID_STATE

解説

この関数は、POP3 メール受信の SSL 認証モードを設定します。

デフォルト値: SSL_TRUST_MODE_FAIL

設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。
[Note] 注意

SFXPOP3::Connect 関数を使用して POP3 サーバーに接続する直前に、 この関数を呼び出して SSL 認証モードを設定します。

参照

SFXPOP3::GetTrustMode | SFXPOP3::Connect | SFXSSLSocket::SetTrustMode | BREW API ISSL_NegotiateV


SFXPOP3::CallbackSPP
POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数の型です。
typedef Void(* SFXPOP3::CallbackSPP)(SFCError error, VoidPtr data)

解説

POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数の型です。

このコールバック関数は、SFXPOP3::Connect 関数の spp 引数に指定します。 POP3 サーバー接続や POP3 コマンド発行の結果(エラー値)は、このコールバック関数に通知されます。

第 1 引数にエラーコード、 第 2 引数は SFXPOP3::Connect 関数で指定した引数(通常、SFXPOP3 インスタンス: this)が渡されます。

参照

SFXPOP3::Connect


SFXPOP3::NumberSizeRec
SFXPOP3::GetListResponse 関数の返却値として使用される構造体です。
SFMTYPEDEFSTRUCT(NumberSizeRec)
struct NumberSizeRec {
    SInt32  number;  // メールメッセージの番号
    UInt32  size;    // メールメッセージのサイズ(オクテット数)
};

解説

SFXPOP3::GetListResponse 関数の返却値として使用される構造体です。 number はメールメッセージ の番号を示し、size はメールメッセージのサイズ(オクテット数)を表します。

参照

SFXPOP3::GetListResponse


SFXPOP3::NumberUidlRec
SFXPOP3::GetUidlResponse 関数の返却値として使用される構造体です。
SFMTYPEDEFSTRUCT(NumberUidlRec)
struct NumberUidlRec {
    SInt32          number;  // メールメッセージの番号
    SFXAnsiString   uidl;    // メールメッセージの一意識別子
};

解説

SFXPOP3::GetUidlResponse 関数の返却値として使用される構造体です。 number はメールメッセージの番号、uidl はメールメッセージの一意識別子を表します。

参照

SFXPOP3::GetUidlResponse