CONST
    APP_NAME = 'YourSoftwareName';
var
    isAllowRun: boolean = False;

// функция сравнения e-mail..
function CheckCSV(Str: string): boolean;
var
    sl: TStringList;
    i:integer;
begin
    result := False;
    sl := TStringList.Create;
    //загрузка текста csv файла. Укажите свой url адрес
    sl.text:=HTTPGet('http://ваш_url/?export=csv',False);
    // если e-mail есть в списке, вернуть правду
    if Pos(Str, sl.Text) > 0 then Result := True;
    sl.Free;
end;


// кнопка проверки e-mail адреса
procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
if CheckCSV(form1.Edit1.Text) then mailKey else ShowMessage('Указан не верный e-mail адрес!');
end;


//процедура отправки ключа
procedure mailKey;
var
mmMessage, key: string;
begin
 key:=EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'obamaChmo');
 mmMessage:='Здравствуйте!'+ #13 + #10+ #13 + #10 +' Ключ активации Вашей копии программы '+key  + #13 + #10+ #13 + #10 +'Спасибо Вам, что выбрали сервисное приложение Service';
 //                                                                                   Trunc(25)-номер порта
 if SendMail('ваш smtp сервер', 'ваш логин (полный адрес вашего e-mail)', 'ваш пороль', Trunc(25), '<от кого (Ваш e-mail)>', form1.Edit1.Text, 'тема сообщения ', mmMessage,'') then
 begin
 form1.GroupBox1.Visible:= False;
 form1.Label1.Caption:='На '+form1.Edit1.Text+' Выслан ключ авторизации!'
 end else ShowMessage('Ошибка отправки ключа!');
end;

//кнопка регистрации программы
procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
    reg: TRegistry;
begin
   if EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'obamaChmo') = form1.Edit2.Text then
     begin
         reg := TRegistry.Create;
         reg.Access := KEY_ALL_ACCESS;
         reg.RootKey := HKEY_CURRENT_USER;
         reg.OpenKey('software\'+APP_NAME,true);//+APP_NAME - имя вашей программы
         reg.WriteString('Key', form1.Edit2.Text);
         reg.CloseKey;
         reg.Free;

         ShowMessage('Спасибо за регистрацию!');
         isAllowRun := True;
         registrKey;
     end else
     begin
         ShowMessage('Не верный ключ!');
     end;
end;

// процедура проверки регистрации
procedure registrKey;
var
   reg: TRegistry;
   iDays: integer;
   sKey: string;
begin
     sKey := '';
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\'+APP_NAME,true);//+APP_NAME - имя вашей программы
     if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+20); // демо версия (Now+20)=20 дней
     iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days
     sKey := reg.ReadString('Key');

     reg.CloseKey;
     reg.Free;

     if sKey=EncryptRC5(GetHardDiskSerial(ExtractFileDrive (paramstr(0))),'obamaChmo') then
     begin
        // настройте на свой вкус, что если программа зарегистрированна
         form1.GroupBox1.Visible:=false;
         form1.GroupBox2.Visible:=false;
         form1.Button3.Visible:=false;
         form1.Label1.Caption:='Зарегистрированная копия ';
     end else begin
        if iDays < 1 then
            begin
             // настройте на свой вкус, что если закончился пробный период
              ShowMessage('Пробный период завершен ');
            end else
              // настройте на свой вкус, что если программа не зарегестрированна
              ShowMessage('Вы используете не зарегистрированную версию. Осталось: ' + IntToStr(iDays) +' дней.');
       end;


end;

begin
 registrKey;
end.
