•  

ГлавнаяIndyЧастые вопросы по Indy → Delphi 7, Indy 10, ошибка IdExplicitTLSClientServerBase, IdSMTPBase в uses

Создано: 16.05.2014 21:46:27 · Исправлено: 16.05.2014 21:46:27 · Прочтений: 1619

Всем доброго рвемени суток. Вопрос такой. Delphi 7, Indy 10, приведенный ниже код не копиляется, ругаясь на фрагмент IdExplicitTLSClientServerBase, IdSMTPBase в uses. Кто знает в чем грабли? Все адреса, естественно, правильные. На Indy 9 все работает. ----------------------------------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdIOHandler,
  IdIOHandlerSocket, IdSSLOpenSSL, IdMessage,
  IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient,  IdSMTP, StdCtrls, IdBaseComponent,
  IdExplicitTLSClientServerBase, IdSMTPBase;

type
  TForm1 = class(TForm)
    Button1: TButton;
    xxx: TIdMessage;
    IdSMTP1: TIdSMTP;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
  IdUserPassProvider1.GetPassword;
end;

procedure TForm1.Button1Click(Sender: TObject);
var sa: String;
begin

  IdSMTP1.Disconnect;
  IdSMTP1.Port:=25;
  IdSMTP1.Host:=smtp.***.ru;
  IdSMTP1.Username:=***;
  IdSMTP1.Password:=***;
  sa:=***.ru;
  IdSMTP1.Connect(5000);

      xxx.Subject:=;
      xxx.Recipients.EMailAddresses:=***@rambler.ru;
      xxx.From.Address:=sa;
      xxx.Date:=Date;
      if IdSMTP1.Connected then begin
        try
          IdSMTP1.Send(xxx);
        except end;
      end;
    end;

  IdSMTP1.Disconnect;

end;

end.
Indy 9 и Indy 10 вообще-то не одно и тоже. Разница большая, посмотрите хотя бы, как различаются демки.
Что разница есть - понятно, но: 1. и демки не запускаются по описанной выше причине. 2. и проблема возникла не из праздного любопытства - посмотреть что такое Indy 10 - надо организовать отсылку ЭП по каналам, использующим SSL, т.е. или что прикручивать к 9-ке, или разворачивать 10-ку, но в обоих случаях тупик.
Рабочая версия Indy 10 - indy10.1.5
Версия Indy именно 10.1.5, скачана с их официального сайта (ссылку нашел на этом форуме). Если кто-то разрабатывал проги-почтовики, отсылающие инфу с gmail (и т.п., короче, где задействован SSL) - буду признателен за советы.
http://indy.fulgan.com/SSL/ - это по поводу прикручивания SSL к инди, или переписывать клиента под Indy10 slow
Был я уже по этой ссылке, даже скачал пару вещиц (building... и indy_openssl096m), но так и не понял, что с этим добром делать... Кстати, я бы даже предпочел остаться на 9-ке с прикруткой SSL, главное - понять что надо сделать для этой прикрутки. У меня уже есть нормально работающая прога, реализованная на 9-ке, но из-за глючности провайдера решили организовать ящик на gmail, а там шифровка... P.S. для сомневающихся - к спаму мой вопрос не имеет никакого отношения - проблема чисто производственная в государевой конторе.
А ведь я не ту ссылку то Вам дал, кажется. http://adg.bmpcoe.org/IndySSL/
А gmail делаем и с шифрованием проблемы. Тогда это более серезно и советую взять Synapse там нет никаких проблем с шифрованием и вобще работать легче. У делал оченку для этовоже проекта и решил буду делать на Synapse. Неверное месяца через месяц начну проект.
для 9 версии надо прикручивать вот отсюда: http://www.disi.unige.it/person/FerranteM/delphiopenssl/index.html
Спасибо всем, кто откликнулся, но придется перейти с русского на понятный. Ссылки - это полезно, но хотелось бы осознать логику процесса - в каком порядке, что и для чего надо сделать?
Насколько я понимаю, может быть ошибаясь, нужно просто добавить компонент IdSSLIOHandlerSocketOpenSSL с закладки IndyIOHandlers. И присвоить свойству IdSMTP.IOHandler этот компонент. В BDS 2006 (я сталкивался в Турбо 2006) были проблемы с путями к модулям Indy, приходилось прописывать вручную в каких-то случаях. В 10 версии код переработан по сравнению с 9, так что и модули в uses могут быть другие. Можно попробовать удалить старые компоненты, удалить ссылки из uses, заново кинуть новые компоненты и если возникнут проблемы, дописать вручную в uses нужные модули.
Ну и какие-то фрагменты кода возможно придется переписать из-за изменений в 10 версии.
Можно попробовать удалить старые компоненты, удалить ссылки из uses, заново кинуть новые компоненты - это для того, чтобы удалить ссылки в Uses на все модули Indy, а при помещении компонентов опять, Дельфи снова добавит нужные, уже для 10 версии. Хотя можно конечно и самому попытаться разобраться, что нужно, а что нет, но так по-моему проще.
Всем большое спасибо за отклики. Все заработало. Отдельные благодарности Батору и Сергею. Резюме. 1. Снес Delphi и установил по новой, в результате – стандартный пакет Indy 9.00.10 2. Установил OpenSSL (инсталлятор openss-0.9.7c-bin.exe) 3. Установил пакет компонент Eldos (инсталлятор secbboxsetup.exe из архива secbboxevald47.zip) 4. Забросил в C:\Windows\System32 файлы libeay32.dll и ssleay32.dll (из архива indy_openssl096m.zip) Что из пунктов 2 и 3 оказалось нужным и принципиальным – без понятия. Мои извинения за отсутствие ссылок – сам не помню что откуда скачано, но все по ссылкам с этого форума. 5. В изначальном софте (на Indy 9.00.10) добавил компонент IdSSLIOHandlerSocket1 6. Внес минимальные изменения в код для работы как по обычным каналам, так и для использующих SSL: a) IdSMTP1.Port (25 без SSL, 465 для SSL) b) до IdSMTP1.Connect связываю IdSMTP1 и IdSSLIOHandlerSocket1 (IdSMTP1.IOHandler:=nil без SSL, IdSMTP1.IOHandler:=IdSSLIOHandlerSocket1 для SSL) c) после IdSMTP1.Connect при работе с SSL вставил команду IdSMTP1.SendCmd(STARTTLS,-1) (без SSL она не нужна) d) для работы приложения на другом аппарате два файла из пункта 4 должны лежать рядом с .exe модулем
Вообще-то я имел в виду удалить компоненты с формы проекта. :)
Про удалить из проекта, а не совсем... - это понятно, но к моменту последнего экзерсиса и так уже было много чего проинсталено до кучи, кроме того, свтила экстренная доработка другого проекта (производство все-таки), поэтому решил не играть с огнем, да и лишний инсталл (на мой взгляд) - что масло в автомобиле - можно и перекормить...