-
Добрый день. Вроде тема избита до костей, в сети полно примеров. Но не могу отправить сообщение. Результат: socket error # 10060 connection timed out. Ниже приведен код.
SSLHandler:= TIdSSLIOHandlerSocketOpenSSL.Create(idSMTP1);
SSLHandler.MaxLineAction := maException;
SSLHandler.SSLOptions.Method := sslvTLSv1;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.VerifyMode := [];
SSLHandler.SSLOptions.VerifyDepth := 0;
idSMTP1.IOHandler:= SSLHandler;
idSMTP1.Host := 'smtp.gmail.com';
idSMTP1.Port := '587';
idSMTP1.Username := 'user@gmail.com';
idSMTP1.Password := 'password';
idSMTP1.AuthType := satDefault;
idSMTP1.UseTLS := utUseExplicitTLS;
idMessage1.From.Text := 'text';
idMessage1.Subject := 'subject';
idMessage1.Recipients.EMailAddresses := 'cad2206@gmail.com'
idSMTP1.Connect;
idSMTP1.Send(idMessage1);
Подскажите пожалуйста, где ошибка? пишу в Delphi 2010. Indy версии 10. С уважением, Сергей.
-
telnet smtp.gmail.com 587
-
telnet smtp.gmail.com 587 отвечает
-
тады что-то с тлс не того
-
да я понимаю, что где-то засада с TLS, а где - не пойму...
-
пробовал так:
procedure TForm1.Button1Click(Sender: TObject);
var
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
IdSMTP: TIdSMTP;
IdMessage: TIdMessage;
IdText: TIdText;
sAnexo: string;
begin
IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
IdSMTP := TIdSMTP.Create(Self);
IdMessage := TIdMessage.Create(Self);
try
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
IdSMTP.IOHandler := IdSSLIOHandlerSocket;
IdSMTP.UseTLS := utUseImplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := 465;
IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Username := 'user@gmail.com';
IdSMTP.Password := 'pass';
IdMessage.From.Address := 'user@gmail.com';
IdMessage.From.Name := 'John Smith';
IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
IdMessage.Recipients.Add.Text := 'user@gmail.com';
IdMessage.Subject := 'Hello World';
IdMessage.Encoding := meMIME;
IdText := TIdText.Create(IdMessage.MessageParts);
IdText.Body.Add('The body of the e-mail goes here');
IdText.ContentType := 'text/plain; charset=iso-8859-1';
try
IdSMTP.Connect;
IdSMTP.Authenticate;
except
on E:Exception do
begin
MessageDlg('Cannot authenticate: ' +
E.Message, mtWarning, [mbOK], 0);
Exit;
end;
end;
try
IdSMTP.Send(IdMessage);
MessageDlg('Message sent successfully!', mtInformation, [mbOK], 0);
except
On E:Exception do
begin
MessageDlg('Error while sending a message: ' +
E.Message, mtWarning, [mbOK], 0);
end;
end;
finally
FreeAndNil(IdMessage);
FreeAndNil(IdSSLIOHandlerSocket);
FreeAndNil(IdSMTP);
end;
end;
end.
это копия кода от http://stackoverflow.com/questions/31776715/send-e-mail-using-gmail-and-indyта же ошибка: Connection Timed Out... ну может кто даст рабочий код или подскажет, что не так?
-
уважаемые, ну не ужели ни кто не в силах помочь? может я мало данных предоставил для понимания?
-
Сними дамп установления соединения с помощью Wireshark и выложи его куда-нибудь. Из него можно будет понять, что не так пошло при установлениии TLS соединения.
-
немного перебрал код:
IdMessage1 := TIdMessage.Create;
IdMessage1.From.Address := 'test';
IdMessage1.Recipients.Add.Address:='test@gmail.com';
IdMessage1.Subject := UTF8Encode('test');
IdMessage1.Date:= now;
IdSMTP := TIdSMTP.Create(nil);
IdSMTP.Host:=Form1.Edit1.Text;
IdSMTP.Port:=StrToInt(Form1.Edit2.Text);
IdSMTP.Username:=Form1.Edit3.Text;
IdSMTP.Password:=Form1.Edit4.Text;
IdSMTP.AuthType:=satDefault;
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdSSLIOHandlerSocketOpenSSL.Destination := IdSMTP.Host+':'+IntToStr(IdSMTP.Port);
IdSSLIOHandlerSocketOpenSSL.Host := IdSMTP.Host;
IdSSLIOHandlerSocketOpenSSL.Port := IdSMTP.Port;
IdSSLIOHandlerSocketOpenSSL.DefaultPort := 0;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
IdSMTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
case Form1.ComboBox2.ItemIndex of
0: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv2;
1: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
2: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv3;
3: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1
else
raise Exception.Create('Выберите тип SSL');
end;
case Form1.ComboBox1.ItemIndex of
0: IdSMTP.UseTLS := utUseExplicitTLS;
1: IdSMTP.UseTLS := utUseImplicitTLS;
2: IdSMTP.UseTLS := utUseRequireTLS;
3: IdSMTP.UseTLS := utNoTLSSupport;
else
raise Exception.Create('Выберите тип TLS');
end;
try
IdSMTP.Connect;
if idSMTP.Connected then
MessageBox(handle,pchar('Подключение к SMTP серверу успешно'), pchar('ee'), 48);
except
MessageBox(handle,pchar('Ошибка подключения к SMTP Серверу'), pchar('ee'), 48);
exit;
end;
IdSMTP.Send(IdMessage1);
Application.ProcessMessages;
IdSMTP.Disconnect;
idMessage1.Free;
IdSSLIOHandlerSocketOpenSSL.Free;
idSMTP.Free;
end;
в результате, при значениях: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method = sslvSSLv3 или sslvTLSv1 IdSMTP.UseTLS := utUseExplicitTLS; вроде как выдается сообщение 'Подключение к SMTP серверу успешно'. Но следом Connection timed Out и Connection Closed Gracefully. Что за бред...
-
-
ошибся с файлом....
-
ан нет, файлик тот, просто фильтр применить нужно tcp.port == 587
-
и вот какой момент, попросил коллегу откомпилировать код, у него delphi 2010, indy 10.5.9. прислал он мне приложение и оно работает!!!! indy у меня 10.5.5. Возможно, причина в этом?
-
> cad2206 (09.02.16 12:54) [9] > ссылка на файл дампа при коннекте: https://yadi.sk/d/lC1uFiwcoYKyN > использовал фильтр: tcp.port == 587
При установлении TLS соединения сервер по всей видимости не устраивает версия протокола (выбирается TLS1), после чего он рвет соединение.
-
судя по логам сессии так и происходит, но почему при компиляции с другой машины, там тоже TLS1, все прокатывает?
-
> cad2206 (10.02.16 13:20) [14] > судя по логам сессии так и происходит, но почему при компиляции > с другой машины, там тоже TLS1, все прокатывает?
Выложи дамп, сравним. Очевидно есть различия.
-
Добрый день. Может кому то пригодится. Проблема была действительно в компонентах Indy 10.5.5. После обновления до 10.5.9 проблема исчезла.
|