0

ファイルに書き込み、Linuxのmailコマンドを使用してPerlスクリプトがファイルに書き込んだものを送信する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 に答える