Dacons LLP Mailit for C/C++ Version 1.0.8

EmaiSMTP.hpp

Go to the documentation of this file.
00001 
00014 #ifndef __EMAISMTP_HPP__
00015 #define __EMAISMTP_HPP__
00016 
00017 #include <EmaiSMTP.h>
00018 #include <EmaiMessage.hpp>
00019 #include <EmaiExceptions.hpp>
00020 
00026 namespace Emai
00027 {
00028 
00035 class SmtpStatusCallback
00036 {
00037 friend class SmtpSession;
00038 
00045     virtual EmaiError                   OnOperation(
00046                                                 Emai::SmtpSession& inSession,
00047                                                 EmaiUint32 inOperationCode) = 0;
00048 
00057     virtual EmaiError                   OnDataSent(
00058                                                 Emai::SmtpSession& inSession,
00059                                                 EmaiUint32 inSentSize,
00060                                                 EmaiUint32 inTotalSize) = 0;
00061 
00070     virtual EmaiError                   OnServerError(
00071                                                 Emai::SmtpSession& inSession,
00072                                                 EmaiConstCharPtr inServerReply,
00073                                                 EmaiUint32 inReplyCode) = 0;
00074 
00075 public:
00076     virtual                             ~SmtpStatusCallback();
00077 
00078 protected:
00079     static EmaiError                    StatusCallback(
00080                                                 EmaiSmtpSession inSession,
00081                                                 const EmaiSmtpCallbackData* inData,
00082                                                 void* inUserData);
00083 };
00084 
00085 
00090 class SmtpSession : public Object<EmaiSmtpSession>
00091 {
00092 protected:
00093 
00094     typedef Object<EmaiSmtpSession>     Parent;
00095 
00097                                         SmtpSession();
00098 
00099 public:
00100                                         
00101                                         SmtpSession(
00102                                                 SmtpStatusCallback& inStatusCallback,
00103                                                 EmaiUint32 inTimeout,
00104                                                 EmaiOptions inOptions = EmaiNullOptions);
00105                                         SmtpSession(
00106                                                 EmaiSmtpStatusCallback inStatusCallback,
00107                                                 void* inUserData,
00108                                                 EmaiUint32 inTimeout,
00109                                                 EmaiOptions inOptions = EmaiNullOptions);
00110 
00111                                         SmtpSession(
00112                                                 const SmtpSession& inCopy);
00113                                         SmtpSession(
00114                                                 EmaiSmtpSession inSession,
00115                                                 bool inAddRef);
00116 
00117                                         ~SmtpSession();
00118 
00130     void                                Connect(
00131                                                 EmaiConstUniCharPtr inMailServer,
00132                                                 short inPort = EmaiDefaultSmtpPort,
00133                                                 EmaiOptions inOptions = EmaiNullOptions);
00134 
00148     void                                ConnectEx(
00149                                                 EmaiConstUniCharPtr inMailServer,
00150                                                 short inPort = EmaiDefaultSmtpPort,
00151                                                 const EmaiProxyInfo* inProxyInfo = NULL,
00152                                                 void* inUserData = NULL,
00153                                                 EmaiOptions inOptions = EmaiNullOptions);
00154 
00162     void                                Disconnect(
00163                                                 EmaiOptions inOptions = EmaiNullOptions);
00164 
00178     void                                Authenticate(
00179                                                 EmaiConstUniCharPtr inAccount,
00180                                                 EmaiConstUniCharPtr inPassword,
00181                                                 EmaiOptions inOptions = EmaiSMTPAuthAutomatic);
00182 
00191     void                                SendMessage(
00192                                                 const Message& inMessage,
00193                                                 EmaiOptions inOptions = EmaiNullOptions);
00194 
00204     void                                SendMessageEx(
00205                                                 const Message& inMessage,
00206                                                 StringList& outFailedRecipients,
00207                                                 EmaiOptions inOptions = EmaiNullOptions);
00208 
00209 
00217     void                                Cancel(
00218                                                 EmaiOptions inOptions = EmaiNullOptions);
00219                                                 
00220                                                 
00229     void                                Noop(
00230                                                 EmaiOptions inOptions = EmaiNullOptions);
00231 };
00232 
00233 
00234 /*
00235 // SmtpStatusCallback class implemetation
00236 */
00237 inline EmaiError
00238 SmtpStatusCallback::StatusCallback(
00239         EmaiSmtpSession inSession,
00240         const EmaiSmtpCallbackData* inData,
00241         void* inUserData
00242     )
00243 {
00244     SmtpStatusCallback* callback = reinterpret_cast<SmtpStatusCallback*>(inUserData);
00245     EmaiError error = EmaiErrNoErr;
00246     try
00247     {
00248         if (callback != NULL)
00249         {
00250             Emai::SmtpSession session(inSession, true);
00251             switch (inData->selector)
00252             {
00253                 case EmaiSmtpSelectorNormal:
00254                     error = callback->OnOperation(session,
00255                                         inData->data.normal.operationCode);
00256                     break;
00257                 case EmaiSmtpSelectorSending:
00258                     error = callback->OnDataSent(session,
00259                                         inData->data.sending.sentSize,
00260                                         inData->data.sending.totalSize);
00261                     break;
00262                 case EmaiSmtpSelectorServerError:
00263                     error = callback->OnServerError(session,
00264                                         inData->data.serverError.serverReply,
00265                                         inData->data.serverError.replyCode);
00266                     break;
00267                 default:
00268                     error = EmaiErrUnknown;
00269                     break;
00270             }
00271         }
00272     }
00273     catch (...)
00274     {
00275         //do not pass exceptions in library
00276         error = EmaiErrUnknown;
00277     }
00278 
00279     return error;
00280 }
00281 
00282 inline
00283 SmtpStatusCallback::~SmtpStatusCallback()
00284 {
00285 }
00286 
00287 /*
00288 // SmtpSession class implemetation
00289 */
00290 inline
00291 SmtpSession::SmtpSession(
00292         SmtpStatusCallback& inStatusCallback,
00293         EmaiUint32 inTimeout,
00294         EmaiOptions inOptions /*= EmaiNullOptions*/
00295     )
00296 {
00297     CheckErrorCode(EmaiSmtpSessionCreate(&mObject,
00298                     &SmtpStatusCallback::StatusCallback, &inStatusCallback,
00299                     inTimeout, inOptions));
00300 }
00301 
00302 inline
00303 SmtpSession::SmtpSession(
00304         EmaiSmtpStatusCallback inStatusCallback,
00305         void* inUserData,
00306         EmaiUint32 inTimeout,
00307         EmaiOptions inOptions /*= EmaiNullOptions*/
00308     )
00309 {
00310     CheckErrorCode(EmaiSmtpSessionCreate(&mObject,
00311                     inStatusCallback, inUserData,
00312                     inTimeout, inOptions));
00313 }
00314 
00315 inline
00316 SmtpSession::SmtpSession(
00317         const SmtpSession& inCopy
00318     ):
00319     Parent(inCopy)
00320 {
00321 }
00322 
00323 inline
00324 SmtpSession::SmtpSession(
00325         EmaiSmtpSession inSession,
00326         bool inAddRef
00327     ):
00328     Parent(inSession, inAddRef)
00329 {
00330 }
00331 
00332 inline
00333 SmtpSession::~SmtpSession()
00334 {
00335 }
00336 
00337 inline void
00338 SmtpSession::Connect(
00339         EmaiConstUniCharPtr inMailServer,
00340         short inPort /*= EmaiDefaultSmtpPort*/,
00341         EmaiOptions inOptions /*= EmaiNullOptions*/
00342     )
00343 {
00344     CheckErrorCode(EmaiSmtpConnect(mObject,
00345                             inMailServer, inPort, inOptions));
00346 }
00347 
00348 inline void
00349 SmtpSession::ConnectEx(
00350         EmaiConstUniCharPtr inMailServer,
00351         short inPort /*= EmaiDefaultSmtpPort*/,
00352         const EmaiProxyInfo* inProxyInfo /*= NULL*/,
00353         void* inUserData,
00354         EmaiOptions inOptions /*= EmaiNullOptions*/
00355     )
00356 {
00357     CheckErrorCode(EmaiSmtpConnectEx(mObject,
00358                             inMailServer, inPort, inProxyInfo, inUserData, inOptions));
00359 }
00360 
00361 inline void
00362 SmtpSession::Disconnect(
00363         EmaiOptions inOptions /*= EmaiNullOptions*/
00364     )
00365 {
00366     CheckErrorCode(EmaiSmtpDisconnect(mObject, inOptions));
00367 }
00368 
00369 inline void
00370 SmtpSession::Authenticate(
00371         EmaiConstUniCharPtr inAccount,
00372         EmaiConstUniCharPtr inPassword,
00373         EmaiOptions inOptions /*= EmaiSMTPAuthAutomatic*/
00374     )
00375 {
00376     CheckErrorCode(EmaiSmtpAuthenticate(mObject, inAccount,
00377                             inPassword, inOptions));
00378 }
00379 
00380 inline void
00381 SmtpSession::SendMessage(
00382         const Message& inMessage,
00383         EmaiOptions inOptions /*= EmaiNullOptions*/
00384     )
00385 {
00386     CheckErrorCode(EmaiSmtpSendMessage(mObject, inMessage, inOptions));
00387 }
00388 
00389 inline void
00390 SmtpSession::SendMessageEx(
00391         const Message& inMessage,
00392         StringList& outFailedRecipients,
00393         EmaiOptions inOptions /*= EmaiNullOptions*/
00394     )
00395 {
00396     EmaiStringList stringList = NULL;
00397     CheckErrorCode(EmaiSmtpSendMessageEx(mObject, inMessage, &stringList, inOptions));
00398     if (stringList != NULL)
00399         outFailedRecipients = StringList(stringList, true);
00400 }
00401 
00402 inline void
00403 SmtpSession::Cancel(
00404         EmaiOptions inOptions /*= EmaiNullOptions*/
00405     )
00406 {
00407     CheckErrorCode(EmaiSmtpCancel(mObject, inOptions));
00408 }
00409 
00410 inline void
00411 SmtpSession::Noop(
00412         EmaiOptions inOptions /*= EmaiNullOptions*/
00413     )
00414 {
00415     CheckErrorCode(EmaiSmtpNoop(mObject, inOptions));
00416 }
00417 
00418 
00419 }
00420 
00421 
00422 #endif /*__EMAISMTP_HPP__*/