C # Mailkit - IMap Не удается открыть / проверить входящие из-за небезопасного входа в систему? - PullRequest
0 голосов
/ 16 декабря 2018

Следующий код показывает, как я подключаюсь к своему серверу IMap, кажется, что он подключается к другим серверам IMap без проблем и проходит проверку подлинности, но не позволяет мне открыть папку входящих сообщений из-за небезопасного входа в систему?

Строка inbox.Open(FolderAccess.ReadOnly) - это место, где код ломается и выдает следующую ошибку:

The IMAP server replied to the 'EXAMINE' command with a 'NO' response: EXAMINE Unsafe Login. Please contact kefu@188.com for help

Я пытался включить SSL, но результат все тот же.Я могу войти в это EMail, используя другие почтовые клиенты, такие как Microsoft Mail.

    public static int getResult(string ToEmail, string imapServer, int port, string user, string pwd, DateTime timeCodeRequested)
    {
        using (var client = new ImapClient(new ProtocolLogger("C:/log/log.txt")))
        {
            client.ServerCertificateValidationCallback = (s, c, h, e) => true;

            // Remove the XOAUTH2 authentication mechanism since we don't have an OAuth2 token.
            client.AuthenticationMechanisms.Remove("XOAUTH2");

            client.Connect(imapServer, port, true);

            client.Authenticate(user, pwd);

            TryAgain:
            // The Inbox folder is always available on all IMAP servers...
            var inbox = client.Inbox;
            inbox.Open(FolderAccess.ReadOnly);

            IList<OrderBy> orderBy = new[] { OrderBy.ReverseArrival };
            IList<UniqueId> ids = inbox.Sort(SearchQuery.FromContains("sh@n.com")
                .And(SearchQuery.ToContains(ToEmail))
                .And(SearchQuery.DeliveredAfter(timeCodeRequested)
                .And(SearchQuery.YoungerThan(80))), orderBy);

            if (ids.Count == 0)
            {
                goto TryAgain;
            }
            else
            {
                foreach (UniqueId id in ids)
                {
                    var message = inbox.GetMessage(id);
                    var ex = message.Subject.ToString();
                    ex = ex.Substring(ex.Count() - 6);

                    try
                    {
                        return Convert.ToInt32(ex);
                    }
                    catch
                    {
                        continue;
                    }
                }
                goto TryAgain;
            }
        }
    }

Вот вывод журнала IMap C:/log/log.txt, я удалил учетные данные IMap

S: * OK Coremail System IMap Server C: A00000000 CAPABILITY S: * CAPABILITY IMAP4rev1 XLIST SPECIAL-USE ID LITERAL+ STARTTLS XAPPLEPUSHSERVICE UIDPLUS X-CM-EXT-1 S: A00000000 OK CAPABILITY completed C: A00000001 LOGIN email password S: A00000001 OK LOGIN completed C: A00000002 CAPABILITY S: * CAPABILITY IMAP4rev1 XLIST SPECIAL-USE ID LITERAL+ STARTTLS XAPPLEPUSHSERVICE UIDPLUS X-CM-EXT-1 S: A00000002 OK CAPABILITY completed C: A00000003 LIST "" "" S: * LIST (\Noselect) "/" "" S: A00000003 OK LIST Completed C: A00000004 LIST "" "INBOX" S: * LIST () "/" "INBOX" S: A00000004 OK LIST Completed C: A00000005 LIST (SPECIAL-USE) "" "*" S: * LIST (\Drafts) "/" "&g0l6P3ux-" S: * LIST (\Sent) "/" "&XfJT0ZAB-" S: * LIST (\Trash) "/" "&XfJSIJZk-" S: * LIST (\Junk) "/" "&V4NXPpCuTvY-" S: A00000005 OK LIST Completed C: A00000006 EXAMINE INBOX S: A00000006 NO EXAMINE Unsafe Login. Please contact kefu@188.com for help

1 Ответ

0 голосов
/ 16 декабря 2018

Кажется, что администратор вашего IMAP-сервера решил разрешить команду LOGIN, но считает ее слишком небезопасной, чтобы позволить вам фактически открывать папки при входе в систему с использованием этого метода аутентификации.

Обычно MailKit пытаетсяиспользовать аутентификацию SASL, если она доступна, но ваш IMAP-сервер, похоже, не объявляет о поддержке каких-либо механизмов аутентификации SASL.

В этих случаях я обычно рекомендую попытаться подключиться к порту SSL или хотя бы попробоватьиспользуя STARTTLS (который поддерживает ваш сервер):

client.Connect (host, port, SecureSocketOptions.StartTls);

Однако вы сказали, что эта ошибка сохраняется даже после использования SSL, что означает, что у меня нет других предложений, кроме как следовать предложению в ошибкесообщение и электронная почта kefu@188.com для помощи.

...