我需要执行这样的命令:
回显测试邮件|邮件-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;
但是不起作用
[已解决]
你好,最后,我用另一种方式做了。我现在正在使用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;