2012-04-17 20 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"; 
相關問題