电子邮件大量文本:"参数列表太长"

时间:2017-12-02 20:06:48

标签: linux bash shell perl

我的问题是通过gmail在电子邮件中发送大量文本。

我正在处理一个需要能够执行HTTP GET请求的简单应用程序,并使用gmail帐户将收到的HTML作为文本发送。我相信我正在使用SSMTTP通过gmail发送文本,我使用perl的LWP::UserAgent来执行GET请求。当我执行我的perl代码时,由于发送了大量文本,我收到以下错误:

  

不能执行" / bin / sh":参数列表太长

我的互联网搜索找到了这些来源:

这使我更好地理解了约束条件,但由于以下原因,它并没有真正解决我的问题:

  • 我无法重新编译内核
  • 我不能把它分解成更小的碎片"使用find或我自己的bash函数等。

我正在尝试按照大量文字的要求开展此工作。

这是我的perl代码的摘录:

    # Uses ssmtp to send an email
    sub sendEmail{

     my ($destination, $subject, $body) = @_;

     #say $destination; say $subject;say $body;

     # Create the bash command
     my $command="echo \'$body\' | mail -s \'$subject\' $destination";

     say "\nExecuting shell command: $command";
     my $output = qx($command);
    }

请不要试图说服我,我不应该发送带有HTML文本的电子邮件。这是我被要求做的事情,所以我试图按要求做。

修改 感谢您的评论和帮助。这是一个很大的帮助。我正在进入bash和perl脚本编写方式,所以如果这是一个过于无知的问题我会道歉,但希望这些答案有助于像我这样的未来新手。对于downvotes,评论解释真的赞赏。谢谢!

1 个答案:

答案 0 :(得分:7)

您不需要通过shell管道。使用perl的开放:

open (my $pipe, "|-", "mail", "-s", $subject, $destination) or die "Could not run mail: $!";
print $pipe $body;
close $pipe or die $?;

或者尝试http://p3rl.org/IPC::Runhttp://p3rl.org/IPC::Cmd以获得更多控制权。

perldoc perlopentut

编辑:按照@ chepner ++的建议,用列表表单替换打开。当您不需要任何shell语法(如重定向)时,这通常更安全。