diff options
author | Dmitry Isaikin <isaikin@corp.mail.ru> | 2016-02-02 19:23:58 +0300 |
---|---|---|
committer | Dmitry Isaikin <isaikin@corp.mail.ru> | 2016-02-09 15:53:40 +0300 |
commit | f9cdd2e6193cddfa405723eb70dda9261b26848d (patch) | |
tree | 0448dfc39864b9d52b55d5ad7a91d16d15bb2c71 /src/objc | |
parent | 908b7d4b8fdd7be43687450a36d56a6fb905ca25 (diff) |
Add file-based interface for sending messages via SMTP (reduce memory usage)
Diffstat (limited to 'src/objc')
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.h | 18 | ||||
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.mm | 12 | ||||
-rw-r--r-- | src/objc/smtp/MCOSMTPSession.h | 18 | ||||
-rw-r--r-- | src/objc/smtp/MCOSMTPSession.mm | 13 |
4 files changed, 61 insertions, 0 deletions
diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h index bab3be7f..6fd5f76e 100755 --- a/src/objc/imap/MCOIMAPSession.h +++ b/src/objc/imap/MCOIMAPSession.h @@ -305,6 +305,24 @@ customFlags:(NSArray *)customFlags; /** + Returns an operation to add a message with custom flags to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" + contentsAtPath:rfc822DataFilename + flags:MCOMessageFlagNone + customFlags:@[@"$CNS-Greeting-On"]]; + [op start:^(NSError * __nullable error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; + */ +- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder + contentsAtPath:(NSString *)path + flags:(MCOMessageFlag)flags + customFlags:(NSArray *)customFlags; + +/** Returns an operation to copy messages to a folder. MCOIMAPCopyMessagesOperation * op = [session copyMessagesOperationWithFolder:@"INBOX" diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index 32dd1119..c245cdc3 100755 --- a/src/objc/imap/MCOIMAPSession.mm +++ b/src/objc/imap/MCOIMAPSession.mm @@ -264,6 +264,18 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, return MCO_TO_OBJC_OP(coreOp); } +- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder + contentsAtPath:(NSString *)path + flags:(MCOMessageFlag)flags + customFlags:(NSArray *)customFlags +{ + IMAPAppendMessageOperation * coreOp = MCO_NATIVE_INSTANCE->appendMessageOperation([folder mco_mcString], + MCO_FROM_OBJC(String, path), + (MessageFlag) flags, + MCO_FROM_OBJC(Array, customFlags)); + return MCO_TO_OBJC_OP(coreOp); +} + - (MCOIMAPCopyMessagesOperation *)copyMessagesOperationWithFolder:(NSString *)folder uids:(MCOIndexSet *)uids destFolder:(NSString *)destFolder diff --git a/src/objc/smtp/MCOSMTPSession.h b/src/objc/smtp/MCOSMTPSession.h index 31055335..84d6949d 100644 --- a/src/objc/smtp/MCOSMTPSession.h +++ b/src/objc/smtp/MCOSMTPSession.h @@ -154,6 +154,24 @@ from:(MCOAddress *)from recipients:(NSArray *)recipients; + +/** + Returns an operation that will send the message from the given file through SMTP. + It will use the sender and recipient set from the parameters. + It will also filter out Bcc from the content of the message. + + MCOSMTPOperation * op = [session sendOperationWithContentsOfFile:rfc822DataFilename + from:[MCOAddress addressWithMailbox:@"hoa@etpan.org"] + recipients:[NSArray arrayWithObject: + [MCOAddress addressWithMailbox:@"laura@etpan.org"]]]; + [op start:^(NSError * __nullable error) { + ... + }]; + */ +- (MCOSMTPSendOperation *) sendOperationWithContentsOfFile:(NSString *)path + from:(MCOAddress *)from + recipients:(NSArray *)recipients; + /** Returns an operation that will check whether the SMTP account is valid. diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm index 9bcbd48e..9406a719 100644 --- a/src/objc/smtp/MCOSMTPSession.mm +++ b/src/objc/smtp/MCOSMTPSession.mm @@ -170,6 +170,19 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue, return result; } +- (MCOSMTPSendOperation *) sendOperationWithContentsOfFile:(NSString *)path + from:(MCOAddress *)from + recipients:(NSArray *)recipients +{ + mailcore::SMTPOperation * coreOp = + MCO_NATIVE_INSTANCE->sendMessageOperation(MCO_FROM_OBJC(Address, from), + MCO_FROM_OBJC(Array, recipients), + MCO_FROM_OBJC(String, path)); + MCOSMTPSendOperation * result = [[[MCOSMTPSendOperation alloc] initWithMCOperation:coreOp] autorelease]; + [result setSession:self]; + return result; +} + - (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from { mailcore::SMTPOperation *coreOp = MCO_NATIVE_INSTANCE->checkAccountOperation(MCO_FROM_OBJC(mailcore::Address, from)); |