如何将变量传递给子程序以在 perl 中发送电子邮件
how to pass a variable to a subroutine to send email in perl
如果变量的内容不为空,我希望能够发送电子邮件
这是我的代码:
my $output = $ssh->capture({stdin_data => <<'EOS'}, 'pfexec /usr/bin/perl');
use File::Find::Rule;
my $dir = '/dir';
my $today = time();
my $onehour = $today - (60*60);
my $oneday = $today - (24*60*60);
my @files = File::Find::Rule->file()
->name("*.0")
->mtime(">$oneday")
->mtime("<$onehour")
->in( "$dir" );
for my $file (@files) {
print "$file\n";
}
EOS
sub send_email{
use MIME::Lite;
$to = 'abcd@gmail.com';
$cc = 'efgh@mail.com';
$from = 'webmaster@yourdomain.com';
$subject = 'Test Email';
$msg = MIME::Lite->new(
From => $from,
To => $to,
Cc => $cc,
Subject => $subject,
Data => $output
);
$msg->send;
}
if ($output) {
send_email($output);
}
如您所见,我远程连接到服务器。找到一些文件,如果找到文件,请通过电子邮件发送。
我不知道如何创建子例程,所以它将 $output
作为参数并通过邮件发送。
谢谢
所以你问的是子程序如何接收参数?它是通过 @_
数组。我在下面对你的子程序做了一些重写。
注意:use Mime::Lite;
应该移到子之外...最好将它一直移到顶部。所有 use
模块总是首先运行,无论它在您的代码中的什么位置,所以它最好列在靠近顶部的位置。此外,在一个地方查看所有依赖项通常很有用。如果你绝对不想加载 Mime::Lite 模块,除非 send_email 被调用,在 sub 中使用 require Mime::Lite;
而不是 use
,它将被包含第一次调用 sub.
请记住对本地变量使用 my
,这样您就不会在程序增长时遇到使用相同名称的其他变量的麻烦(称为命名空间污染)
use MIME::Lite;
...
my $output = $ssh->capture( ... );
...
sub send_email {
my($data) = @_;
my $subject = 'Test Email';
my($to,$cc,$from) = ('abcd@gmail.com',
'efgh@mail.com',
'webmaster@yourdomain.com');
my $msg = MIME::Lite->new(
From => $from,
To => $to,
Cc => $cc,
Subject => $subject,
Data => $data,
);
$msg->send;
}
send_email($output) if $output;
如果变量的内容不为空,我希望能够发送电子邮件
这是我的代码:
my $output = $ssh->capture({stdin_data => <<'EOS'}, 'pfexec /usr/bin/perl');
use File::Find::Rule;
my $dir = '/dir';
my $today = time();
my $onehour = $today - (60*60);
my $oneday = $today - (24*60*60);
my @files = File::Find::Rule->file()
->name("*.0")
->mtime(">$oneday")
->mtime("<$onehour")
->in( "$dir" );
for my $file (@files) {
print "$file\n";
}
EOS
sub send_email{
use MIME::Lite;
$to = 'abcd@gmail.com';
$cc = 'efgh@mail.com';
$from = 'webmaster@yourdomain.com';
$subject = 'Test Email';
$msg = MIME::Lite->new(
From => $from,
To => $to,
Cc => $cc,
Subject => $subject,
Data => $output
);
$msg->send;
}
if ($output) {
send_email($output);
}
如您所见,我远程连接到服务器。找到一些文件,如果找到文件,请通过电子邮件发送。
我不知道如何创建子例程,所以它将 $output
作为参数并通过邮件发送。
谢谢
所以你问的是子程序如何接收参数?它是通过 @_
数组。我在下面对你的子程序做了一些重写。
注意:use Mime::Lite;
应该移到子之外...最好将它一直移到顶部。所有 use
模块总是首先运行,无论它在您的代码中的什么位置,所以它最好列在靠近顶部的位置。此外,在一个地方查看所有依赖项通常很有用。如果你绝对不想加载 Mime::Lite 模块,除非 send_email 被调用,在 sub 中使用 require Mime::Lite;
而不是 use
,它将被包含第一次调用 sub.
请记住对本地变量使用 my
,这样您就不会在程序增长时遇到使用相同名称的其他变量的麻烦(称为命名空间污染)
use MIME::Lite;
...
my $output = $ssh->capture( ... );
...
sub send_email {
my($data) = @_;
my $subject = 'Test Email';
my($to,$cc,$from) = ('abcd@gmail.com',
'efgh@mail.com',
'webmaster@yourdomain.com');
my $msg = MIME::Lite->new(
From => $from,
To => $to,
Cc => $cc,
Subject => $subject,
Data => $data,
);
$msg->send;
}
send_email($output) if $output;