Не удалось установить стабильное соединение с сервером

Я пытаюсь подключиться к Google с помощью OAuth2. У меня есть access_token и электронная почта пользователя. Вот не проблема.

let singleton: Singleton = Singleton.sharedInstance 
singleton.session.authType = MCOAuthType.XOAuth2 // session:IMAPSession
singleton.session.OAuth2Token = singleton.accessToken
singleton.session.username = singleton.email
singleton.session.hostname = "imap.gmail.ru"
singleton.session.port = 993
singleton.session.connectionType = MCOConnectionType.StartTLS

Следующим шагом я создаю операцию выборки и получаю сообщение об ошибке

let requestKind = MCOIMAPMessagesRequestKind.Headers  | MCOIMAPMessagesRequestKind.Flags | MCOIMAPMessagesRequestKind.Structure
    let uids = MCOIndexSet(range: MCORangeMake(1, UINT64_MAX))
    let folder = "INBOX"

    let fetchOperation = singleton.session.fetchMessagesOperationWithFolder(folder, requestKind: requestKind, uids: uids)
    fetchOperation.start { (error, fetchedMessages, vanishedMessages) -> Void in
        if (error != nil)
        {
            println("Error: \(error)") // this line return me error
        }

Ошибка: Error Domain=MCOErrorDomain Code=1 «Не удалось установить стабильное соединение с сервером». UserInfo=0x7f9e260036b0 {NSLocalizedDescription=Не удалось установить стабильное соединение с сервером.} Ошибка: Error Domain=MCOErrorDomain Code=1 "Не удалось установить стабильное соединение с сервером". UserInfo=0x7f9e23c46c00 {NSLocalizedDescription=Не удалось установить стабильное соединение с сервером.}

В чем может быть проблема?


person minroff    schedule 08.04.2015    source источник
comment
Правильное имя хоста — imap.gmail.com, а не imap.gmail.ru.   -  person Dinh Viêt Hoà    schedule 09.04.2015
comment
@DinhViêtHoà, я исправил это вчера. Но я получаю новую ошибку: Невозможно пройти аутентификацию с учетными данными текущего сеанса. пробовал менять порт и тип подключения, но после этого снова получаю: Не удалось установить стабильное соединение с сервером   -  person minroff    schedule 09.04.2015
comment
Невозможно пройти аутентификацию, вероятно, правильное сообщение об ошибке. Это означает, что вы можете подключиться к серверам Gmail. Вам просто нужно проверить свою аутентификацию OAuth2 и использовать регистраторы соединений в сеансе imap для отладки ваших вещей.   -  person Dinh Viêt Hoà    schedule 09.04.2015
comment
@DinhViêtHoà Может ли проблема быть в моем запросе URL? let url = NSURL(string:(NSString(format: "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%@&redirect_uri=%@&scope=%@&data-requestvisibleactions=%@",client_id,callback,scope,visibleactions))) self.webView.loadRequest(NSURLRequest(URL: url!))   -  person minroff    schedule 13.04.2015
comment
Не могу дать совет по поводу OAuth2, только с mailcore.   -  person Dinh Viêt Hoà    schedule 13.04.2015
comment
@DinhViêtHoà Я использую те же настройки сеанса IMAP, что и OP, но все равно получаю стабильное соединение с сервером. иногда. Что-нибудь еще я могу попробовать?   -  person shrishaster    schedule 25.04.2015
comment
Эти строки показывают, что они должны быть зафиксированы на singleton.session.hostname = "imap.gmail.com" singleton.session.port = 993 singleton.session.connectionType = MCOConnectionType.TLS   -  person Dinh Viêt Hoà    schedule 25.04.2015
comment
У меня такая же проблема, потому что у меня не было доступа к gmail. Попробуйте тот же код с интернетом с полным доступом. благодарю вас.   -  person Aaban Tariq Murtaza    schedule 05.08.2015


Ответы (1)


Ребята, вот рабочий код:

    var smtpSession = MCOSMTPSession()
    smtpSession.hostname = "xxxxxxxx"
    smtpSession.username = "xxxxxxx"
    smtpSession.password = "xxxxxxxx"
    smtpSession.port = 8465
    smtpSession.authType = MCOAuthType.SASLPlain
    smtpSession.connectionType = MCOConnectionType.TLS
    smtpSession.connectionLogger = {(connectionID, type, data) in
        if data != nil {
            if let string = NSString(data: data, encoding: NSUTF8StringEncoding){
                NSLog("Connectionlogger: \(string)")
            }
        }
    }

    var builder = MCOMessageBuilder()
    builder.header.to = [MCOAddress(displayName: "Rool", mailbox: "[email protected]")]
    builder.header.from = MCOAddress(displayName: "Matt R", mailbox: "[email protected]")
    builder.header.subject = "My message"
    builder.htmlBody = "<h3>This is a test message!</h3>"

    let rfc822Data = builder.data()
    let sendOperation = smtpSession.sendOperationWithData(rfc822Data)
    sendOperation.start { (error) -> Void in
        if (error != nil) {
            NSLog("Error sending email: \(error)")
        } else {
            NSLog("Successfully sent email!")
        }
    }

PS: я использовал этот код для SMTP2GO, и он работает безупречно, просто убедитесь, что вы используете правильный порт.

person Codetard    schedule 22.07.2016