我正在使用perl发送测试电子邮件,但它回来时系统无法找到指定的路径

时间:2014-06-11 16:43:11

标签: perl email mime-types mime

我试过了:

#!/usr/bin/perl

$to = 'abcd@gmail.com';
$from = 'webmaster@yourdomain.com';
$subject = 'Test Email';
$message = 'This is test email sent by Perl Script';

open(MAIL, "|/usr/sbin/sendmail -t");

# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n"

但它带有The system cannot find the path specified

我也尝试过:

#!/usr/bin/perl
use MIME::Lite;

$to = 'abcd@gmail.com';
$cc = 'efgh@mail.com';
$from = 'webmaster@yourdomain.com';
$subject = 'Test Email';
$message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new(
             From     => $from,
             To       => $to,
             Cc       => $cc,
             Subject  => $subject,
             Data     => $message
             );

$msg->send;
print "Email Sent Successfully\n";

但它会以SMTP Failed to connect to mail server: No such file or directory at G:\email_test.pl line 18

返回

如何解决此问题/这些问题,以便我可以成功发送电子邮件?这些似乎是使用PERL发送电子邮件时使用的两个常见示例,我无法让它们工作。

1 个答案:

答案 0 :(得分:2)

如果您收到G:\email_test.pl,我假设您正在使用Windows计算机。我在程序中看到open(MAIL, "|/usr/sbin/sendmail -t");,它指的是Unix / Linux系统上的程序。

在Perl中,Net::SMTP模块几乎带有所有Perl发行版。我强烈建议人们使用它,除非他们需要对邮件进行MIME编码。

该模块使用起来非常简单,尽管不像其他电子邮件模块那么简单。 Net::SMTP假设您了解SMTP的工作原理。幸运的是, SMTP 中的 S 代表 Simple 。当然,称之为 Simple 的人就是认为Emacs是一个直观的程序编辑器的人。

# /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use constant {
    SMTP_HOST     => 'mailhost',
    TO            => 'abcd@gmail.com',
    FROM          => 'efgh@mail.com',
    SUBJECT       => 'Test Email',
    USER          => 'question_guy',
    PASSWORD      => 'swordfish,
};

my $smtp = Net::SMTP->new( SMTP_HOST )       # This is your SMTP host
    or die qq(Cannot create Net::SMTP Object);
$smtp->auth( USER, PASSWORD )                # If you have to use authentication
    or die qq(Can't authenticate into ) . SMTP_HOST;
$smtp->mail( FROM );
$smtp->to( TO );
my $message = "Subject: " . SUBJECT . "\n"
   . "To: " . TO . "\n"
   . 'This is test email sent by Perl Script';
$smtp->data;
$smtp->datasend( $message );
$smtp->dataend;
$smtp->quit;

以上内容未经过测试,但我是根据我编写的使用Net::SMTP的程序输入的。查看Net::SMTP文档,然后使用它。