【问题标题】:Help sending email usings the linux mail command in a perl CGI script在 perl CGI 脚本中使用 linux mail 命令帮助发送电子邮件
【发布时间】:2015-04-29 01:07:00
【问题描述】:

如何在 perl CGI 脚本中使用 linux 命令行发送 html 电子邮件。 我试过了:

system(echo $message | mail -s $subject $email);

【问题讨论】:

  • 根据应用程序、系统、环境等,您可能需要查看 Email:: 和 Mail:: 命名空间中的各种模块,作为从网络服务器发送邮件的替代方式。跨度>

标签: perl email command-line cgi


【解决方案1】:

Perl 不是外壳。您在这里所做的是使用“裸词”echo 调用一些 Perl 子例程,并将 $message 二进制的值与一些名为 mail 的子的输出进行或传递,该子程序传递名为文件的大小在$subject-s 运算符)中——我们只能在完全忽略它甚至无法编译之后才能做到这一点,因为$email 和它之前的表达式之间没有运算符。

在 Perl 中,您的系统命令需要引号。但是因为$message 可能有任意数量的字符,这使得很难按原样传递给shell,所以最好打开一个管道并打印到它:

use English qw<$OS_ERROR>;

open( my $mailh, '|-', "mail -s '$subject' $email" )
    or die( "Could not open pipe! $OS_ERROR" )
    ;
print $mailh $message;
close $mailh;

【讨论】:

    【解决方案2】:

    看看Net::SMTP

    来自文档:

    该模块实现了 SMTP 和 ESMTP 协议的客户端接口,使 perl5 应用程序能够与 SMTP 服务器通信。

    ...

    此示例向称为 mailhost 的 SMTP 服务器上的 postmaster 发送一条小消息:

    #!/usr/local/bin/perl -w
    
    use Net::SMTP;
    
    $smtp = Net::SMTP->new('mailhost');
    
    $smtp->mail($ENV{USER});
    $smtp->to('postmaster');
    
    $smtp->data();
    $smtp->datasend("To: postmaster\n");
    $smtp->datasend("\n");
    $smtp->datasend("A simple test message\n");
    $smtp->dataend();
    
    $smtp->quit;
    

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2015-01-20
      • 2019-12-16
      • 1970-01-01
      • 2011-07-08
      • 2010-09-12
      • 2021-05-31
      • 2010-11-15
      • 2017-08-05
      相关资源
      最近更新 更多