aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar robario <webmaster@robario.com>2014-10-29 17:32:09 +0900
committerGravatar robario <webmaster@robario.com>2014-10-29 18:12:59 +0900
commitaeb15860575a764dd444108098dcb95c73d4d6df (patch)
tree222c675c1fbdf04d44c535d7bc6208c5869eb2c5
parent2f6f1ca69d59e2692f85d56941e7d996195cd6e8 (diff)
Add a new operation for SMTP login.
-rwxr-xr-xbuild-mac/mailcore2.xcodeproj/project.pbxproj20
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cc8
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h1
-rw-r--r--src/async/smtp/MCSMTPLoginOperation.cc29
-rw-r--r--src/async/smtp/MCSMTPLoginOperation.h34
-rw-r--r--src/cmake/async.cmake1
-rw-r--r--src/cmake/objc.cmake1
-rw-r--r--src/cmake/public-headers.cmake1
-rw-r--r--src/core/smtp/MCSMTPSession.h2
-rw-r--r--src/objc/smtp/MCOSMTP.h1
-rw-r--r--src/objc/smtp/MCOSMTPLoginOperation.h32
-rw-r--r--src/objc/smtp/MCOSMTPLoginOperation.mm66
-rw-r--r--src/objc/smtp/MCOSMTPSession.h10
-rw-r--r--src/objc/smtp/MCOSMTPSession.mm9
14 files changed, 214 insertions, 1 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index 4fadc330..07a60469 100755
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -135,6 +135,12 @@
84E65533199BE15500EC8CC4 /* MCNNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; };
84E65534199BE2BF00EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; };
84E65535199BE2C300EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; };
+ 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */; };
+ 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; };
+ 8B0095CD1A00DE2A00F84BC0 /* MCOSMTPLoginOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; };
+ 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; };
+ 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */; };
+ 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; };
943F1A9A17D964F600F0C798 /* MCIMAPConnectOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */; };
943F1A9E17D96C5500F0C798 /* MCIMAPConnectOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */; };
943F1AA017D9736100F0C798 /* MCIMAPConnectOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */; };
@@ -975,6 +981,7 @@
C6A81BF01707806800882C15 /* MCOSMTPOperation.h in CopyFiles */,
C6A81BED1707806100882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */,
C6D6F96B1720F92D006F5B28 /* MCICUTypes.h in CopyFiles */,
+ 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */,
C6A81BEF1707806600882C15 /* MCOSMTPSendOperation.h in CopyFiles */,
C63CD68916BE1BC100DB18F1 /* MCDateFormatter.h in CopyFiles */,
C6F61FAE170288640073032E /* MCOMessageBuilder.h in CopyFiles */,
@@ -1210,6 +1217,7 @@
C6CF62DA175325D5006398B9 /* MCMailProvidersManager.h in CopyFiles */,
C6CF62DB175325E2006398B9 /* MCNetService.h in CopyFiles */,
C6A81BF91707811500882C15 /* MCOSMTPOperation.h in CopyFiles */,
+ 8B0095CD1A00DE2A00F84BC0 /* MCOSMTPLoginOperation.h in CopyFiles */,
C6A81BF81707811100882C15 /* MCOSMTPSendOperation.h in CopyFiles */,
C6BA2B111705F4E6003F0E9E /* MCOConstants.h in CopyFiles */,
C6A81BF71707811000882C15 /* MCOSMTPSession.h in CopyFiles */,
@@ -1431,6 +1439,10 @@
84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPDisconnectOperation.mm; sourceTree = "<group>"; };
84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPGroupInfo.h; sourceTree = "<group>"; };
84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPGroupInfo.mm; sourceTree = "<group>"; };
+ 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPLoginOperation.cc; sourceTree = "<group>"; };
+ 8B0095C81A00DDC500F84BC0 /* MCSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPLoginOperation.h; sourceTree = "<group>"; };
+ 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPLoginOperation.h; sourceTree = "<group>"; };
+ 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPLoginOperation.mm; sourceTree = "<group>"; };
943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPConnectOperation.cc; sourceTree = "<group>"; };
943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPConnectOperation.h; sourceTree = "<group>"; };
9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFolderStatus.h; sourceTree = "<group>"; };
@@ -2249,6 +2261,8 @@
C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */,
C64EA68F169E847800778456 /* MCSMTPAsyncSession.cc */,
C64EA690169E847800778456 /* MCSMTPAsyncSession.h */,
+ 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */,
+ 8B0095C81A00DDC500F84BC0 /* MCSMTPLoginOperation.h */,
C64EA79C169F29A700778456 /* MCSMTPSendWithDataOperation.cc */,
C64EA79D169F29A700778456 /* MCSMTPSendWithDataOperation.h */,
C608167317759967001F1018 /* MCSMTPDisconnectOperation.cc */,
@@ -2638,6 +2652,8 @@
C6A81BE81706A6B300882C15 /* MCOSMTP.h */,
C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */,
C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */,
+ 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */,
+ 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */,
C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */,
C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */,
8416A99B17F284F400B3C7DA /* MCOSMTPNoopOperation.h */,
@@ -3088,6 +3104,7 @@
8416A9A117F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */,
C64EA784169F24E400778456 /* MCSMTPAsyncSession.cc in Sources */,
C6F7B19F17A1C15200BE78BB /* MCCertificateUtils.cc in Sources */,
+ 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cc in Sources */,
C64EA79E169F29A700778456 /* MCSMTPSendWithDataOperation.cc in Sources */,
C64EA7DA16A1386600778456 /* MCSMTPOperation.cc in Sources */,
C64EA7EA16A154B300778456 /* MCSMTPCheckAccountOperation.cc in Sources */,
@@ -3202,6 +3219,7 @@
C6F61FB51702AB340073032E /* MCOIMAPBaseOperation.mm in Sources */,
C608167517759967001F1018 /* MCSMTPDisconnectOperation.cc in Sources */,
C6A81BBF17068E5E00882C15 /* MCOSMTPSession.mm in Sources */,
+ 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */,
C6A81BC317068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */,
C6A81BC717068EB000882C15 /* MCOSMTPOperation.mm in Sources */,
8416A99D17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */,
@@ -3330,6 +3348,7 @@
8416A9A217F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */,
C6BA2BBF1705F4E6003F0E9E /* MCSMTPAsyncSession.cc in Sources */,
C6F7B1A017A1C15200BE78BB /* MCCertificateUtils.cc in Sources */,
+ 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cc in Sources */,
C6BA2BC01705F4E6003F0E9E /* MCSMTPSendWithDataOperation.cc in Sources */,
C6BA2BC11705F4E6003F0E9E /* MCSMTPOperation.cc in Sources */,
C6BA2BC21705F4E6003F0E9E /* MCSMTPCheckAccountOperation.cc in Sources */,
@@ -3444,6 +3463,7 @@
C6BA2C141705F4E6003F0E9E /* MCOIMAPBaseOperation.mm in Sources */,
C608167617759968001F1018 /* MCSMTPDisconnectOperation.cc in Sources */,
C6A81BC017068E5E00882C15 /* MCOSMTPSession.mm in Sources */,
+ 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */,
C6A81BC417068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */,
C6A81BC817068EB000882C15 /* MCOSMTPOperation.mm in Sources */,
8416A99E17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */,
diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc
index 1964c944..8acfc9c5 100644
--- a/src/async/smtp/MCSMTPAsyncSession.cc
+++ b/src/async/smtp/MCSMTPAsyncSession.cc
@@ -1,6 +1,7 @@
#include "MCSMTPAsyncSession.h"
#include "MCSMTPSession.h"
+#include "MCSMTPLoginOperation.h"
#include "MCSMTPSendWithDataOperation.h"
#include "MCSMTPCheckAccountOperation.h"
#include "MCSMTPDisconnectOperation.h"
@@ -206,6 +207,13 @@ void SMTPAsyncSession::tryAutomaticDisconnectAfterDelay(void * context)
op->start();
}
+SMTPOperation * SMTPAsyncSession::loginOperation()
+{
+ SMTPLoginOperation * op = new SMTPLoginOperation();
+ op->setSession(this);
+ return (SMTPOperation *) op->autorelease();
+}
+
SMTPOperation * SMTPAsyncSession::sendMessageOperation(Data * messageData)
{
SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation();
diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h
index fa0893d2..a48b5c26 100644
--- a/src/async/smtp/MCSMTPAsyncSession.h
+++ b/src/async/smtp/MCSMTPAsyncSession.h
@@ -59,6 +59,7 @@ namespace mailcore {
virtual dispatch_queue_t dispatchQueue();
#endif
+ virtual SMTPOperation * loginOperation();
virtual SMTPOperation * sendMessageOperation(Data * messageData);
virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients,
Data * messageData);
diff --git a/src/async/smtp/MCSMTPLoginOperation.cc b/src/async/smtp/MCSMTPLoginOperation.cc
new file mode 100644
index 00000000..7740b54f
--- /dev/null
+++ b/src/async/smtp/MCSMTPLoginOperation.cc
@@ -0,0 +1,29 @@
+//
+// MCSMTPLoginOperation.cc
+// mailcore2
+//
+// Created by Robert Widmann on 9/24/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "MCSMTPLoginOperation.h"
+
+#include "MCSMTPAsyncSession.h"
+#include "MCSMTPSession.h"
+
+using namespace mailcore;
+
+SMTPLoginOperation::SMTPLoginOperation()
+{
+}
+
+SMTPLoginOperation::~SMTPLoginOperation()
+{
+}
+
+void SMTPLoginOperation::main()
+{
+ ErrorCode error;
+ session()->session()->loginIfNeeded(&error);
+ setError(error);
+}
diff --git a/src/async/smtp/MCSMTPLoginOperation.h b/src/async/smtp/MCSMTPLoginOperation.h
new file mode 100644
index 00000000..88b82641
--- /dev/null
+++ b/src/async/smtp/MCSMTPLoginOperation.h
@@ -0,0 +1,34 @@
+//
+// MCSMTPLoginOperation.h
+// mailcore2
+//
+// Created by Robert Widmann on 9/24/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef MAILCORE_MCSMTPLOGINOPERATION_H
+
+#define MAILCORE_MCSMTPLOGINOPERATION_H
+
+#include <MailCore/MCBaseTypes.h>
+#include <MailCore/MCAbstract.h>
+#include <MailCore/MCSMTPOperation.h>
+
+#ifdef __cplusplus
+
+namespace mailcore {
+
+ class SMTPLoginOperation : public SMTPOperation {
+ public:
+ SMTPLoginOperation();
+ virtual ~SMTPLoginOperation();
+
+ public: // subclass behavior
+ virtual void main();
+ };
+
+}
+
+#endif
+
+#endif
diff --git a/src/cmake/async.cmake b/src/cmake/async.cmake
index 947a69ee..dc4a7243 100644
--- a/src/cmake/async.cmake
+++ b/src/cmake/async.cmake
@@ -49,6 +49,7 @@ set(async_smtp_files
async/smtp/MCSMTPCheckAccountOperation.cc
async/smtp/MCSMTPDisconnectOperation.cc
async/smtp/MCSMTPOperation.cc
+ async/smtp/MCSMTPLoginOperation.cc
async/smtp/MCSMTPSendWithDataOperation.cc
async/smtp/MCSMTPNoopOperation.cc
)
diff --git a/src/cmake/objc.cmake b/src/cmake/objc.cmake
index cdf09dd6..0de041e7 100644
--- a/src/cmake/objc.cmake
+++ b/src/cmake/objc.cmake
@@ -70,6 +70,7 @@ set(objc_rfc822_files
set(objc_smtp_files
objc/smtp/MCOSMTPOperation.mm
+ objc/smtp/MCOSMTPLoginOperation.mm
objc/smtp/MCOSMTPSendOperation.mm
objc/smtp/MCOSMTPNoopOperation.mm
objc/smtp/MCOSMTPSession.mm
diff --git a/src/cmake/public-headers.cmake b/src/cmake/public-headers.cmake
index b917dec9..df5331a4 100644
--- a/src/cmake/public-headers.cmake
+++ b/src/cmake/public-headers.cmake
@@ -183,6 +183,7 @@ objc/pop/MCOPOPFetchMessagesOperation.h
objc/pop/MCOPOPMessageInfo.h
objc/smtp/MCOSMTP.h
objc/smtp/MCOSMTPSession.h
+objc/smtp/MCOSMTPLoginOperation.h
objc/smtp/MCOSMTPSendOperation.h
objc/smtp/MCOSMTPOperation.h
objc/nntp/MCONNTP.h
diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h
index 844369f6..4f7c9135 100644
--- a/src/core/smtp/MCSMTPSession.h
+++ b/src/core/smtp/MCSMTPSession.h
@@ -95,13 +95,13 @@ namespace mailcore {
void setup();
void unsetup();
void connectIfNeeded(ErrorCode * pError);
- void loginIfNeeded(ErrorCode * pError);
bool checkCertificate();
void sendMessage(MessageBuilder * msg, SMTPProgressCallback * callback, ErrorCode * pError);
public: // private
virtual bool isDisconnected();
+ virtual void loginIfNeeded(ErrorCode * pError);
};
}
diff --git a/src/objc/smtp/MCOSMTP.h b/src/objc/smtp/MCOSMTP.h
index 49d01de3..7434a855 100644
--- a/src/objc/smtp/MCOSMTP.h
+++ b/src/objc/smtp/MCOSMTP.h
@@ -11,6 +11,7 @@
#define MAILCORE_MCOSMTP_H
#import <MailCore/MCOSMTPSession.h>
+#import <MailCore/MCOSMTPLoginOperation.h>
#import <MailCore/MCOSMTPSendOperation.h>
#import <MailCore/MCOSMTPOperation.h>
diff --git a/src/objc/smtp/MCOSMTPLoginOperation.h b/src/objc/smtp/MCOSMTPLoginOperation.h
new file mode 100644
index 00000000..7eee9986
--- /dev/null
+++ b/src/objc/smtp/MCOSMTPLoginOperation.h
@@ -0,0 +1,32 @@
+//
+// MCOSMTPLoginOperation.h
+// mailcore2
+//
+// Created by Robert Widmann on 9/24/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef MAILCORE_MCOSMTPLOGINOPERATION_H
+
+#define MAILCORE_MCOSMTPLOGINOPERATION_H
+
+#import <MailCore/MCOSMTPOperation.h>
+
+/** This is an asynchronous operation that will perform a noop operation through SMTP. */
+@interface MCOSMTPLoginOperation : MCOSMTPOperation
+
+/*
+ Starts the asynchronous operation.
+
+ @param completionBlock Called when the operation is finished.
+
+ - On success `error` will be nil
+
+ - On failure, `error` will be set with `MCOErrorDomain` as domain and an
+ error code available in MCOConstants.h,
+ */
+- (void) start:(void (^)(NSError * error))completionBlock;
+
+@end
+
+#endif
diff --git a/src/objc/smtp/MCOSMTPLoginOperation.mm b/src/objc/smtp/MCOSMTPLoginOperation.mm
new file mode 100644
index 00000000..ece721ee
--- /dev/null
+++ b/src/objc/smtp/MCOSMTPLoginOperation.mm
@@ -0,0 +1,66 @@
+//
+// MCOSMTPLoginOperation.m
+// mailcore2
+//
+// Created by Robert Widmann on 9/24/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOSMTPLoginOperation.h"
+
+#include "MCSMTPLoginOperation.h"
+
+#import "MCOUtils.h"
+#import "MCOOperation+Private.h"
+
+typedef void (^CompletionType)(NSError *error);
+
+@implementation MCOSMTPLoginOperation {
+ CompletionType _completionBlock;
+}
+
+#define nativeType mailcore::SMTPLoginOperation
+
++ (void) load
+{
+ MCORegisterClass(self, &typeid(nativeType));
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ nativeType * op = (nativeType *) object;
+ return [[[self alloc] initWithMCOperation:op] autorelease];
+}
+
+- (void) dealloc
+{
+ [_completionBlock release];
+ [super dealloc];
+}
+
+- (void) start:(void (^)(NSError *error))completionBlock
+{
+ _completionBlock = [completionBlock copy];
+ [self start];
+}
+
+- (void) cancel
+{
+ [_completionBlock release];
+ _completionBlock = nil;
+ [super cancel];
+}
+
+- (void)operationCompleted
+{
+ if (_completionBlock == NULL)
+ return;
+
+ NSError * error = [NSError mco_errorWithErrorCode:MCO_NATIVE_INSTANCE->error()];
+ _completionBlock(error);
+ [_completionBlock release];
+ _completionBlock = NULL;
+}
+
+
+@end
diff --git a/src/objc/smtp/MCOSMTPSession.h b/src/objc/smtp/MCOSMTPSession.h
index 286cd7c3..d462dbfb 100644
--- a/src/objc/smtp/MCOSMTPSession.h
+++ b/src/objc/smtp/MCOSMTPSession.h
@@ -89,6 +89,16 @@
/** @name Operations */
/**
+ Returns an operation that will perform a login.
+
+ MCOPOPOperation * op = [session loginOperation];
+ [op start:^(NSError * error) {
+ ...
+ }];
+ */
+- (MCOSMTPOperation *) loginOperation;
+
+/**
Returns an operation that will send the given message through SMTP.
It will use the recipient set in the message data (To, Cc and Bcc).
It will also filter out Bcc from the content of the message.
diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm
index e0eb2a7d..6b40c709 100644
--- a/src/objc/smtp/MCOSMTPSession.mm
+++ b/src/objc/smtp/MCOSMTPSession.mm
@@ -11,6 +11,7 @@
#include "MCAsyncSMTP.h"
#import "MCOUtils.h"
+#import "MCOSMTPLoginOperation.h"
#import "MCOSMTPSendOperation.h"
#import "MCOSMTPNoopOperation.h"
#import "MCOSMTPOperation.h"
@@ -104,6 +105,14 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue,
#pragma mark - Operations
+- (MCOSMTPOperation *) loginOperation
+{
+ mailcore::SMTPOperation * coreOp = MCO_NATIVE_INSTANCE->loginOperation();
+ MCOSMTPLoginOperation * result = [[[MCOSMTPLoginOperation alloc] initWithMCOperation:coreOp] autorelease];
+ [result setSession:self];
+ return result;
+}
+
- (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData
{
mailcore::SMTPOperation * coreOp = MCO_NATIVE_INSTANCE->sendMessageOperation([messageData mco_mcData]);