前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXPOP3Receiver
POP3 メール受信クラスです。
#include <SFXPOP3Receiver.h.hpp>
class SFXPOP3Receiver;
SFMTYPEDEFCLASS(SFXPOP3Receiver)

協調図

SFXPOP3Receiver クラスの協調図

解説

SFXPOP3Receiver クラスは、 POP3 メール受信を行うクラスです。

[Note] 注意

このクラスは、SFXPOP3 クラスを使用して実装されています。

POP3 メール受信の手順

  1. SFXPOP3Receiver インスタンスを作成します。
  2. SFXPOP3Receiver::SetServer 関数で POP3 サーバーのドメイン名(または IP アドレス)とポート番号を設定します(ドメイン名の解決は自動的に行われます)。
  3. SFXPOP3Receiver::SetAccount 関数でアカウント情報(ユーザー名、パスワード、認証方式)を設定します。
  4. メールを受信した後で POP サーバーから削除する場合は、引数に true を指定して SFXPOP3Receiver::SetAutoDelete 関数を呼び出します。
  5. メール受信完了が通知されるコールバック関数を指定して SFXPOP3Receiver::Receive 関数を呼び出します。 この操作により、メール受信が開始します。
[Caution] タイムアウトの制御

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

[Caution] 前提条件

UIDL コマンドを実装した POP3 サーバーが前提となります。

例 837. SFXPOP3Receiver クラスを使用してメールを受信する方法

class MyClass {
private:
    SFXPOP3Receiver _receiver;
    XALLBACK_DECLARE_SFXPOP3RECEIVER(POP3Callback)
public:
    Void Start(Void);
};

Void MyClass::Start(Void)
{
    // POP3 サーバーのドメイン名(または IP アドレス)とポート番号を指定する: ドメイン名は自動解決される
    _receiver.SetServer(SFXSocketAddress("pop3server.example.com:110"));

    // ユーザー名とパスワードを設定する
    _receiver.SetAccount("user", "password");

    // 受信したメールを POP3 サーバーから削除する場合は以下のコードを追加する
    // ※デフォルト設定では、受信したメールは POP3 サーバーから削除されない
    // _receiver.SetAutoDelete(true);

    // メールを受信する
    // ※ メール受信の結果は POP3Callback 関数に通知される
    if ((error = _receiver.Receive(XALLBACK_INTERNAL(POP3Callback)))
        != SFERR_NO_ERROR) {
        // error が SFERR_NO_ERROR でない場合はコールバックが戻らないので、
        // ここでエラー処理をする
    }
}

// メール受信の結果が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXPOP3RECEIVER(MyClass, POP3Callback, error)
{
    SInt32 i;

    if (error == SFERR_NO_ERROR) { 
        //受信に成功した場合

        // 受信したメールメッセージの配列(MailArray)を取得する
        SFXPOP3Receiver::MailArrayConstRef mailArray = receiver.GetReceivedMailArray();

        // メールメッセージの数を表示する
        TRACE("received %d mails", mailArray.GetSize());

        for (i = 0; i < mailArray.GetSize() ; i++) {
            SFXPOP3Receiver::MailInfoPtr minfo = mailArray[i];

            // メールメッセージのサイズ、一意識別子、ヘッダーと本文を表示する
            TRACE("%d, %s, %s", minfo->size, minfo->uidl.GetCString(), minfo->mail.GetCString());

        }
    }
}

参照

SFXMailMessage | SFXPOP3 | メール送受信

メンバ

コンストラクタ/デストラクタ
SFXPOP3Receiver( Void )
SFXPOP3Receiver クラスのコンストラクタです。
~SFXPOP3Receiver( Void )
SFXPOP3Receiver クラスのデストラクタです。
パブリック関数
Void Cancel( Void )
POP3 メール受信をキャンセルします。
Void Clear( Void )
SFXPOP3Receiver インスタンスの内部変数を初期化します。
SFCError Delete( CallbackSPP spp , VoidPtr reference )
メールメッセージを削除します。
SFCError Delete( SFXAnsiStringConstRef uidl , CallbackSPP spp , VoidPtr reference )
メールメッセージを削除します。
SFCError Delete( UidlArrayPtr targetUidlArray , Bool invertTarget , CallbackSPP spp , VoidPtr reference )
メールメッセージを削除します。
Bool GetAutoDelete( Void )
メール受信時に POP3 サーバーからメールメッセージを削除するか否かを取得します。
ProgressEnum GetProgress( Void )
POP3 メール受信の進行状態を表す定数を取得します。
MailArrayConstRef GetReceivedMailArray( Void )
受信したメールメッセージ情報の配列を取得します。
SFXPOP3Ref GetSFXPOP3( Void )
内部で保持している SFXPOP3 インスタンスを取得します。
Bool GetSSLMode( Void )
SSL 接続モードを取得します。
UInt32 GetTrustMode( Void )
SSL 認証モードを取得します。
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 SetAccount( SFXAnsiStringConstRef user , SFXAnsiStringConstRef password , AuthEnum auth = AUTH_APOP_AND_USERPASS )
アカウント情報(ユーザー名、パスワード、POP3 認証方式)を設定します。
Void SetAutoDelete( Bool isAutoDelete )
メール受信時に POP3 サーバーからメールメッセージを削除するか否かを設定します。
Void SetLimit( UInt32 limit )
受信するメールメッセージの制限数を設定します。
Void SetNumberOfLines( SInt32 number )
受信するメールメッセージの制限行を設定します。
Void SetSSLMode( Bool isSSL )
SSL 接続のモードを設定します。
Void SetServer( SFXSocketAddressConstRef server )
POP3 サーバーのドメイン名(または IP アドレス)とポート番号を設定します。
Void SetTrustMode( UInt32 sslTrustMode )
SSL 認証モードを設定します。
AuthEnum
POP3 認証方式を表す定数です。
CallbackSPP
POP3 メール受信・削除の結果が通知されるコールバック関数の型です。
MailArray
メールメッセージ情報の配列です。
MailInfo
メールメッセージ情報を表す構造体です。
ProgressEnum
POP3 メール受信の進行状態を表す定数です。
UidlArray
メールメッセージの一意識別子の配列を表す型です。

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

解説

このコンストラクタは、以下の初期化処理を行います。

  1. POP3 メール受信の進行状態を PROGRESS_NONE(SFXPOP3Receiver::ProgressEnum)に初期化します。
  2. メールを受信する UIDL 配列へのポインタ(内部変数)を null に初期化します(参照: SFXPOP3Receiver::Receive)。
  3. メール受信時にメールを削除しないように設定します(参照: SFXPOP3Receiver::SetAutoDelete)。
  4. POP3 通信の認証方式を AUTH_NONE に設定します(参照: SFXPOP3Receiver::AuthEnum)。
  5. 受信するメールの数を制限しないように設定します(参照: SFXPOP3Receiver::SetLimit)。
  6. 受信するメールの行数を制限しないように設定します(参照: SFXPOP3Receiver::SetNumberOfLines)。
  7. SSL 接続を使用しない設定にします(参照: SFXPOP3Receiver::SetSSLMode)。
  8. SSL 認証モードを SSL_TRUST_MODE_FAIL に設定します(参照: SFXPOP3Receiver::SetTrustMode)。
[Note] 注意

このコンストラクタでは、 POP3 メール受信に必要なリソースは割り当てられていません。

POP3 メール受信に必要なリソースは SFXPOP3Receiver::Receive 関数、 または SFXPOP3Receiver::Delete 関数を呼び出して POP3 サーバーに接続するときに確保されます。

内部実装

このコンストラクタの内部実装は以下の通りです。

/*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 //

参照

SFXPOP3Receiver::Receive | SFXPOP3Receiver::Delete | SFXPOP3Receiver::SetAutoDelete | SFXPOP3Receiver::SetAccount | SFXPOP3Receiver::SetLimit | SFXPOP3Receiver::SetNumberOfLines | SFXPOP3Receiver::SetSSLMode | SFXPOP3Receiver::SetTrustMode | SFXPOP3Receiver::ProgressEnum | SFXPOP3Receiver::AuthEnum


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

解説

このデストラクタは、SFXPOP3Receiver::Cancel 関数を呼び出して POP3 メール受信をキャンセルしてからインスタンスを破棄します。

内部実装

このデストラクタの内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::Cancel


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

解説

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

具体的には、以下の処理を行います。

  1. POP3 メール受信の進行状態を PROGRESS_NONE(SFXPOP3Receiver::ProgressEnum)に初期化します。
  2. SFXPOP3::Close 関数を呼び出して POP3 メール受信を中断・終了します。
  3. SFXPOP3Receiver::Clear 関数を呼び出してメール受信用のヒープを解放し、内部変数を初期化します。
  4. メール受信・削除の結果を通知するコールバック(SFXPOP3Receiver::CallbackSPP)の登録を解除します。
[Note] 注意

この関数は、内部的に SFXPOP3Receiver::~SFXPOP3Receiver デストラクタから呼び出されます。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::Receive | SFXPOP3Receiver::Delete | SFXPOP3::Close | SFXPOP3Receiver::Clear | SFXPOP3Receiver::~SFXPOP3Receiver | SFXPOP3Receiver::CallbackSPP | SFXPOP3Receiver::ProgressEnum


SFXPOP3Receiver::Clear
SFXPOP3Receiver インスタンスの内部変数を初期化します。
[ public ]
Void Clear(Void);

解説

この関数は、SFXPOP3Receiver インスタンスの内部変数を初期化します。

具体的には、以下の処理を行います。

  1. メール受信用に確保したヒープを解放します。
  2. ユーザー名とパスワードをクリアします(参照: SFXPOP3Receiver::SetAccount)。
[Note] 注意

この関数は、内部的に 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 //

/*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 (!.IsEmpty()) {
        itor = _singleUidlArray.GetFirstIterator();
        while (itor.HasNext()) {
            ::delete itor.GetNext();
        }
        _singleUidlArray.Clear();
    }
    return;
}// SFXPOP3Receiver::FreeSingleUidl //

参照

SFXPOP3Receiver::SetAccount | SFXPOP3Receiver::Cancel


SFXPOP3Receiver::Delete
メールメッセージを削除します。
[ public ]
SFCError Delete(
    CallbackSPP spp     // [入力] POP3 メール削除の結果が通知されるコールバック関数
    VoidPtr reference   // [入力] コールバック関数に渡すデータ(参照値)
);
[ public ]
SFCError Delete(
    SFXAnsiStringConstRef uidl   // [入力] 削除するメールメッセージの一意識別子
    CallbackSPP spp              // [入力] POP3 メール削除完了が通知されるコールバック関数
    VoidPtr reference            // [入力] コールバック関数に渡すデータ(参照値)
);
[ public ]
SFCError Delete(
    UidlArrayPtr targetUidlArray   // [入力] ターゲットとなるメールメッセージの一意識別子の配列
    Bool invertTarget              // [入力] targetUidlArray 引数に指定した以外のメールメッセージを削除するかどうか
    CallbackSPP spp                // [入力] POP3 メール削除完了が通知されるコールバック関数
    VoidPtr reference              // [入力] コールバック関数に渡すデータ(参照値)
);

引数

uidl

削除するメールメッセージの一意識別子を指定します。

targetUidlArray

ターゲットとなるメールメッセージの一意識別子の配列を指定します。

null を指定した場合、POP3 サーバーにある全てのメールメッセージを指定したことになります。

デフォルトは null です。

invertTarget

targetUidlArray 引数に指定したメールメッセージ以外のメールメッセージを削除するかを指定します。

false の場合、targetUidlArray 引数に指定したメールメッセージを削除します。

true の場合、targetUidlArray 引数に指定した以外のメールメッセージを削除します。

デフォルトは false です。

spp

POP3 メール削除完了が通知されるコールバック関数を指定します。

spp

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

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • uidl 引数が空文字列であるとき: SFERR_INVALID_PARAM
  • 受信中のとき、ソケットが既に開いているとき、または接続の確立に失敗したとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY
  • 失敗したとき: SFERR_FAILED
  • ソケットの作成に失敗したとき: AEE_NET_ERROR
  • パスワードが正しくないとき: SFERR_MAIL_INVALID_PASSWORD(0x6801)
  • サーバーが UIDL コマンドをサポートしていないとき: SFERR_MAIL_NOT_SUPPORT_UIDL(0x6802)

解説

この関数は、引数に指定されたメールメッセージを POP3 サーバーから削除します。

[Caution] POP3 メール削除処理の結果

POP3 メール削除処理の結果は、spp 引数に指定したコールバック関数に通知されます。 この関数の戻り値には反映されません。

[Note] メールメッセージの一意識別子について

メールメッセージの一意識別子の詳細は RFC1939: UIDL Command を参照してください。

内部実装

この関数の内部実装は以下の通りです。

/*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, 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::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::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 */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 //

/*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::Finish(SFCError error)
{
    _state = STATE_STANDBY;
    FreeNumSizeList();
    FreeNumUidlList();
    _pop3.Close();
    if (_spp != null) {
        _spp(error, _reference);
    }
    return;
}// SFXPOP3Receiver::Finish //

参照

SFXPOP3Receiver::Receive | SFXPOP3Receiver::CallbackSPP | RFC1939: UIDL Command


SFXPOP3Receiver::GetAutoDelete
メール受信時に POP3 サーバーからメールメッセージを削除するか否かを取得します。
[ public, const ]
Bool GetAutoDelete(Void);

戻り値

メール受信時に POP3 サーバーからメールメッセージを削除するか否か(Bool 値)

解説

この関数は、メール受信時に POP3 サーバーからメールメッセージを削除するか否かを取得します。

[Note] 注意

SFXPOP3Receiver::Receive 関数を使用して受信したメールメッセージを POP3 サーバーから削除するか否かを取得します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::SetAutoDelete | SFXPOP3Receiver::Receive


SFXPOP3Receiver::GetProgress
POP3 メール受信の進行状態を表す定数を取得します。
[ public, const ]
ProgressEnum GetProgress(Void);

戻り値

POP3 メール受信の進行状態を表す定数(SFXPOP3Receiver::ProgressEnum の何れかの定数)。

解説

この関数は、POP3 メール受信の進行状態を表す定数を取得します。

[Note] 注意

POP3 メール受信が失敗したときにコールバック関数内でこの関数を呼び出すと、 エラーが発生した段階を取得できます。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::ProgressEnum


SFXPOP3Receiver::GetReceivedMailArray
受信したメールメッセージ情報の配列を取得します。
[ public, const ]
MailArrayConstRef GetReceivedMailArray(Void);

戻り値

受信したメールメッセージ情報の配列(SFXPOP3Receiver::MailArray

解説

この関数は、受信したメールメッセージ情報の配列(SFXPOP3Receiver::MailInfo へのポインタ) の配列(SFXPOP3Receiver::MailArray)を取得します。

[Note] 注意

この関数は、SFXPOP3Receiver::Receive 関数の spp 引数に指定するメール受信完了が通知されるコールバック関数内で呼び出します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::MailArray | SFXPOP3Receiver::MailInfo | SFXPOP3Receiver::Receive


SFXPOP3Receiver::GetSFXPOP3
内部で保持している SFXPOP3 インスタンスを取得します。
[ public ]
SFXPOP3Ref GetSFXPOP3(Void);

戻り値

内部で保持している SFXPOP3 インスタンス

解説

この関数は、内部で保持している SFXPOP3 インスタンスを取得します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3


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

戻り値

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

解説

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

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::SetSSLMode


SFXPOP3Receiver::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: トラストをチェックできるように常に中断します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::SetTrustMode | BREW API ISSL_NegotiateV


SFXPOP3Receiver::Receive
メールメッセージを受信します。
[ public ]
SFCError Receive(
    CallbackSPP spp     // [入力] POP3 メール受信の結果が通知されるコールバック関数
    VoidPtr reference   // [入力] コールバック関数に渡すデータ(参照値)
);
[ public ]
SFCError Receive(
    SFXAnsiStringConstRef targetUidl   // [入力] 受信するメールメッセージの一意識別子
    CallbackSPP spp                    // [入力] POP3 メール受信完了が通知されるコールバック関数
    VoidPtr reference                  // [入力] コールバック関数に渡すデータ(参照値)
);
[ public ]
SFCError Receive(
    UidlArrayPtr targetUidlArray   // [入力] ターゲットとなるメールメッセージの一意識別子の配列
    Bool invertTarget              // [入力] targetUidlArray 引数に指定した以外のメールメッセージを取得するかどうか
    CallbackSPP spp                // [入力] POP3 メール受信完了が通知されるコールバック関数
    VoidPtr reference              // [入力] コールバック関数に渡すデータ(参照値)
);

引数

targetUidl

受信するメールメッセージの一意識別子を指定します。

targetUidlArray

ターゲットとなるメールメッセージの一意識別子の配列を指定します。

null を指定した場合、POP3 サーバーにある全てのメールメッセージを指定したことになります。

デフォルトは null です。

invertTarget

targetUidlArray 引数に指定したメールメッセージ以外のメールメッセージを受信するかを指定します。

false の場合、targetUidlArray 引数に指定したメールメッセージを受信します。

true の場合、targetUidlArray 引数に指定した以外のメールメッセージを受信します。

デフォルトは false です。

spp

POP3 メール受信完了が通知されるコールバック関数を指定します。

spp

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

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • uidl 引数が空文字列であるとき: SFERR_INVALID_PARAM
  • 受信中のとき、またはソケットが既に開いているとき、または接続の確立に失敗したとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY
  • ソケットの作成に失敗したとき: AEE_NET_ERROR
  • パスワードが正しくないとき: SFERR_MAIL_INVALID_PASSWORD(0x6801)
  • サーバーが UIDL コマンドをサポートしていないとき: SFERR_MAIL_NOT_SUPPORT_UIDL(0x6802)

解説

この関数は、引数に指定されたメールメッセージを POP3 サーバーから受信します。

[Note] 注意

受信したメールメッセージは、 SFXPOP3Receiver::GetReceivedMailArray 関数で得られる SFXPOP3Receiver::MailInfo の配列から取得します。

[Caution] POP3 メール受信処理の結果

POP3 メール受信処理の結果は、spp 引数に指定されたコールバック関数に通知されます。 この関数の戻り値には反映されません。

[Note] メールメッセージの一意識別子について

メールメッセージの一意識別子の詳細は RFC1939: UIDL Command を参照してください。

内部実装

この関数の内部実装は以下の通りです。

/*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 //

/*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 */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 //

/*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::Finish(SFCError error)
{
    _state = STATE_STANDBY;
    FreeNumSizeList();
    FreeNumUidlList();
    _pop3.Close();
    if (_spp != null) {
        _spp(error, _reference);
    }
    return;
}// SFXPOP3Receiver::Finish //

参照

SFXPOP3Receiver::GetReceivedMailArray | SFXPOP3Receiver::Delete | SFXPOP3Receiver::MailInfo | SFXPOP3Receiver::CallbackSPP | SFXPOP3Receiver::SFXPOP3Receiver | RFC1939: UIDL Command


SFXPOP3Receiver::SetAccount
アカウント情報(ユーザー名、パスワード、POP3 認証方式)を設定します。
[ public ]
SFCError SetAccount(
    SFXAnsiStringConstRef user               // [入力] ユーザー名
    SFXAnsiStringConstRef password           // [入力] パスワード
    AuthEnum auth = AUTH_APOP_AND_USERPASS   // [入力] POP3 認証方式
);

引数

user

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

password

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

auth

POP3 認証方式を指定します。 デフォルトは AUTH_APOP_AND_USERPASS です。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY

解説

この関数は、アカウント情報(ユーザー名、パスワード、認証方式)を設定します。

auth 引数に指定する POP3 認証方式のデフォルト値は、AUTH_APOP_AND_USERPASS です。 設定可能な値については、SFXPOP3Receiver::AuthEnum を参照してください。

[Note] 注意

この関数は、 SFXPOP3Receiver::Receive 関数、または SFXPOP3Receiver::Delete 関数を呼び出す前に使います。

内部実装

この関数の内部実装は以下の通りです。

/*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 //

参照

SFXPOP3Receiver::SetServer | SFXPOP3Receiver::Receive | SFXPOP3Receiver::Delete | SFXPOP3Receiver::AuthEnum


SFXPOP3Receiver::SetAutoDelete
メール受信時に POP3 サーバーからメールメッセージを削除するか否かを設定します。
[ public ]
Void SetAutoDelete(
    Bool isAutoDelete   // [入力] メール受信時に POP3 サーバーからメールメッセージを削除するか否か
);

解説

この関数は、メール受信時に POP3 サーバーからメールメッセージを削除するか否かを設定します。

デフォルト値: false(デフォルトの設定では、メール受信時に POP3 サーバーからメールメッセージは削除されません)。

[Note] 注意

SFXPOP3Receiver::Receive 関数を使用して受信したメールメッセージを POP3 サーバーから削除するか否かを設定します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::GetAutoDelete | SFXPOP3Receiver::SFXPOP3Receiver


SFXPOP3Receiver::SetLimit
受信するメールメッセージの制限数を設定します。
[ public ]
Void SetLimit(
    UInt32 limit   // [入力] 受信するメールメッセージの制限数(制限しない場合は 0 を指定する)
);

解説

この関数は、受信するメールメッセージの制限数を設定します。

デフォルト値: 0(受信するメールメッセージの数を制限しない)

[Note] 注意

この関数で制限した数までのメールメッセージを受信できます。 0 を設定した場合は、無制限にメールメッセージを受信できます。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::SetNumberOfLines | SFXPOP3Receiver::SFXPOP3Receiver


SFXPOP3Receiver::SetNumberOfLines
受信するメールメッセージの制限行を設定します。
[ public ]
Void SetNumberOfLines(
    SInt32 number   // [入力] 制限する行数(制限しない場合は -1 を指定する)
);

解説

この関数は、受信するメールメッセージの制限行を設定します。

デフォルト値: -1(行数を制限しない)

[Note] 注意

先頭からこの関数で設定した行数だけメールメッセージを受信します。

-1 を設定した場合は、メールメッセージのすべての行を受信します。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::SetLimit | SFXPOP3Receiver::SFXPOP3Receiver


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

解説

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

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

[Note] 注意

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

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::GetSSLMode | SFXPOP3Receiver::SFXPOP3Receiver


SFXPOP3Receiver::SetServer
POP3 サーバーのドメイン名(または IP アドレス)とポート番号を設定します。
[ public ]
Void SetServer(
    SFXSocketAddressConstRef server   // [入力] POP3 サーバーのドメイン名(または IP アドレス)とポート番号
);

引数

server

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

解説

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

[Note] 注意

この関数は SFXPOP3Receiver::Receive / SFXPOP3Receiver::Delete 関数よりも前に呼び出して POP3 サーバーのドメイン名(または IP アドレス)とポート番号を設定する必要があります。

※ ドメイン名の解決は自動的に行われます。

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::Receive | SFXPOP3Receiver::Delete | SFXPOP3Receiver::SFXPOP3Receiver | SFXSocketAddress


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

引数

sslTrustMode

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

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

解説

この関数は、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: トラストをチェックできるように常に中断します。

設定された値は、 SFXPOP3Receiver::Cancel 関数が呼び出されるまで有効です。

[Note] 注意

詳細情報: BREW API ISSL_NegotiateV

内部実装

この関数の内部実装は以下の通りです。

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

参照

SFXPOP3Receiver::Cancel | SFXPOP3Receiver::SFXPOP3Receiver | SFXSSLSocket::SetTrustMode | BREW API ISSL_NegotiateV


SFXPOP3Receiver::AuthEnum
POP3 認証方式を表す定数です。
enum AuthEnum {
    AUTH_NONE               = 0, // 認証を行いません。
    AUTH_APOP_AND_USERPASS,      // APOP 認証を行います。APOP 認証に失敗した場合は、通常の user-password 認証を行います。
    AUTH_ONLY_APOP,              // APOP 認証だけを行います。
    AUTH_ONLY_USERPASS           // 通常の user-password 認証だけを行います。
};

解説

POP3 認証方式を表す定数です。

SFXPOP3Receiver::SetAccount 関数を使用して 以下の POP3 認証方式の定数を指定できます。 SFXPOP3Receiver::SetAccount 関数の auth 引数に何も指定しなかった場合は、 AUTH_APOP_AND_USERPASS が設定されます。

AUTH_NONE

認証を行いません。

AUTH_APOP_AND_USERPASS

APOP 認証を行います。APOP 認証に失敗した場合は、通常の user-password 認証を行います。

AUTH_ONLY_APOP

APOP 認証だけを行います。

AUTH_ONLY_USERPASS

通常の user-password 認証だけを行います。

参照

SFXPOP3Receiver::SetAccount | SFXPOP3Receiver::Receive | SFXPOP3Receiver::SFXPOP3Receiver


SFXPOP3Receiver::CallbackSPP
POP3 メール受信・削除の結果が通知されるコールバック関数の型です。
typedef Void(* SFXPOP3Receiver::CallbackSPP)(SFCError error, VoidPtr reference)

解説

POP3 メール受信・削除の結果が通知されるコールバック関数の型です。

このコールバック関数は SFXPOP3Receiver::Receive または SFXPOP3Receiver::Delete 関数を使用して登録します。

POP3 メール受信・削除処理の結果は、このコールバック関数に通知されます。

第 1 引数の error には、 POP3 メール受信・削除に成功した場合は SFERR_NO_ERROR、失敗した場合はその他のエラーコードが渡されます。

第 2 引数の reference には、SFXPOP3Receiver::Receive または SFXPOP3Receiver::Delete 関数の reference 引数に指定した値 (通常、SFXPOP3Receiver インスタンス: this)が渡されます。

[Note] 注意

受信したメール情報は、 このコールパック関数内で SFXPOP3Receiver::GetReceivedMailArray 関数を呼び出して取得します。

POP3 メール受信・削除処理のどの段階でエラーが発生したかは、 コールバック関数内で SFXPOP3Receiver::GetProgress 関数を使用して取得できます。

参照

SFXPOP3Receiver | SFXPOP3Receiver::Receive | SFXPOP3Receiver::Delete | SFXPOP3Receiver::GetReceivedMailArray | SFXPOP3Receiver::GetProgress


SFXPOP3Receiver::MailArray
メールメッセージ情報の配列です。
SFMTYPEDEFALIAS(SFXArray<MailInfoPtr>, MailArray)

解説

メールメッセージ情報(SFXPOP3Receiver::MailInfo)の配列です。

[Note] 注意

SFXArray<MailInfoPtr> と同義です。

参照

SFXPOP3Receiver::MailInfo | SFXPOP3Receiver::GetReceivedMailArray


SFXPOP3Receiver::MailInfo
メールメッセージ情報を表す構造体です。
struct MailInfo {
    UInt32          size;  // メールメッセージのサイズ
    SFXAnsiString   uidl;  // メールメッセージの一意識別子
    SFXAnsiString   mail;  // メールメッセージのデータ
};

解説

メールメッセージ情報を表す構造体です。

size はメールメッセージのサイズ、uidl はメールメッセージの一意識別子、mail はメールメッセージのデータを表します。

[Caution] mail に格納されるメールのデータ

mail に格納されるメールメッセージのデータは、ヘッダーのフィールド値は B エンコードまたは Q エンコードされ、 本体、プリアンブル、エピローグ部分は JIS コードでエンコードされています。 マルチパートメッセージのそれら以外の本体部分は、Base64 または Quoted-Printable でエンコードされています。

SFXMailMessage::Parse 関数を使用してメールメッセージのデータを解析してから、 SFXMailMessage::GetSubjectField 関数や SFXMailMessage::GetBody 関数などを利用して件名や本文などを取得します (このとき、JIS コードから Shift_JIS コードへの文字コード変換は自動的に行われます)。

[Note] メールメッセージの一意識別子について

メールメッセージの一意識別子の詳細は RFC1939: UIDL Command を参照してください。

参照

SFXPOP3Receiver::GetReceivedMailArray | SFXMailMessage::Parse | SFXMailMessage | RFC1939: UIDL Command


SFXPOP3Receiver::ProgressEnum
POP3 メール受信の進行状態を表す定数です。
enum ProgressEnum {
    PROGRESS_NONE,    = 0,  // 接続は開始されていません。
    PROGRESS_CONNECT,       // POP3 サーバーに接続中です。
    PROGRESS_USER,          // USER コマンドの応答を待っています。
    PROGRESS_PASS,          // PASS コマンドの応答を待っています。
    PROGRESS_LIST,          // LIST コマンドの応答を待っています。
    PROGRESS_UIDL,          // UIDL コマンドの応答を待っています。
    PROGRESS_TOP,           // TOP コマンドの応答を待っています。
    PROGRESS_RETR,          // RETR コマンドの応答を待っています。
    PROGRESS_DELE,          // DELE コマンドの応答を待っています。
    PROGRESS_QUIT,          // QUIT コマンドの応答を待っています。
    PROGRESS_DONE           // メール受信処理がすべて完了した状態です。
};

解説

SFXPOP3Receiver クラスによる POP3 メール受信の進行状態を表す定数です。

SFXPOP3Receiver::GetProgress 関数を使用して以下の POP3 メール受信の進行状態を表す定数を取得できます。

PROGRESS_NONE

接続は開始されていません。

PROGRESS_CONNECT

POP3 サーバーに接続中です。

PROGRESS_USER

USER コマンドの応答を待っています。

PROGRESS_PASS

PASS コマンドの応答を待っています。

PROGRESS_LIST

LIST コマンドの応答を待っています。

PROGRESS_UIDL

UIDL コマンドの応答を待っています。

PROGRESS_RETR

RETR コマンドの応答を待っています。

PROGRESS_TOP

TOP コマンドの応答を待っています。

PROGRESS_DELE

DELE コマンドの応答を待っています。

PROGRESS_QUIT

QUIT コマンドの応答を待っています。

PROGRESS_DONE

メール受信処理がすべて完了した状態です。

参照

SFXPOP3Receiver::GetProgress | SFXPOP3Receiver::SFXPOP3Receiver


SFXPOP3Receiver::UidlArray
メールメッセージの一意識別子の配列を表す型です。
SFMTYPEDEFALIAS(SFXArray<SFXAnsiStringPtr>, UidlArray)

解説

メールメッセージの一意識別子の配列を表す型です。

[Note] 注意

SFXArray<SFXAnsiStringPtr> と同じです。

[Note] メールメッセージの一意識別子について

メールメッセージの一意識別子の詳細は RFC1939: UIDL Command を参照してください。