У меня странная проблема с отправкой электронного письма через Gmail. Я использую Delphi 7 и Indy 9, работаю над 32-разрядной версией Windows 7 Professionel на VirtualBox (4.2)
Поскольку Indy 9 не поддерживает TLS из коробки, я должен сам послать команду STARTTLS.
Это хорошо работает с небольшим тестовым письмом. Обычное письмо с вложением приводит к полному сбою VirtualBox. Нет синего экрана Windows.
Я уже нашел обходной путь, но он кажется довольно грязным. Если я добавлю IdSSLOpenSSL.pas из источника Delphi и добавлю Sleep (5); с функцией отправки работает
function TIdSSLIOHandlerSocket.Send(var ABuf; ALen: integer): integer;
begin
// 13.12.2012 fix timing
Sleep(5);
if fPassThrough then begin
result := inherited Send(ABuf, ALen);
end
else begin
result := SendEnc(ABuf, ALen);
end;
end;
Есть ли лучший способ решить эту проблему?
Если вам нужен Код для настройки IOHandler
sslIOHandler := TIdSSLIOHandlerSocket.Create(nil);
sslIOHandler.SSLOptions.Method := sslvTLSv1;
sslIOHandler.PassThrough := True;
IdSSLOpenSSLHeaders.Load;
smtpClient.Username := tbUsername.Text;
smtpClient.Password := tbPassword.Text;
smtpClient.AuthenticationType := atLogin;
smtpClient.IOHandler := sslIOHandler;
smtpClient.Connect(C_TIMEOUT);
smtpClient.SendCmd('STARTTLS');
sslIOHandler.PassThrough := False;
smtpClient.Authenticate();
STARTTLS
и установления сеанса TLS вам необходимо повторно ввести новую команду _2 _ / _ 3_, чтобы обнаружить новые возможности сервера, которые могли измениться из-за активации TLS. - person Remy Lebeau   schedule 14.12.2012