0

我在玩 Perl 并写了一个小型电子邮件程序。它是这样的:

# -w
#the purpose of this program is to send an email .
print "Hello. Welcome to Paramjot's Mail Program. Please enter your name.\n";
$name = <STDIN>;
chomp ($name);
print "Hello, $name. Please type in the email address you wish to send your email to\n";
$mailadds = <STDIN>;
chomp ($mailadds);              
open  MAIL, "|mail $mailadds";
print "Please type the message you wish to send below.\n";
$message = <STDIN>;
chomp ($message); 
print MAIL "$name says: $message";
close MAIL;

出于某种原因,当我运行程序时,它会一直工作,直到程序应该询问消息,而是说

mail is not recognized as a batch file, internal or external command, or an application.

我该怎么做才能解决这个问题?

4

1 回答 1

1

错误消息来自您的操作系统,而不是来自 Perl。

您的open语句尝试启动一个运行该命令的新进程mail $mailadds,但这失败了,因为操作系统无法识别该命令mail。要解决即时错误,您需要验证mail计算机上是否安装了(或等效程序)并更改open语句以提供该程序的完整路径和正确的文件名。

总体任务的更好解决方案是从 CPAN 获取邮件处理模块并使用它而不是调用外部程序。此类模块提供了更友好的界面,而且它们通常会抽象出任何特定于操作系统的细节,例如确定用于发送邮件的程序的正确名称和位置。

就个人而言,我倾向于为此使用MIME::Lite,尽管模块的维护者建议不要使用它。如果您选择听取他的建议而不使用 MIME::Lite,链接的文档包括他认为是“更好的选择”的邮件发送模块的建议。

于 2013-10-02T08:07:02.763 回答