繁体   English   中英

如何将多行输出从Perl发送到/ bin / mail?

[英]How do I send multi-line output from Perl to /bin/mail?

我有一个Perl脚本,可将多行输出打印到屏幕上。 我需要捕获这些行,然后将它们通过管道发送到一封电子邮件中(/ bin / mail)或一个文本文件中,该文件可以通过/ bin邮件在另一个操作中发送。 实际上,我已经想出了一种简单的方法,可以使用bash包装器来完成邮件发送。 看起来像,

#!/usr/bin/bash
source /nethome/zog/.bash_profile 
cd /nethome/zog/bin/perl  
/nethome/zog/bin/perl/find_free_space.pl > text.file
/bin/mail -s FreeSpace@NJ3 zog@geemail.com < text.file

我想使用Net :: SMTP做smtp位。 至少可以说,以上内容并不雅致。

我看到了这样的东西:

open(MAIL, "| /bin/mail -s FreePorts me\@geemail.com") || 
   die "mail failed: $!\n"; print MAIL "This is how it goes."

在stackoverflow上,但是无法将STDOUT重定向到邮件。 我正在使用:

$complete_output .= "\n"; "|/bin/mail -s FreePorts zog\@geeemail.com" || die "mail failed: $!\n";

我不确定是否所有人都需要查看Perl脚本才能提供帮助,但是它位于pastebin上 请告诉我。

STDOUT不在这里进行。 您有事忘了告诉我们吗? 当您打印到MAIL文件句柄时会发生什么? 该输出是否使其成为消息? 当您向MAIL文件句柄发送多行时会发生什么?

您的代码是:

"|/bin/mail -s FreePorts zog\@geeemail.com" || die "mail failed: $!\n";

那什么也没做。 这是一个字符串,也是一个真实值。 交替永远不会对模子分支造成影响。 当您使用问题的第一部分代码时会发生什么? 编写一个小的示例脚本,看看是否可以发送邮件并对其进行测试,直到弄清楚为止。 例如,这是一个测试您的问题的完整脚本:

#!perl
use strict;
use warnings;
open my $mail, '| /bin/mail -s FreePorts me@geemail.com';
print $mail "This is a test message from $$ at " . localtime() . "\n";
close $mail or die "The pipe failed!\n $?";

运行该怎么办? 当您从命令行尝试相同命令时会发生什么?

为什么不使用Perl模块(例如Email :: *模块之一)而不是依靠外部命令? 关于进程间通信,有很多要了解的东西,我认为您落后于此。 一个模块可以为您处理所有细节,具有更好的界面,并且更加灵活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM