SophiaFramework UNIVERSE 5.3 |
SFXPOP3 クラスは、POP3 プロトコルを処理するためのクラスです。
注意 | |
---|---|
SFXPOP3 クラスは、 SFXPOP3Receiver クラスを実装するために使用される内部実装クラスです。 SFXPOP3Receiver クラスに代わる開発者独自のメール受信クラスを実装する場合に使用します。 |
POP3 メール受信の手順
POP3 セッションの状態
POP3 セッションは、以下の 3 種類の状態の何れかをとります。
タイムアウトの制御 | |
---|---|
タイムアウトの制御は、アプリケーション側で行います。 |
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 //
コンストラクタ/デストラクタ |
---|
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 関数の返却値として使用される構造体です。
|
[ public, explicit ] SFXPOP3(Void);
このコンストラクタでは、SSL 接続モードを OFF(false)に設定します。
注意 | |
---|---|
POP3 メール受信に必要なリソースは、 SFXPOP3::Open、 SFXPOP3::Connect などの関数を呼び出したときに確保されます。 |
[ public, virtual ] ~SFXPOP3(Void);
このデストラクタは、POP3 サーバーとの接続を終了します。
内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルし、 同時にリソースを解放します。
注意 | |
---|---|
SFXPOP3::Close 関数と同等の処理を行います。 |
[ public ] Void Cancel(Void);
この関数は、POP3 メール送信をキャンセルします。
内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルします。
注意 | |
---|---|
この関数は、内部的に SFXPOP3::Close 関数から呼び出されます。 |
[ public ] Void Close(Void);
この関数は、POP3 サーバーとの接続を終了します。
内部で使用している TCP / SSL 通信やストリームの処理やコールバックをキャンセルし、 同時にリソースを解放します。
注意 | |
---|---|
この関数は、内部的に SFXPOP3::Cancel 関数を呼び出します。 |
POP3 サーバーとの接続の切断方法 | |
---|---|
SFXPOP3::SendQuitCommand 関数を使用して QUIT コマンドを発行し、 POP3 サーバーからの応答を確認した後、 この関数を呼び出して POP3 サーバーとの接続を切断します。 ※ POP3 プロトコル(RFC1939)では、 QUIT コマンドを発行せずに強制的に切断することを推奨していないため、 通信中にこの関数を明示的に呼ぶべきではありません。 |
[ public ] SFCError Connect( SFXSocketAddressConstRef address // [入力] POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号) CallbackSPP spp // [入力] POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数 VoidPtr reference // [入力] コールバック関数に渡すデータ(参照値) );
POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を指定します。
POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数を指定します。
コールバック関数に渡すデータ(参照値)を指定します。
この関数は、POP3 サーバーに接続します。
コールバック関数 | |
---|---|
POP3 サーバー接続や POP3 コマンド発行の結果は、 spp 引数に指定するコールバック関数(SFXPOP3::CallbackSPP)に通知されます。 |
SFXPOP3::Open | SFXPOP3::Close | SFXSocketAddress | SFXPOP3::CallbackSPP | BREW API ISOCKET_GetLastError
[ public, const ] SFCError GetListResponse( NumberSizeRecHandle recHandle // [出力] NumberSizeRec 構造体の配列へのポインタ(ハンドル) SInt32Ptr recCount // [出力] NumberSizeRec 構造体の配列の要素数を格納する変数へのポインタ );
[ public, const ] SFCError GetListResponse( NumberSizeRecPtr rec // [出力] NumberSizeRec 構造体を格納する変数へのポインタ );
POP3 サーバーが応答するメールメッセージの番号とサイズからなる SFXPOP3::NumberSizeRec 構造体の配列へのポインタ(ハンドル)が返却されます。 この配列は、呼び出し側が "::delete []" で破棄する必要があります。
POP3 サーバーが応答する recHandle 配列の要素数を格納した変数へのポインタが返却されます。
POP3 サーバーが応答するメールメッセージの番号とサイズからなる SFXPOP3::NumberSizeRec 構造体を格納するための変数へのポインタが返却されます。
この関数は、LIST コマンドの応答を取得します。
注意 | |
---|---|
SFXPOP3::SendListCommand 関数の引数の数により使用する関数が異なります。
これらが対応していないと、この関数は失敗し、SFERR_INVALID_FORMAT が返ります。 戻り値が SFERR_NO_ERROR 以外の場合、引数に設定される値は不定となります。 |
注意 | |
---|---|
LIST コマンドは、削除マークが付いていないメールメッセージのサイズを取得するためのコマンドです。 LIST コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
SFXPOP3::SendListCommand | SFXPOP3::NumberSizeRec | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
[ public, const ] SFCError GetLocalAddress( SFXSocketAddressPtr result // [出力] POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)の格納先へのポインタ );
この関数は、POP3 クライアントのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
SFXInetAddress::LocalInetAddress | SFXTCPSocket::GetLocalAddress | SFXSocketAddress | BREW API ISOCKET_GetLastError
[ public, const ] SFCError GetRemoteAddress( SFXSocketAddressPtr result // [出力] POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)の格納先へのポインタ );
この関数は、POP3 サーバーのソケットアドレス(ドメイン名または IP アドレスとポート番号)を取得します。
[ public, const ] VoidConstPtr GetResponseBuffer( UInt32Ptr size = null // [出力] 応答バッファのサイズが格納された場所へのポインタ );
POP3 サーバーの応答メッセージのサイズが格納された場所へのポインタが返却されます。 取得する必要がない場合は、null を指定します[デフォルト]。
応答バッファ(POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は null が返却されます)。
この関数は、応答バッファを取得します。
注意 | |
---|---|
POP3 サーバーの応答メッセージは、 最初に POP3 サーバーの状態を表す大文字の応答ステータス("+OK" または "-ERR")があり、 その後に付加情報として応答テキストから構成されます(付加情報はない場合もあります)。 POP3 サーバーの応答メッセージの終わりは CRLF 文字までであり、 その長さは CRLF 文字を含めて最大 512 文字です。 単一行応答の場合、 終了を表す "\r\n" を除く POP3 サーバーの応答メッセージが応答バッファに格納されます。 複数行応答の場合、 最終行の ".\r\n" を除く POP3 サーバーの応答メッセージが応答バッファに格納されます (但し、行頭のピリオドは削除されています)。 応答バッファの内容は、 何らかのコマンドを発行したり、 SFXPOP3::Close 関数を呼び出して状態は変更されるまで有効です。 ※ 単一行応答と複数行応答の先頭行の最大長は CRLF を含めて 512 バイトです。 また、複数行応答の 2 行目以降の最大長は CRLF を含めて 1000 バイトです。 |
[ public, const ] SFXAnsiString GetResponseText(Void);
[ public, const ] SFCError GetResponseText( SFXAnsiStringPtr result // [出力] POP3 サーバーから取得した応答テキストが格納された場所へのポインタ );
POP3 サーバーから取得した応答テキストが格納された場所へのポインタが返却されます。
引数を指定しない場合は、応答テキスト(POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は空文字列が返却されます)。
この関数は、応答テキストを取得します。
注意 | |
---|---|
応答テキストとは | |
---|---|
POP3 サーバーの応答メッセージから POP3 サーバーの状態を表す大文字の応答ステータス("+OK" または "-ERR") とそれに続く空白文字を削除したテキストのことです。 単一行応答の場合、応答テキストに応答メッセージの最後を表す "\r\n" は含まれません。 複数行応答の場合は、応答テキストに最終行の ".\r\n" は含まれません(応答メッセージの行頭のピリオドは削除されます)。 ※ 単一行応答と複数行応答の先頭行の最大長は CRLF を含めて 512 バイトです。 また、複数行応答の 2 行目以降の最大長は CRLF を含めて 1000 バイトです。 応答テキストの詳細は、 RFC1939: 3. Basic Operation を参照してください。 |
[ public, const ] SFCError GetRetrResponse( ACharConstHandle response // [出力] 応答バッファ内の 2 行目の行頭へのポインタ(ハンドル) );
[ public, const ] SFCError GetRetrResponse( SFXAnsiStringPtr response // [出力] 応答バッファの 2 行目以降の内容をコピーした文字列へのポインタ );
応答バッファ内の 2 行目の行頭へのポインタ または応答バッファの 2 行目以降の内容をコピーした文字列へのポインタが返却されます。
この関数は、RETR コマンドの応答を取得します。
このコマンドの応答は複数行応答になります。 1 行目はコマンドの結果("+OK" または "-ERR .....")であり、 2 行目以降から ".\r\n" の最終行までの間の行はドット・スタッフィング(dot-stuffing)による行頭の "." を除けば実際のメールメッセージの内容になります。
このコマンドの応答の 2 行目以降にある実際のメールメッセージの内容は、 この関数を呼び出して取得することが可能です。 このとき、取得したメールメッセージには、 ドット・スタッフィング(dot-stuffing)による行頭の "." や最終行を表す ".\r\n" 行は取り除かれています。
※なお、このコマンドの応答の 1 行目の最大長は CRLF を含めて 512 バイト、 2 行目以降の最大長は CRLF を含めて 1000 バイトです。
注意 | |
---|---|
ACharConstHandle 型の response 引数の戻り値は、SFXPOP3 クラスの内部クラスのバッファへのポインタです。 呼び出し側でこのバッファを解放してはいけません。 |
注意 | |
---|---|
RETR コマンドは、メールメッセージを取得するためのコマンドです。 RETR コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
[ public, const ] Bool GetSSLMode(Void);
この関数は、POP3 メール受信の SSL 接続モードを取得します。
[ public, const ] SFCError GetStatResponse( UInt32Ptr count = null // [出力] メールメッセージの数が格納された場所へのポインタ UInt32Ptr size = null // [出力] メールメッセージの全サイズが格納された場所へのポインタ );
メールメッセージの数が格納された場所へのポインタが返却されます。 取得する必要がない場合、null を指定します。
全てのメールメッセージの合計サイズが格納された場所へのポインタが返却されます。 取得する必要がない場合、null を指定します。
この関数は、STAT コマンドの応答を取得します。
STAT コマンドについて | |
---|---|
STAT コマンドは、メールメッセージの数とサイズを取得するためのコマンドです。 STAT コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
[ public, const ] SFCError GetTopResponse( ACharConstHandle response // [出力] 応答バッファ内の 2 行目の行頭へのポインタ(ハンドル) );
[ public, const ] SFCError GetTopResponse( SFXAnsiStringPtr response // [出力] 応答バッファの 2 行目以降の内容をコピーした文字列が格納された場所へのポインタ );
応答バッファ内の 2 行目の行頭へのポインタ または応答バッファの 2 行目以降の内容をコピーした文字列が格納された場所へのポインタが返却されます。
この関数は、TOP コマンドの応答を取得します。
この関数は、 メールメッセージのヘッダーと本文から SFXPOP3::SendTopCommand 関数の lines 引数で指定した行数分を取得します。
このコマンドの応答は複数行応答になります。 1 行目はコマンドの結果("+OK" または "-ERR .....")であり、 2 行目以降から ".\r\n" の最終行までの間の行はドット・スタッフィング(dot-stuffing)による行頭の "." を除けば実際のメールメッセージの内容になります。
このコマンドの応答の 2 行目以降にある実際のメールメッセージの内容は、 この関数を呼び出して取得することが可能です。 このとき、取得したメールメッセージには、 ドット・スタッフィング(dot-stuffing)による行頭の "." や最終行を表す ".\r\n" 行は取り除かれています。
※なお、このコマンドの応答の 1 行目の最大長は CRLF を含めて 512 バイト、 2 行目以降の最大長は CRLF を含めて 1000 バイトです。
注意 | |
---|---|
ACharConstHandle 型の response 引数の戻り値は、SFXPOP3 クラスの内部クラスのバッファへのポインタです。 呼び出し側でこのバッファを解放してはいけません。 |
注意 | |
---|---|
SFXPOP3::GetRetrResponse 関数と同等です。 |
TOP コマンドについて | |
---|---|
TOP コマンドは、メールメッセージのヘッダーと本文から指定した行数分を取得するためのコマンドです。 TOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
[ public, const ] UInt32 GetTrustMode(Void);
SSL 認証モード
この関数は、POP3 メール受信の SSL 認証モードを取得します。
以下の 4 種類の SSL 認証モードの何れかが返却されます。
[ public, const ] SFCError GetUidlResponse( NumberUidlRecHandle recHandle // [出力] NumberUidlRec 構造体の配列へのポインタ(ハンドル) SInt32Ptr recCount // [出力] NumberUidlRec 構造体の配列の要素数を格納する変数へのポインタ );
[ public, const ] SFCError GetUidlResponse( NumberUidlRecPtr rec // [出力] NumberUidlRec 構造体へのポインタを格納する変数へのポインタ );
メールメッセージの番号とその一意識別子からなる NumberUidlRec 構造体の配列へのポインタ(ハンドル)を返却します。 この配列は "::delete[]" で破棄する必要があります。
NumberUidlRec 構造体の配列の要素数を格納する変数へのポインタを返却します。
NumberUidlRec 構造体へのポインタを格納する変数へのポインタを返却します。
この関数は、UIDL コマンドの応答を取得します。
SFXPOP3::SendUidlCommand 関数の引数の数により使用する関数が異なります。
2 つの引数 recHandle と recCount が必要です。全てのメールメッセージの番号とその一意識別子を取得します。
引数 rec のみ必要です。 SFXPOP3::SendUidlCommand 関数で指定したメールメッセージの番号の一意識別子を取得します。
これらが対応していないと、この関数は失敗し、SFERR_INVALID_FORMAT を返します。 戻り値が SFERR_NO_ERROR 以外の場合、引数の値は不定となります。
UIDL コマンドについて | |
---|---|
UIDL コマンドは、指定されたメールメッセージ番号に対する一意識別子を取得するためのコマンドです。 メールメッセージ番号を指定しなかった場合は、すべてのメールメッセージの番号とその一意識別子が返却されます。 UIDL コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
SFXPOP3::SendUidlCommand | SFXPOP3::GetRetrResponse | SFXPOP3::NumberUidlRec | RFC1939: 7. Optional POP3 Commands
[ public, const ] Bool IsResponseErr(Void);
この関数は、直前の POP3 コマンドの応答ステータスが "-ERR" であるかどうかを判定します。
注意 | |
---|---|
応答メッセージの受信に失敗したとき (POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は)も false が返却されます。 |
[ public, const ] Bool IsResponseOk(Void);
この関数は、直前の POP3 コマンドの応答ステータスが "+OK" であるかどうかを判定します。
注意 | |
---|---|
応答メッセージの受信に失敗したとき (POP3 サーバーとの接続が確立されていない場合やコマンドを発行していない場合は)も false が返却されます。 |
[ public ] SFCError Open(Void);
この関数は、POP3 サーバーに接続するための初期化を行います。
注意 | |
---|---|
この関数は、 内部的に SFXSSLSocket::Open 関数を呼び出します (TCP 接続の場合は、内部で使用している SFXSSLSocket::Connect 関数のコールバック関数内で SFXSSLSocket::Permit 関数を呼び出します)。 |
[ public ] SFCError SendApopCommand( SFXAnsiStringConstRef user // [入力] ユーザー名 SFXAnsiStringConstRef password // [入力] パスワード SFXAnsiStringConstRef challenge // [入力] チャレンジコード );
ユーザー名を指定します。
パスワードを指定します。
APOP 認証のためのチャレンジコードを指定します。 EHLO コマンドの応答に含まれる、 "<" と ">" で囲まれた文字列("<" と ">" を含む)を渡します。
この関数は、APOP コマンドを発行します。
この関数は、SFXPOP3::Connect 関数で POP3 サーバーに接続した直後に呼び出します。
APOP コマンドについて | |
---|---|
APOP コマンドは、APOP 認証のためのコマンドです(USER / PASS コマンドを用いた認証の代わりに利用されます)。 APOP コマンドでは、平文のパスワードを送信せずに認証を行うことができます。 APOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands
[ public ] SFCError SendCommand( ACharConstPtr command // [入力] POP3 コマンド文字列 UInt32 size // [入力] POP3 コマンド文字列のサイズ Bool multiline // [入力] 複数行応答の POP3 コマンドかどうか );
[ public ] SFCError SendCommand( SFXAnsiStringConstRef command // [入力] POP3 コマンド文字列 Bool multiline // [入力] 複数行応答の POP3 コマンドかどうか );
この関数は、POP3 コマンドを発行します。
POP3 コマンドは、大文字小文字の区別のないキーワード(コマンド名)と 0 個以上の引数で構成されます。 そして全てのコマンドは "\r\n" の文字で終わります。
キーワードと引数は、印刷可能な ASCII 文字から構成され、1 つ以上の空白文字で区切られます。 キーワードは 3 または 4 文字、引数は最大 40 文字までの長さの文字列を指定できます。
単一行または複数行の応答のコマンドであるかどうかは、引数で指定します。
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは 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
削除するメールメッセージの番号を指定します。
この関数は、DELE コマンドを発行します。
注意 | |
---|---|
DELE コマンドは、メールメッセージに削除するためのマークをつけるコマンドです。 QUIT コマンドが発行されるまではメールメッセージは物理的に削除されません。 DELE コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::SendQuitCommand SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
[ public ] SFCError SendListCommand(Void);
[ public ] SFCError SendListCommand( SInt32 number // [入力] メールメッセージ番号 );
メールメッセージ番号(1 以上の整数)を指定します。
この関数は、LIST コマンドを発行します。
すべてのメールメッセージのサイズを取得するには、引数を指定せずにこの関数を呼び出します。 特定のメールメッセージのサイズを取得するには、引数にそのメールメッセージ番号を指定します。 LIST コマンドの結果は、SFXPOP3::GetListResponse 関数で取得します。
LIST コマンドについて | |
---|---|
LIST コマンドは、 削除マークの付いていないメールメッセージのサイズを取得するためのコマンドです。 LIST コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::GetListResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
[ public ] SFCError SendNoopCommand(Void);
この関数は、NOOP コマンドを発行します。
POP3 サーバーは NOOP コマンドを受け取ると、応答メッセージだけを返します。
NOOP コマンドについて | |
---|---|
NOOP コマンドを発行しても何も起きません。 このコマンドによりタイマによる自動ログアウトを回避したり、 POP3 サーバーとの接続を確認することができます。 NOOP コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
[ public ] SFCError SendPassCommand( SFXAnsiStringConstRef password // [入力] パスワード );
パスワードを指定します。
この関数は、PASS コマンドを発行します。
この関数は、SFXPOP3::SendUserCommand 関数でユーザー名を送信した直後に呼び出します。
PASS コマンドについて | |
---|---|
PASS コマンドは、ユーザー認証に必要なパスワードを指定するためのコマンドです。 このコマンドは、USER コマンドの直後のみ有効です。 PASS コマンドに失敗した場合は、USER コマンドを再発行しなければいけません。 PASS コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands
[ public ] SFCError SendQuitCommand(Void);
この関数は、QUIT コマンドを発行します。
POP3 メール受信のセッションの終了 | |
---|---|
この関数で QUIT コマンドを発行して、その応答を確認してから、SFXPOP3::Close 関数を呼び出して POP3 サーバーとの接続を切断します。 |
QUIT コマンドについて | |
---|---|
QUIT コマンドは、POP3 メール受信のセッションを終了するためのコマンドです。 セッションがトランザクション状態にあるときに QUIT コマンドが発行されると、 更新状態に移行し、セッションが終了する前に DELE コマンドにより削除マークのついたメールメッセージをすべて物理的に削除します。 QUIT コマンドの詳細は、 RFC1939: 6. The UPDATE State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::Close | SFXPOP3::SendDeleCommand | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 6. The UPDATE State
メールメッセージ番号(1 以上の整数)を指定します。
この関数は、RETR コマンドを発行します。
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 を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは 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
[ public ] SFCError SendRsetCommand(Void);
この関数は、RSET コマンドを発行します。
SFXPOP3::SendUserCommand / SFXPOP3::SendPassCommand 関数の結果は破棄され、 POP3 サーバーに接続したときの状態(初期状態)になります。
RSET コマンドについて | |
---|---|
RSET コマンドは、POP3 メール受信のセッションをリセットするためのコマンドです。 RSET コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
[ public ] SFCError SendStatCommand(Void);
この関数は、STAT コマンドを発行します。
STAT コマンドの結果は、SFXPOP3::GetStatResponse 関数で取得します。
STAT コマンドについて | |
---|---|
STAT コマンドは、メールボックス内のメールメッセージの数とサイズを取得するためのコマンドです。 STAT コマンドの詳細は、 RFC1939: 5. The TRANSACTION State を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::GetStatResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 5. The TRANSACTION State
メールメッセージ番号(1 以上の整数)を指定します。
取得する本文の行数(0 以上の整数)を指定します。 0 の場合、ヘッダーのみの取得します。
この関数は、TOP コマンドを発行します (メールメッセージのヘッダーと本文から lines 引数で指定した行数分を取得します)。
TOP コマンドの結果は、 SFXPOP3::GetTopResponse 関数で取得します。
TOP コマンドについて | |
---|---|
TOP コマンドは、メールメッセージのヘッダーと本文の指定した行数分を取得するためのコマンドです。 TOP コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::GetTopResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands
[ public ] SFCError SendUidlCommand(Void);
[ public ] SFCError SendUidlCommand( SInt32 number // [入力] メールメッセージの番号 );
メールメッセージの番号(1 以上の整数)を指定します。
この関数は、UIDL コマンドを発行します。
特定のメールメッセージの一意識別子を取得する場合は、 引数にそのメールメッセージの番号を指定します。
すべてのメールメッセージの番号とその一意識別子を取得する場合は、 引数を指定せずにこの関数を呼び出します。
UIDL コマンドの結果は、 コールバック関数内で SFXPOP3::GetUidlResponse 関数を呼び出して取得します。
UIDL コマンドについて | |
---|---|
UIDL コマンドは、指定されたメールメッセージ番号に対する一意識別子を取得するためのコマンドです。 メールメッセージ番号を指定しなかった場合は、すべてのメールメッセージの番号とその一意識別子が返却されます。 UIDL コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::GetUidlResponse | SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands
[ public ] SFCError SendUserCommand( SFXAnsiStringConstRef user // [入力] ユーザー名 );
ユーザー名を指定します。
この関数は、USER コマンドを発行します。
この関数は、SFXPOP3::Connect 関数で POP3 サーバーに接続してから呼び出します。
USER コマンドについて | |
---|---|
USER コマンドは、ユーザー認証に必要なユーザー名を指定するためのコマンドです。 USER コマンドの詳細は、 RFC1939: 7. Optional POP3 Commands を参照してください。 |
通信エラー / コマンド エラーの取得 | |
---|---|
戻り値として返るのは、内部処理でのエラーだけです。 通信エラーなどは SFXPOP3::Connect 関数で指定したコールバック関数に通知されます。 コマンドが成功したかどうかは、SFXPOP3::IsResponseOk 関数、または SFXPOP3::IsResponseErr 関数を使用して判定します。 |
SFXPOP3::IsResponseOk | SFXPOP3::IsResponseErr | SFXPOP3::Connect | RFC1939: 7. Optional POP3 Commands
この関数は、SSL 接続モードを設定します。
デフォルト値: false(SSL 接続モードは OFF)
注意 | |
---|---|
SSL 接続モードを ON する場合、isSSL 引数に true を指定します。 |
以下の 4 種類の何れかの SSL 認証モードを指定します。
この関数は、POP3 メール受信の SSL 認証モードを設定します。
デフォルト値: SSL_TRUST_MODE_FAIL
設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。
注意 | |
---|---|
SFXPOP3::Connect 関数を使用して POP3 サーバーに接続する直前に、 この関数を呼び出して SSL 認証モードを設定します。 |
typedef Void(* SFXPOP3::CallbackSPP)(SFCError error, VoidPtr data)
POP3 サーバー接続や POP3 コマンド発行の結果が通知されるコールバック関数の型です。
このコールバック関数は、SFXPOP3::Connect 関数の spp 引数に指定します。 POP3 サーバー接続や POP3 コマンド発行の結果(エラー値)は、このコールバック関数に通知されます。
第 1 引数にエラーコード、 第 2 引数は SFXPOP3::Connect 関数で指定した引数(通常、SFXPOP3 インスタンス: this)が渡されます。
SFMTYPEDEFSTRUCT(NumberSizeRec) struct NumberSizeRec { SInt32 number; // メールメッセージの番号 UInt32 size; // メールメッセージのサイズ(オクテット数) };
SFXPOP3::GetListResponse 関数の返却値として使用される構造体です。 number はメールメッセージ の番号を示し、size はメールメッセージのサイズ(オクテット数)を表します。
SFMTYPEDEFSTRUCT(NumberUidlRec) struct NumberUidlRec { SInt32 number; // メールメッセージの番号 SFXAnsiString uidl; // メールメッセージの一意識別子 };
SFXPOP3::GetUidlResponse 関数の返却値として使用される構造体です。 number はメールメッセージの番号、uidl はメールメッセージの一意識別子を表します。
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |