【问题标题】:Sending Outlook Mail from R via a Perl Script通过 Perl 脚本从 R 发送 Outlook 邮件
【发布时间】:2014-04-14 00:45:30
【问题描述】:

原始问题:如何通过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;

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      相关资源
      最近更新 更多