2014-10-02 5 views
1

У меня есть скрипт perl, который будет делать некоторые вещи. Как я могу получить электронную почту, когда скрипт выполнит свои задачи вместе с журналом (со всеми действиями, выполненными скриптом)?Perl redirect STDOUT скрипта по электронной почте

Я планирую вызывать скрипт perl из сценария bash, а затем код для отправки по электронной почте журнала также в сценарии bash.

Но я хочу знать, есть ли другой лучший способ, я могу достичь этого только с помощью одного скрипта (perl), вместо того, чтобы иметь 2 скрипта, 1 (perl-скрипт) для выполнения задач и другого (сценарий bash) для отправки по электронной почте журнал.

+0

Perl может отправить почту, если это отвечает на ваш вопрос. –

+0

Как я могу отправить журнал по электронной почте? – Jill448

+0

Используя некоторые модули, http://stackoverflow.com/q/2530154/223226 –

ответ

0

Я написал эту функцию некоторое время назад, и она работает отлично.

Это требует модуль MIME :: Lite должен быть установлен на вашей системе - не уверен, если это будет камнем преткновения (это, конечно, был на моем месте)

Извинения, если код не соответствует последним стандартов, ему около 3 лет и работает на Perl 5.6.1. Я считаю.

sub emailer($$$$$$;$); 

use MIME::Lite; 


sub emailer($$$$$$;$) 
{ 

    #-------------------------------------------------------------------------# 
    # Get incoming parameters             # 
    #-------------------------------------------------------------------------# 

    my ($exchange_svr, $to, $cc, $from, $subject, $message, $attachment) = @_; 

    #-------------------------------------------------------------------------# 
    # create a new message to be sent in HTML format       # 
    #-------------------------------------------------------------------------# 

    my $msg = MIME::Lite->new(
        From => $from, 
        To  => $to, 
        Cc  => $cc, 
        Subject => $subject, 
        Type => 'text/html', 
        Data => $message 
      ); 


    #-------------------------------------------------------------------------# 
    # Check if there is an attachment and that the file actually does exist # 
    # Only plain text documents are supported in this functioN.    # 
    #-------------------------------------------------------------------------# 

    if ($attachment) 
    { 

     #---------------------------------------------------------------------# 
     # if the attachment does not exist then show a warning    # 
     # The email will arrive with no attachment       # 
     #---------------------------------------------------------------------# 

     if (! -f $attachment) 
     { 
      print "WARNING - Unable to locate $attachment"; 
     } 
     else 
     { 
      #-----------------------------------------------------------------# 
      # add the attachment            # 
      #-----------------------------------------------------------------# 

      print "ATTACH", "$attachment"; 

      $msg->attach(
        Type => "text/plain", 
        Path => $attachment, 
        Disposition => "attachment" 
      ); 
     } 
    } 

    #-------------------------------------------------------------------------# 
    # send the email               # 
    #-------------------------------------------------------------------------# 

    MIME::Lite->send('smtp', $exch_svr, Timeout => 20); 

    $msg->send() or die "SENDMAIL ERROR - Error sending email"; 

} 

Похоже, это когда она используется

emailer($exchange_server, 
     "[email protected]", 
     "[email protected]", 
     "[email protected]", 
     "Subject in here", 
     "The Message in here", 
     "/full/path/to/attachment"); 

При желании вы можете добавить 7-й параметр, который является вложение (необходимо указать полный путь) и приложение должно быть текстовый файл (Я посылаю файл CSV)

EDIT

Я просто перечитайте свой пост и увидел, что вы хотите отправить вложение, поэтому я добавил, что часть к примеру

1

Сначала вы сказали, что хотите, чтобы ваш STDOUT был перенаправлен на файл журнала. Посмотреть этот предыдущий пост для получения подробной информации о том, что:

How can I redirect standard output to a file in Perl?

# redirect STDOUT to file 
my $log_file = "log.txt"; 
open STDOUT, '>', $log_file; 

Если вы используете LINUX, вы должны быть в состоянии выдать Sendmail команду, чтобы получить по электронной почте с информацией о журнале:

# define your to, from and subject. 
my $to = <who you are sending email to>; 
my $from = <who is it from>; 
my $subject = "This is a subject"; 

# push the contents of your log file into the email body 
open (LOG, '<', $log_file) or die "Failed to open $log_file: $!"; 
my @log_contents = <LOG>; 
close LOG; 

push @body, @log_contents; 

# open and write to the mail file 
open MAIL, '|/usr/sbin/sendmail -t' or die "Failed to send mail: $!"; 

# email header 
print MAIL "To: ${to}\n"; 
print MAIL "From: ${from}\n"; 
print MAIL "Subject: ${subject}\n\n"; 

# email body 
print MAIL @body; 

# send the email 
close MAIL; 
print "Email sent successfully.\n"; 

Это очень простой способ быстро отправить сообщение.

Если вы на Windows, я хотел бы посмотреть в различные модули, доступные для отправки сообщений электронной почты в Perl, такие как MIME :: Lite

+0

Команда sendmail относительно проста в использовании. Конечно, если вы хотите, чтобы файл журнала был отдельным вложением, а не телом электронной почты, я бы больше посмотрел на ответ тернона и использовал модуль. – tjwrona1992

+0

Вы также можете обратиться к этому веб-сайту за помощью с помощью sendmail: http://www.tutorialspoint.com/perl/perl_sending_email.htm – tjwrona1992

Смежные вопросы