通过Perl脚本从R发送Outlook邮件

时间:2014-03-10 18:23:05

标签: r perl command-line-arguments argument-passing

原始问题:如何通过system()命令将字符串中的参数从R脚本传递到Perl脚本,其中一个标志可能有0个或多个参数。

例如:"Email.perl -t " p1@email.com; p2@email.com;" -c " p3@email.com; p4@email.com;" -s "Subject Line" -b "Body text" -f C:/file.txt"

我明白了。 Toolic是在正确的道路上,但我必须在每个名字后面传递;才能让它工作。以下是任何有兴趣的人的工作代码。

R功能:

SendPerlMail <- function(email.to, email.cc=NA, email.sub=NA, email.body=NA, email.file=NA) {

  command <- 'perl ..\\..\\Email.perl -t "'
  for(to.p in email.to) {command <- paste0(command, paste0(' ', to.p, ';'))}

  command <- paste0(command, '" -c "')
  for(cc.p in email.cc) {command <- paste0(command, paste0(' ', cc.p, ';'))}

  command <- paste0(command, paste0('" -s ', email.sub))
  command <- paste0(command, paste0(' -b ', email.body))
  command <- paste0(command, paste0(' -f ', email.file))

  return(system(command, intern=T, invisible=F))
}

Perl脚本:

#!/usr/bin/perl -w

use Mail::Outlook;
use Getopt::Std;

my %opts;
getopts('t:c:s:b:f:', \%opts);

my $outlook = new Mail::Outlook();
my $msg = $outlook->create();

if(!$opts{t}) {die} else {$msg->To($opts{t});}
if($opts{c} ne 'NA') {$msg->Cc($opts{c});}
if($opts{s} ne 'NA') {$msg->Subject($opts{s});}
if($opts{b} ne 'NA') {$msg->Body($opts{b});}
if($opts{f} ne 'NA') {$msg->Attach(Type => 'text/plain', Path => "/", Filename => $opts{f});}

$msg->send;

1 个答案:

答案 0 :(得分:0)

必须在每个电子邮件地址后传递;

command <- 'perl ..\\..\\Email.perl -t "'
  for(to.p in email.to) {command <- paste0(command, paste0(' ', to.p, ';'))}