2016-05-27 6 views
2

Я хочу отправить письмо через сервер GMail.Не удается отправить электронную почту (через GMail) с помощью Indy. Несоответствие версии протокола

TRY 
    SMTP.Connect;  // <---- This is TIdSMTP 
    EXCEPT 
    Log.AddError('Cannot connect to the email server.'); 
    END; 

    if SMTP.Connected then 
    TRY 
    SMTP.Send(MailMessage); 
    EXCEPT 
    on E:Exception DO 
     begin 
     Log.AddError('Connected to server but could not send email!'); 
     Log.AddError(E.Message); 
     end; 
    END; 

if SMTP.Connected 
then SMTP.Disconnect; 

Этот фрагмент кода работал в 2014 году с Delphi XE.

Программа подключается к серверу нормально, но в конце концов он говорит: «SSL не доступен на этом сервере»:

Resolving hostname smtp.Gmail.com. 
Connecting to 74.125.xxx.xxx 
Connected. 
Connected to SMTP server... 
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 hello A" 
Disconnected. 
Connected to server but could not send email! 
SSL is not available on this server. 

Я имею последнюю версию OpenSSL (скачано сегодня) и Delphi XE7.
WireShark говорит:

Предупреждение (Уровень: Fatal, Описание: протокол версии)

Почему я не могу отправить по электронной почте?
Я попробовал все: нет TSL, неявный, явный, startTSL ...

enter image description here

ответ

4

РЕШЕНИЯ: sslvTLSv1 должны быть включены в SSLIOHandler.SSLVersions собственности.

+0

Версия ALL может быть активирована (не только v1 и v3), чтобы быть на безопасной стороне (убедитесь, что код работает со всеми серверами электронной почты) ... – Ampere

+0

Спасибо WireShark. – Ampere

+2

Нет 'sslvSSLv1'. Вместо этого вы думаете о 'sslvTLSv1'. –