【发布时间】:2013-05-04 07:18:10
【问题描述】:
我正在编写一个 perl 脚本,由 qmail 为每个传入的邮件调用,以解析内容并找到电子邮件的正文。这样做的原因是从数据库中添加一些用户信息,将其附加到正文中,然后转发到另一个地址(列表服务器)。
无法解决的问题是这样的:
cat dbody.txt|grep -A1000 '^\s*$'
目的:找到第一个空行(作为头信息的结尾),然后全部返回
当我从命令行(使用终端)(即直接)运行该行时 - 它工作正常。返回电子邮件的正文。
当我在脚本本身中运行它时 - 它没有。
已经进行了无休止的测试,无法想出为什么会这样,或者我应该改变什么。帮忙!
脚本中的行 - 第一个“测试” - 工作正常。
$test =`cat dbody.txt|grep -A1000 '^\s*$'`;
$body= `cat dbody.txt|grep -A1000 '2,/^$/d'`;
当我将以上内容打印到最终电子邮件中时 - $test 返回全文(作为测试),$body 保持空白。
【问题讨论】:
-
我不知道您是如何设法在 Perl 中产生任何结果的。你在用
system函数吗? -
@perreal 不,他只是使用了错误的降价格式,所以他的反引号没有显示。
-
@TLP,哦,好的,有道理:)
-
如果您有超过 1000 行的消息,您将截断它。根据你的描述,我猜这不是故意的。 (大于约 40KB 的 base64 附件足以超过 1000 行边界。)
-
只是想知道您何时将此问题标记为
perl,为什么您不使用例如Email::Simple(search.cpan.org/~rjbs/Email-Simple-2.100/lib/Email/Simple.pm) 进行正确的消息解析。 (和标题也修改)