diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/async/imap/IMAPAsyncSession.h | 4 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPAsyncSession.cc | 14 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPAsyncSession.h | 2 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPCheckAccountOperation.cc | 42 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPCheckAccountOperation.h | 33 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPOperation.cc (renamed from src/async/smtp/MCSMTPOperation.cpp) | 0 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPSendWithBuilderOperation.h | 2 | ||||
-rw-r--r-- | src/core/abstract/MCMessageConstants.h | 1 | ||||
-rw-r--r-- | src/core/smtp/MCSMTPSession.cc | 31 | ||||
-rw-r--r-- | src/core/smtp/MCSMTPSession.h | 2 |
10 files changed, 124 insertions, 7 deletions
diff --git a/src/async/imap/IMAPAsyncSession.h b/src/async/imap/IMAPAsyncSession.h index 1e32bc46..53438c7e 100644 --- a/src/async/imap/IMAPAsyncSession.h +++ b/src/async/imap/IMAPAsyncSession.h @@ -103,8 +103,8 @@ namespace mailcore { virtual IMAPOperation * storeFlags(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags); virtual IMAPOperation * storeLabels(String * folder, Array * uids, IMAPStoreFlagsRequestKind kind, Array * labels); - virtual Array * search(String * folder, IMAPSearchKind kind, String * searchString); - virtual Array * search(String * folder, IMAPSearchExpression * expression); + virtual IMAPSearchOperation * search(String * folder, IMAPSearchKind kind, String * searchString); + virtual IMAPSearchOperation * search(String * folder, IMAPSearchExpression * expression); virtual IMAPIdleOperation * idle(String * folder, uint32_t lastKnownUID); diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc index e7ddebb7..e996e0e7 100644 --- a/src/async/smtp/MCSMTPAsyncSession.cc +++ b/src/async/smtp/MCSMTPAsyncSession.cc @@ -4,6 +4,7 @@ #include "MCSMTPSendWithRecipientOperation.h" #include "MCSMTPSendWithDataOperation.h" #include "MCSMTPSendWithBuilderOperation.h" +#include "MCSMTPCheckAccountOperation.h" #include "MCSMTPOperation.h" using namespace mailcore; @@ -116,6 +117,7 @@ bool SMTPAsyncSession::useHeloIPEnabled() void SMTPAsyncSession::runOperation(SMTPOperation * operation) { + // TODO: disconnect after delay mQueue->addOperation(operation); } @@ -144,11 +146,17 @@ SMTPOperation * SMTPAsyncSession::sendMessageOperation(Data * messageData) SMTPOperation * SMTPAsyncSession::sendMessageOperation(MessageBuilder * msg) { -#if 0 SMTPSendWithBuilderOperation * op = new SMTPSendWithBuilderOperation(); op->setSession(this); op->setBuilder(msg); return (SMTPOperation *) op->autorelease(); -#endif - return NULL; } + +SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from) +{ + SMTPCheckAccountOperation * op = new SMTPCheckAccountOperation(); + op->setFrom(from); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h index c4411a00..0b9e1edd 100644 --- a/src/async/smtp/MCSMTPAsyncSession.h +++ b/src/async/smtp/MCSMTPAsyncSession.h @@ -64,7 +64,7 @@ namespace mailcore { virtual SMTPOperation * sendMessageOperationWithFromAndRecipient(Address * from, Array * recipients, Data * messageData); virtual SMTPOperation * sendMessageOperation(Data * messageData); virtual SMTPOperation * sendMessageOperation(MessageBuilder * msg); - + virtual SMTPOperation * checkAccountOperation(Address * from); // private virtual void runOperation(SMTPOperation * operation); diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.cc b/src/async/smtp/MCSMTPCheckAccountOperation.cc new file mode 100644 index 00000000..f711c6ec --- /dev/null +++ b/src/async/smtp/MCSMTPCheckAccountOperation.cc @@ -0,0 +1,42 @@ +// +// MCSMTPCheckAccountOperation.cc +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPCheckAccountOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPCheckAccountOperation::SMTPCheckAccountOperation() +{ + mFrom = NULL; +} + +SMTPCheckAccountOperation::~SMTPCheckAccountOperation() +{ + MC_SAFE_RELEASE(mFrom); +} + +void SMTPCheckAccountOperation::setFrom(Address * from) +{ + MC_SAFE_REPLACE_RETAIN(Address, mFrom, from); +} + +Address * SMTPCheckAccountOperation::from() +{ + return mFrom; +} + +void SMTPCheckAccountOperation::main() +{ + ErrorCode error; + + session()->session()->checkAccount(mFrom, &error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.h b/src/async/smtp/MCSMTPCheckAccountOperation.h new file mode 100644 index 00000000..67a97bb8 --- /dev/null +++ b/src/async/smtp/MCSMTPCheckAccountOperation.h @@ -0,0 +1,33 @@ +// +// MCSMTPCheckAccountOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __mailcore2__MCSMTPCheckAccountOperation__ +#define __mailcore2__MCSMTPCheckAccountOperation__ + +#include <mailcore/MCSMTPOperation.h> +#include <mailcore/MCAbstract.h> + +namespace mailcore { + + class SMTPCheckAccountOperation : public SMTPOperation { + private: + Address * mFrom; + + public: + SMTPCheckAccountOperation(); + virtual ~SMTPCheckAccountOperation(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void main(); + }; + +} + +#endif /* defined(__mailcore2__MCSMTPCheckAccountOperation__) */ diff --git a/src/async/smtp/MCSMTPOperation.cpp b/src/async/smtp/MCSMTPOperation.cc index 532c6ab4..532c6ab4 100644 --- a/src/async/smtp/MCSMTPOperation.cpp +++ b/src/async/smtp/MCSMTPOperation.cc diff --git a/src/async/smtp/MCSMTPSendWithBuilderOperation.h b/src/async/smtp/MCSMTPSendWithBuilderOperation.h index 827e34b5..301bad52 100644 --- a/src/async/smtp/MCSMTPSendWithBuilderOperation.h +++ b/src/async/smtp/MCSMTPSendWithBuilderOperation.h @@ -28,7 +28,7 @@ namespace mailcore { virtual void setBuilder(MessageBuilder * builder); virtual MessageBuilder * builder(); - void main(); + virtual void main(); }; } diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h index ab30b8c4..1440bcf1 100644 --- a/src/core/abstract/MCMessageConstants.h +++ b/src/core/abstract/MCMessageConstants.h @@ -194,6 +194,7 @@ namespace mailcore { ErrorAuthenticationRequired, ErrorFetchMessageList, ErrorDeleteMessage, + ErrorInvalidAccount, }; enum PartType { diff --git a/src/core/smtp/MCSMTPSession.cc b/src/core/smtp/MCSMTPSession.cc index 52851a08..6d723cb4 100644 --- a/src/core/smtp/MCSMTPSession.cc +++ b/src/core/smtp/MCSMTPSession.cc @@ -482,6 +482,37 @@ void SMTPSession::login(ErrorCode * pError) * pError = ErrorNone; } +void SMTPSession::checkAccount(Address * from, ErrorCode * pError) +{ + int r; + + loginIfNeeded(pError); + if (* pError != ErrorNone) { + return; + } + r = mailsmtp_mail(mSmtp, MCUTF8(from->mailbox())); + if (r == MAILSMTP_ERROR_STREAM) { + * pError = ErrorConnection; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + r = mailsmtp_rcpt(mSmtp, "email@invalid"); + if (r == MAILSMTP_ERROR_STREAM) { + * pError = ErrorConnection; + return; + } + else if (r != MAILSMTP_NO_ERROR) { + * pError = ErrorInvalidAccount; + return; + } + + * pError = ErrorNone; +} + void SMTPSession::sendMessage(Address * from, Array * recipients, Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError) { diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h index 45a7c54b..98f4be4a 100644 --- a/src/core/smtp/MCSMTPSession.h +++ b/src/core/smtp/MCSMTPSession.h @@ -79,6 +79,8 @@ namespace mailcore { virtual void login(ErrorCode * pError); + virtual void checkAccount(Address * from, ErrorCode * pError); + virtual void sendMessage(Address * from, Array * recipients, Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); virtual void sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); |