aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/async/imap/IMAPAsyncSession.h4
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cc14
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h2
-rw-r--r--src/async/smtp/MCSMTPCheckAccountOperation.cc42
-rw-r--r--src/async/smtp/MCSMTPCheckAccountOperation.h33
-rw-r--r--src/async/smtp/MCSMTPOperation.cc (renamed from src/async/smtp/MCSMTPOperation.cpp)0
-rw-r--r--src/async/smtp/MCSMTPSendWithBuilderOperation.h2
-rw-r--r--src/core/abstract/MCMessageConstants.h1
-rw-r--r--src/core/smtp/MCSMTPSession.cc31
-rw-r--r--src/core/smtp/MCSMTPSession.h2
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);