Indy 9 SMTP Send с TLS вызывает сбой

У меня странная проблема с отправкой электронного письма через 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();

person fuchs777    schedule 13.12.2012    source источник
comment
Есть ли какие-то причины использовать устаревшую, неподдерживаемую, Indy 9, в то время как есть бесплатная Indy 10 и множество других компонентов?   -  person Nickolay Olshevsky    schedule 13.12.2012
comment
После успешной отправки STARTTLS и установления сеанса TLS вам необходимо повторно ввести новую команду _2 _ / _ 3_, чтобы обнаружить новые возможности сервера, которые могли измениться из-за активации TLS.   -  person Remy Lebeau    schedule 14.12.2012
comment
@ Nickolay, у нас слишком много приложений, работающих на этой настройке, чтобы перейти на Indy 10 в приемлемое время, в любом случае это не мое решение @Remy Lebeau, я не понимаю, что это должно помочь с очевидной проблемой синхронизации в обработчике ssl, но спасибо за подсказку   -  person fuchs777    schedule 14.12.2012


Ответы (1)


Поскольку, похоже, ни у кого нет решения для этого, и обновление до Indy 10 не вариант (задействовано слишком много проектов), я нашел другую библиотеку для обработки smtp с tls ...

Теперь я использую Synapse, который не мешает Indy 9 и делает то, что я ожидал.

http://synapse.ararat.cz/doku.php/public:howto:smtpsend

Надеюсь, это поможет другим с той же проблемой.

person fuchs777    schedule 22.01.2013