Indy 10 — IdSMTP.Send() зависает при отправке сообщений из учетной записи GMail

StackOverflow https://stackoverflow.com/questions/2145515

Вопрос

Я пытаюсь отправить электронное письмо, используя учетную запись Gmail (Delphi 7, Indy 10) со следующими настройками:

ТИДСмтп:

Port = 587;
UseTLS := utUseExplicitTLS;

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1;

Вроде все настроено нормально.Я получаю такой ответ:

Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
; bits = 128; version = TLSv1/SSLv3;

А потом зависает и не завершается.Электронная почта не отправляется.В чем может быть проблема?

Это было полезно?

Решение 2

Проблема была проста.Мне не хватило терпения и приложение не зависло, был большой таймаут.Тайм-аут возник из-за неправильных настроек.

Другие советы

да, я видел много проблем с indy10 и tls (обычно с Gmail).

сначала убедитесь, что у вас установлены последние версии SSL-библиотек отсюда

я видел периодические зависания и ошибки, которые были устранены в новейшей версии Indy (т.нестабильная версия).видеть http://www.indyproject.org/sockets/download/svn.DE.aspx

для Gmail я обычно использую implicityTLS на порту 465..

  idSmtp := TIdSMTP.Create(nil);
  try
    idSmtp.IOHandler := nil;
    idSmtp.ManagedIOHandler := true;

    // try to use SSL
    try
      TIdSSLContext.Create.Free;
      idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
      if (smtpSettings.port = 465) then
        idSmtp.UseTLS := utUseImplicitTLS
      else
        idSmtp.UseTLS := utUseExplicitTLS;
    except
      idSmtp.IOHandler.Free;
      idSmtp.IOHandler := nil;
    end;

    if (idSmtp.IOHandler = nil) then
    begin
      idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
      idSmtp.UseTLS := utNoTLSSupport;
    end;

    // send message, etc

  finally
    idSmtp.Free;
  end;

Прежде всего, проверили ли вы, что код работает с другими почтовыми серверами?

Некоторое время назад кто-то упомянул, что у них были проблемы с некоторыми серверами, принимающими http-запросы с помощью компонента Indy TIdHTTP.Причина в том, что Indy был включен в состав пользовательского агента:

      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';

Когда они удалили Инди Библиотека это сработало.Очевидно, с помощью Indy были созданы вредоносные веб-сервисы, поэтому некоторые сайты отказываются подключаться к приложениям, созданным с его помощью.

Я не уверен, имеет ли используемый вами компонент какое-либо свойство UserAgent.Но если это так, исключите любые ссылки на Инди.

При тестировании Indy вы должны быть уверены, что установлен флажок «Остановить исключения Delphi» (Инструменты, Параметры отладчика, Языковые исключения).

Некоторые процедуры, в частности idSMTP.Send, «поедают» (или скрывают) исключения, приводящие к зависанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top