-
Notifications
You must be signed in to change notification settings - Fork 628
IMAP Examples (Swift)
Nik Wakelin edited this page Nov 23, 2021
·
2 revisions
Here are some common IMAP operations with Swift example code:
You can use a session without checking, but this is useful for validating details entered by a user
let session = MCOIMAPSession()
session.hostname = "imap.example.com"
session.port = 993
session.connectionType = .TLS
session.username = "[email protected]"
session.password = "swordfish"
if let op = session.checkAccountOperation() {
op.start { err in
if let err = err {
print("IMAP Connect Error: \(err)")
} else {
print("Successful IMAP connection!")
}
}
}
(Note: session
should be an MCOIMAPSession
instance as above)
if let op = session?.fetchAllFoldersOperation() {
op.start { error, folderList in
if let err = error {
print("Error fetching folders: \(err)")
}
if let folders = folderList {
print("Listed all IMAP Folders: \(folders.debugDescription)")
}
}
}
This example function also shows you how to combine search operators.
func searchMessages(session: MCOIMAPSession, in: MCOIMAPFolder, since: Date, unreadOnly: Bool) {
var search = MCOIMAPSearchExpression.search(sinceReceivedDate: since)
if unreadOnly {
search = MCOIMAPSearchExpression.searchAnd(search, other: MCOIMAPSearchExpression.searchUnread())
}
if let op = session.searchExpressionOperation(withFolder: `in`.path, expression: search) {
op.start { error, messageIds in
if let err = error {
print("Error searching IMAP: \(err)")
return
}
if let messageIds = messageIds {
// now have a set of UIDs, we can fetch more using a fetch operation
if let messageOp = self.session?.fetchMessagesOperation(withFolder: `in`.path, requestKind: [ .flags, .fullHeaders, .internalDate, .size, .structure], uids: messageIds) {
// if you would like to fetch some non-standard headers
messageOp.extraHeaders = [ "Delivered-To" ]
messageOp.start { error, messages, _ in
if let error = error {
print("Error fetching messages: \(error)")
return
}
if let messages = messages {
print("Retrieved \(messages.count) message(s) from IMAP server")
// now do whatever you need to with your messages :)
print("Messages: \(messages.debugDescription)")
}
}
}
}
}
}
}