2011-01-31 87 views
0

我發現很難相信這個問題不存在於SO上,但我找不到一個實例或一個類似的Perl ....如何使用Perl將多個文件附加到電子郵件?

無論如何,我應該使用什麼Perl模塊來附加多個文件到電子郵件?

目前,我使用這個代碼用單個附件的電子郵件,但我無法弄清楚如何修改它來處理多個附件:

my $mail_fh = \*MAIL; 
open $mail_fh, "|uuencode $attachment $attachment |mailx -m -s \"$subject\" -r $sender $recipient"; 
print $mail_fh $message; 
close($mail_fh); 

可以將此代碼塊被修改處理多個附件?或者我必須使用特殊的模塊來解決這個問題嗎?如果是這樣,那麼該模塊是什麼,我將如何編寫它?

感謝您的幫助!

+1

有CPAN上無數郵件模塊 - 選擇一個並使用它。並且不要使用uuencode;基於很多理由,它被Base-64編碼所取代。 – 2011-01-31 16:00:02

回答

3

我結束了使用MIME::Lite一個例子會發現here

use MIME::Lite; 
use Getopt::Std; 

my $SMTP_SERVER = 'smtp.server.com';    #change 
my $DEFAULT_SENDER = '[email protected]';  #change 
my $DEFAULT_RECIPIENT = '[email protected]'; #change 

MIME::Lite->send('smtp', $SMTP_SERVER, Timeout=>60); 

my (%o, $msg); 

# process options 

getopts('hf:t:s:', \%o); 

$o{f} ||= $DEFAULT_SENDER; 
$o{t} ||= $DEFAULT_RECIPIENT; 
$o{s} ||= 'Files'; 

if ($o{h} or [email protected]) { 
    die "usage:\n\t$0 [-h] [-f from] [-t to] [-s subject] files ...\n"; 
} 

# construct and send email 

$msg = new MIME::Lite(
    From => $o{f}, 
    To => $o{t}, 
    Subject => $o{s}, 
    Data => "Data", 
    Type => "multipart/mixed", 
); 

while (@ARGV) { 
    $msg->attach('Type' => 'application/octet-stream', 
       'Encoding' => 'base64', 
       'Path' => shift @ARGV); 
} 

$msg->send(); 

用法示例:

./notify_mime.pl -f cheese -t queso -s subject /home/id/cheeseconqueso/some_dir/example1.xls /home/id/cheeseconqueso/some_other_dir/*.xls 
1

儘管混合評分,我發現Mail::Sender(它是朋友Mail::Sender::Easy)很好用,很簡單,看起來好像可以處理多個附件。

我發現界面在Mail::Internet中非常討厭。

儘管如此,任何事情都應該比上面所說的更好。 :-)

相關問題