逃离 open()
Escape from open()
我是 Perl 的新手,但一般来说不是编程新手。我一直在寻找如何在 Perl 中从 open() 逃脱的任何提示,但并不幸运,这就是我在这里问的原因。
我有一个:
$mailprog = '/usr/lib/sendmail';
open(MAIL,"|$mailprog -t");
read(STDIN, $buffer, 18);
print MAIL "To: xxx@xxx.xxx\n";
print MAIL "From: xxx@xxx.xxx\n";
print MAIL "Subject: xxx\n";
print MAIL $buffer;
close (MAIL);
有什么方法可以将输入整形到 $buffer 中以逃避 sendmail 吗?缓冲区输入长度是任意的。输入完全在我的控制之下。非常感谢任何想法!
man sendmail
说:
By default, Postfix sendmail(1) reads a message from standard input
until EOF or until it reads a line with only a . character, and
arranges for delivery. Postfix sendmail(1) relies on the postdrop(1)
command to create a queue file in the maildrop directory.
所以您希望您的输入在某处包含序列 "\n.\n"
。
只有一个序列对 sendmail
来说是特殊的,一旦它开始读取正文:包含单个 .
的行表示输入结束。 (EOF 做同样的事情。)
这意味着如果您的输入包含一行只包含 .
,您需要将其转义。默认传输编码不提供转义方式,因此您需要指定一个 Content-Transfer-Encoding
来避免问题(例如 base64
)或允许您转义句点(例如 quote-printable
), 并对内容进行相应的编码。
这给我们带来了您选择添加的 content transfer encoding 的限制。
默认的内容传输编码7bit
要求行不超过 998 个八位字节,以 CRLF 结尾。这些行可能仅包含 [1,127] 中的八位字节,而八位字节 10 和 13 可能仅作为行终止符的一部分出现。
如果您选择的内容传输编码不适合对您的输入进行编码,您将需要选择其他编码。
你真的应该使用像 Email::Sender 这样的东西而不是在这么低的水平上工作。
我是 Perl 的新手,但一般来说不是编程新手。我一直在寻找如何在 Perl 中从 open() 逃脱的任何提示,但并不幸运,这就是我在这里问的原因。
我有一个:
$mailprog = '/usr/lib/sendmail';
open(MAIL,"|$mailprog -t");
read(STDIN, $buffer, 18);
print MAIL "To: xxx@xxx.xxx\n";
print MAIL "From: xxx@xxx.xxx\n";
print MAIL "Subject: xxx\n";
print MAIL $buffer;
close (MAIL);
有什么方法可以将输入整形到 $buffer 中以逃避 sendmail 吗?缓冲区输入长度是任意的。输入完全在我的控制之下。非常感谢任何想法!
man sendmail
说:
By default, Postfix sendmail(1) reads a message from standard input until EOF or until it reads a line with only a . character, and arranges for delivery. Postfix sendmail(1) relies on the postdrop(1) command to create a queue file in the maildrop directory.
所以您希望您的输入在某处包含序列 "\n.\n"
。
只有一个序列对 sendmail
来说是特殊的,一旦它开始读取正文:包含单个 .
的行表示输入结束。 (EOF 做同样的事情。)
这意味着如果您的输入包含一行只包含 .
,您需要将其转义。默认传输编码不提供转义方式,因此您需要指定一个 Content-Transfer-Encoding
来避免问题(例如 base64
)或允许您转义句点(例如 quote-printable
), 并对内容进行相应的编码。
这给我们带来了您选择添加的 content transfer encoding 的限制。
默认的内容传输编码7bit
要求行不超过 998 个八位字节,以 CRLF 结尾。这些行可能仅包含 [1,127] 中的八位字节,而八位字节 10 和 13 可能仅作为行终止符的一部分出现。
如果您选择的内容传输编码不适合对您的输入进行编码,您将需要选择其他编码。
你真的应该使用像 Email::Sender 这样的东西而不是在这么低的水平上工作。