执行连接的外部程序

问题描述 投票:-2回答:1

我需要执行这样的命令:

回显测试邮件|邮件-s测试[email protected]

我不知道是否可行。我尝试过:

procedure TForm1.Button2Click(Sender: TObject);
var
  RunProgram: TProcess;
  RunProgram2: TProcess;
begin
  RunProgram := TProcess.Create(nil);
  RunProgram.Executable := 'echo';
  RunProgram.Parameters.Add('IpPublica');
  RunProgram.Parameters.Add('|');
  RunProgram.Options := RunProgram.Options + [poWaitOnExit, poUsePipes];
  //
  RunProgram2 := TProcess.Create(nil);
  RunProgram2.Executable := 'mail';
  RunProgram2.Parameters.Add('-s "La IP a cambiado"');
  RunProgram2.Parameters.Add('[email protected]');
  RunProgram2.Options := RunProgram.Options + [poWaitOnExit, poUsePipes];
  RunProgram.Execute;
  RunProgram2.Execute;
  RunProgram.Free;
  RunProgram2.Free;
end;   

但是不起作用

process freepascal lazarus
1个回答
0
投票

[已解决]

你好,最后,我用另一种方式做了。我现在正在使用bash发送电子邮件。我生成正确的指令,保存到文件并使用bash执行该文件。效果很好。是这样的:


rocedure TForm1.Button1Click(Sender: TObject);
var
ExecuteCurl, ExecuteBash: TProcess;
CurlRead,StringToSave: TStringList;
PublicIp, ConcatString: String;

begin

  // Leemos nuestra ip pública con curl

  CurlRead := TStringlist.Create;
  ExecuteCurl := TProcess.Create(nil);
  ExecuteCurl.Executable := 'curl';
  ExecuteCurl.Parameters.Add('ifconfig.me');
  ExecuteCurl.Options := ExecuteCurl.Options + [poWaitOnExit, poUsePipes];
  ExecuteCurl.Execute;
  CurlRead.LoadFromStream(ExecuteCurl.Output);
  CurlRead.Delimiter := ' ';
  CurlRead.StrictDelimiter := True;
  Label1.Caption := CurlRead.DelimitedText;
  PublicIp := CurlRead.DelimitedText;


  //Generamos cadena para bash para mandar el correo

  ConcatString := Concat('echo La nueva ip es:', PublicIp, '| mail -s "¡La ip ha cambiado!" [email protected]');
  StringToSave := TStringList.Create;
  StringToSave.Add('#!/bin/bash');
  StringToSave.Add(ConcatString);

  // Grabamos la cadena en el archivo bash

  StringToSave.SaveToFile('/home/carlos/mail');

  // Ejecutamos script de bash para enviar el correo

  ExecuteBash := TProcess.Create(nil);
  ExecuteBash.Executable := 'bash';
  ExecuteBash.Parameters.Add('/home/carlos/mail');
  ExecuteBash.Options := ExecuteBash.Options + [poWaitOnExit, poUsePipes];
  ExecuteBash.Execute;

  // Liberamos la memoria

  ExecuteBash.Free;
  ExecuteCurl.Free;
  CurlRead.Free;
  StringToSave.Free;   

© www.soinside.com 2019 - 2024. All rights reserved.