0

我正在尝试编写一个写入文件的 Perl 脚本,然后使用 linux 的 mail 命令将 Perl 脚本写入文件的任何内容发送。我的代码如下:

my $pathfile='some_pathfile';
open(W_VAR,">>$pathfile");
print W_VAR 'hello';
close W_VAR;

my $email_command='mail -s'." header".' some_email_address'.' <'." $pathfile";
system($email_command);

问题是路径文件中的内容永远不会被发送。如果我亲自填写该文件,一切都很好,但是 perl 写的任何内容都不会发送。当我检查时,内容在文件中。

问题是什么?

4

2 回答 2

2

我怀疑问题是您的程序没有用换行符终止该行"\n"。毫无疑问,您在手动编辑文件时将其放入文件中?

像这样的东西可能会解决它,但我手头没有 Linux 机器,所以我无法测试它。

use strict;
use warnings;

my $pathfile = 'path/to/file';
open my $w_var, '>>', $pathfile or die $!;
print $w_var "Hello\nWorld!\n";
close $w_var;

my $email_command = "mail -s header some\@emailaddress.com < $pathfile";
system $email_command;

编辑

但是使用Mail::Sendmail之类的东西会好得多。Email::Sender是迄今为止最好的,但连同它的依赖项一起,它是一个用于如此简单任务的巨大模块,我不愿在这里推荐它。

要使用的代码Mail::Sendmail如下所示:

use strict;
use warnings;

use Mail::Sendmail;

my $pathfile = 'path/to/file';

open my $w_var, '>>', $pathfile or die $!;
print $w_var "Hello\n", "World!\n";

my $message = do {
  open $w_var, '<', $pathfile or die $!;
  local $/;
  <$w_var>;
};

sendmail(
  To => 'some@emailaddress.com',
  From => 'my.address@email.com',
  Message => $message,
)
or die $Mail::Sendmail::error;
于 2012-04-17T12:27:35.043 回答
1

我敢打赌,您的命令格式不正确:

尝试:

my $header = "My Subject";
my $some_email_address = "myaccount@myemail.com";
my $email_command="mail -s \"$header\" $some_email_address < $pathfile";
于 2012-04-17T12:14:50.653 回答