2012-04-17 21 views
0

我想写一个Perl脚本写入文件,然后使用Linux的邮件命令发送任何Perl脚本写入文件。 我的代码如下:Perl写入pathfile,然后使用unix的邮件发送

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); 

的问题是,在pathfile内容从未被发送。 如果我亲自填写该文件,一切都很好,但无论perl写的是什么都不发送。当我检查时,内容在文件中。

什么问题?

+0

请包括你实际使用的代码的相关部分。 – Joni 2012-04-17 11:31:42

+0

尝试'打开(W_VAR,“>>”,“$ pathfile”)|| printf(“无法打开%s \ n”,$ filepath);' - 看看你是否得到一个错误 – scibuff 2012-04-17 11:33:41

+0

好像你错过了第一行的结束单引号 – JoelFan 2012-04-17 11:42:19

回答

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::SendmailEmail::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 => '[email protected]', 
    From => '[email protected]', 
    Message => $message, 
) 
or die $Mail::Sendmail::error; 
+0

它绝对是换行符。显然,换行符更多的是人们自然会认为它是......一条新线。混乱。 – 2012-04-17 14:06:36

+0

+ Email :: Sender提供了一个非常好的面向对象的接口。 – 2012-04-17 14:22:50

+0

@Nikhil Jain:这是一个非常好的工具,但哦,那些依赖关系! 'Capture :: Tiny''鲤鱼''Cwd''电子邮件::摘要''电子邮件::地址''电子邮件::简单''Fcntl''文件::基本名''File :: Find'' File :: Path 'File :: Spec''File :: Temp''FindBin''List :: MoreUtils'' Moose'' Net :: SMTP'' Scalar :: Util'' Sys :: Hostname''Throwable :: Error'''尝试:: Tiny'。 “驼鹿”本身非常庞大。 。 。 – Borodin 2012-04-17 16:58:03

1

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

尝试:

my $header = "My Subject"; 
my $some_email_address = "[email protected]"; 
my $email_command="mail -s \"$header\" $some_email_address < $pathfile"; 
相关问题