我尝试在iOS中使用mailcore2连接和获取邮件.但我弄错了



错误域=MCOError域代码=5"无法使用当前会话的凭据进行身份验证"UserInfo={NSLocalizedDescription=无法使用当前会话的凭据进行身份验证。}

我把这个代码放在我的项目中。

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
prepareImapSession()
}

var imapsession:MCOIMAPSession = MCOIMAPSession()
var error : Error? = nil

func prepareImapSession()
{
// CONFIGURE THAT DEPENDING OF YOUR NEEDS
imapsession.hostname = "imap.gmail.com" // String
imapsession.username = my email // String
imapsession.password = password // String
imapsession.port = 993 // UInt32 number
imapsession.authType = MCOAuthType.saslLogin
imapsession.connectionType = MCOConnectionType.TLS
DispatchQueue.main.asyncAfter(deadline: .now() + 8) { [self] in
self.useImapWithUIDS()
}
imapsession.connectOperation()
}


func useImapWithUIDS() {
// There is more than one option here, explore depending of your needs
//    let kind = MCOIMAPMessagesRequestKind()
//    let headers = kind.union(MCOIMAPMessagesRequestKind.headers)
//    let request = headers.union(MCOIMAPMessagesRequestKind.flags)

let requestKind: MCOIMAPMessagesRequestKind = [.headers, .flags]
let folder : String = "INBOX"

// HERE ALSO EXPLORE DEPENDING OF YOUR NEEDS, RANGE IT IS THE RANGE OF THE UIDS THAT YOU WANT TO FETCH, I SUGGEST TO YOU TO CHANGE THE  // NUMBER ONE IF YOU HAVE A LOWER BOUND TO FETCH EMAIL
let uids : MCOIndexSet = MCOIndexSet(range: MCORangeMake(1, UINT64_MAX))

let fetchOperation  = imapsession.fetchMessagesOperation(withFolder: folder, requestKind: requestKind, uids: uids)

fetchOperation?.start
{ [self] (err, msg, vanished) -> Void in

if (err != nil)
{
self.error = err
NSLog((err?.localizedDescription)!)
}
else
{

guard let msgs = msg as? [MCOIMAPMessage]
else
{
print("ERROR GETTING THE MAILS")
return
}

for i in 0..<msgs.count
{
// THE SUBJECT
let subject = msgs[i].header.subject

// THE uid for this email. The uid is unique for one email
let uid = msgs[i].uid

self.useImapFetchContent(uidToFetch: uid)
// The sequenceNumber like the nomber say it is the sequence for the emails in the INBOX from the first one                                     // (sequenceNumber = 1) to the last one , it not represent always the same email. Because if you delete one email then                              //next one will get the sequence number of that email that was deleted
let sequenceNumber = msgs[i].sequenceNumber

}
}
}
}

// MARK: - EXTRACT THE CONTENT OF ONE EMAIL, IN THIS FUNCTION YOU NEED THE uid, THE UNIQUE NUMBER FOR ONE EMAIL
func useImapFetchContent(uidToFetch uid: UInt32) {

let operation: MCOIMAPFetchContentOperation = imapsession.fetchMessageOperation(withFolder: "INBOX", uid: uid)
operation.start { (Error, data) in
if (Error != nil)
{
NSLog("ERROR")
return
}

let messageParser: MCOMessageParser = MCOMessageParser(data: data)

// IF YOU HAVE ATTACHMENTS USE THIS
let attachments = messageParser.attachments() as? [MCOAttachment]

// THEN YOU NEED THIS PROPERTIE, IN THIS EXAMPLE I TAKE THI FIRST, USE WHAT EVER YOU WANT
let attachData = attachments?.first?.data

// FOR THE MESSAGEPARSER YOU CAN EPLORE MORE THAN ONE OPTION TO OBTAIN THE TEXT
let msgPlainBody = messageParser.plainTextBodyRendering()

}

}
}

我使用的是mailcore2框架。我得到错误描述无法使用当前会话的凭据进行身份验证

它可能与您的帐户上的第二因素身份验证有关。这是在苹果论坛上描述的。

相关内容

  • 没有找到相关文章

最新更新