Indy 10-IdSMTP.Send () зависает при отправке сообщений из учетной записи GMail
Я пытаюсь отправить электронное письмо с помощью учетной записи gmail (Delphi 7, Indy 10) с этими настройками:
TIdSmtp:
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;
а затем он висит и не заканчивается. E-mail не отправляется. В чем может быть проблема?
4 ответов
да, я видел много проблем с indy10 и tls (обычно gmail).
сначала убедитесь, что у вас есть последние библиотеки ssl отсюда
Я видел прерывистые киоски и ошибки, которые были разрешены в версии bleeding edge 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 в состав useragent:
Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
когда они удалены Indy Библиотека это сработало. Очевидно, были некоторые злокачественные веб-сервисы, созданные с помощью Indy, поэтому некоторые сайты откажутся соединения из приложений, созданных с его помощью.
Я не уверен, что компонент, который вы используете, имеет какое-либо свойство UserAgent. Но если это так, вычеркните любые ссылки на Indy.
при тестировании Indy вы должны быть уверены, что" Stop on Delphi Exceptions " (Инструменты, Параметры отладчика, языковые исключения).
некоторые процедуры, в частности idSMTP.Отправить, " ест " (или скрывает) исключения, приводящие к зависанию.