我的问题是通过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,评论解释真的赞赏。谢谢!
答案 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::Run或http://p3rl.org/IPC::Cmd以获得更多控制权。
编辑:按照@ chepner ++的建议,用列表表单替换打开。当您不需要任何shell语法(如重定向)时,这通常更安全。