Не удается получить электронную почту из gmail с помощью Indy

Я часто использую TIdPOP3, и он отлично работает, за исключением учетных записей GMail.

Почему-то это никогда не работает. Я пробовал разные комбинации и порты, с SSL и без него, и всегда возвращал разные ошибки.

Моя последняя попытка состояла в том, чтобы создать пароль «для конкретного приложения» в Gmail и попытаться подключиться с использованием этого пароля к порту 995. На этот раз он возвращает «Соединение закрыто изящно».

Resolving hostname pop.gmail.com.
Connecting to 172.217.192.108.
Connected.
Disconnected.
Connection Closed Gracefully.

Я также пробовал это:

popb.Host := 'pop.gmail.com';
popb.username := '[email protected]';
popb.password := 'mypassword';
popb.Port := 995;
popb.IOHandler := sslpop;
popb.UseTLS := utUseImplicitTLS;
with sslpop do
begin
  Destination := 'pop.gmail.com:995';
  Host := 'pop.gmail.com';
  Port := 995;
  DefaultPort := 0;
end;

В этом последнем примере он возвращает эту ошибку:

Ошибка соединения с SSL. ошибка: 00000006: библиотека (0): функция (0): библиотека EVP

У этой конкретной учетной записи, которую я пытаюсь получить, есть двухэтапная проверка; делает ли это невозможным использование с Indy?


person delphirules    schedule 03.02.2021    source источник
comment
Я думаю, вам нужно включить настройки POP/IMAP в GMail. В противном случае вам необходимо использовать аутентификацию OAuth2 и вызовы REST API.   -  person John Kouraklis    schedule 03.02.2021
comment
@JohnKouraklis Это уже было включено, моя проблема была другой, как показывает мой ответ. Спасибо, в любом случае !   -  person delphirules    schedule 03.02.2021
comment
Я точно знаю, что функция GMail «пароль для конкретного приложения» работает с Indy, потому что я проверял ее много раз. Кстати, НЕ устанавливайте SSLIOHandler свойства, которые вы устанавливаете, Connect обрабатывает их за вас.   -  person Remy Lebeau    schedule 03.02.2021


Ответы (1)


Я мог бы решить эту проблему, установив Ssloptions.Method := sslvSSLv23.

Вот полный рабочий код:

    pop.Host := 'pop.gmail.com';
    pop.username := '[email protected]';
    pop.password := 'mypassword';
    pop.Port := 995;
    pop.IOHandler := sslpop;
    pop.UseTLS := utUseImplicitTLS;
    with sslpop do
    begin
      Destination := 'pop.gmail.com:995';
      Ssloptions.Method := sslvSSLv23;
      Host := 'pop.gmail.com';
      Port := 995;
      DefaultPort := 0;
    end;
person delphirules    schedule 03.02.2021
comment
Я вижу, что вы решили эту проблему, но вы можете найти дополнительную информацию от Реми Лебо по следующей ссылке: stackoverflow.com/questions/27261199/, где он заявляет, что SSLOption.Method не следует использовать больше, и вместо этого следует использовать это свойство SSLOption.SSLVersions. - person Mark; 03.02.2021
comment
Да, замените SSSLOptions.Method := sslvSSLv23; на SSLOptions.SSLVersion := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; вместо этого - person Remy Lebeau; 03.02.2021