如何在不使用模块的情况下在perl中发送邮件?

时间:2017-11-06 12:14:21

标签: perl

这是我用于在perl中发送邮件的代码。但是我没有收到邮件。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
$to = 'to@gmail.com';
$title='Perl Mail demo';
$from= 'from@gmail.com';
$subject='YOUR SUBJECT';

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

## Mail Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
## Mail Body
print MAIL "This is a test message from Cyberciti.biz! You can write your
mail body text here\n";

close(MAIL);

我没有收到任何错误,但无法找到邮件未发送的原因。

请帮助我,我尝试了几个例子和论坛,但没有任何作用。

服务器迁移后会发生这种情况

我知道这个问题已被问过几次,但没有人帮助过我。

5 个答案:

答案 0 :(得分:3)

您应始终检查open()的返回值,并在失败时采取适当的措施。

open MAIL, '/usr/sbin/sendmail -t' or die $!;

在这种情况下,您会收到如下错误消息:

  

没有这样的文件或目录

我不确定您从哪里复制代码,但我猜测您正在制作转录错误。您正在尝试打开名为/usr/sbin/sendmail -t的文件,而且您的系统很可能没有一个名为该文件的文件(特别是最后没有-t的文件)。

您实际想要做的是打开命令管道。你刚刚省略了一个字符:

open MAIL, '|/usr/sbin/sendmail -t' or die $!;

请注意文件名开头的|

我还建议使用词法文件句柄而不是裸字。

open my $mail_fh, '|/usr/sbin/sendmail -t' or die $!;

但是,最重要的是,你为什么要在不使用模块的情况下尝试这样做? Perl模块是Perl强大功能的一部分。如果您不能使用模块(并从CPAN安装新模块),那么您将错过Perl编程的大部分简易性。当有可供您使用的经过试用和测试的版本时,为什么要浪费时间重写代码?

无论阻碍您使用Perl模块的瓶颈是什么,我都建议您花时间去除它们。您的Perl编程生涯将更加愉快。

Perl FAQ建议Email::MIMEEmail::Sender::Simple。就个人而言,在大多数情况下,我会选择Email::Stuffer。 Email :: *命名空间是好东西的所在。

答案 1 :(得分:2)

如何在不使用模块的情况下在Perl中发送邮件?

唐'吨

CPAN中的模块经过了充分测试和保护。他们会照顾你甚至没有意识到的问题。专业人士没有理由避免他们。

答案 2 :(得分:1)

尝试这样的事情:

open MAIL, "| mailx -s '$subject' -r $from $to";
print MAIL $mail_message;
close MAIL;

答案 3 :(得分:0)

此行正在打开一个名为“/ usr / sbin / sendmail -t”的文件供阅读。

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

如果您检查了open返回的内容,则会发现它返回错误,因为该文件不存在。相反,您希望将输出传递给sendmail。以下是使用更现代的方式调用open

时代码的外观
if(open(my $mail, "|-", "/usr/sbin/sendmail -t"))
    {
    ## Mail Header
    print $mail "To: $to\n";
    print $mail "From: $from\n";
    print $mail "Subject: $subject\n\n";
    ## Mail Body
    print $mail "This is a test message from Cyberciti.biz! You can write your
mail body text here\n";

    close($mail);
    }
else
    {
    print "open failed: $!\n";
    }

答案 4 :(得分:0)

我终于通过在perl脚本中运行php命令来完成它。

我在php中编写了一个邮件函数,并将params从perl传递给该文件。

#!/usr/bin/perl

print "Content-type: text/html\n\n";

use CGI::Carp 'fatalsToBrowser';
my $mail = 'example@gmail.com';
$mail =~  s/@/%40/g;
my $sub = 'Subject';
$sub =~ s/\s/+/g;
my $msg = 'Message';
$msg =~ s/\s/+/g;
my $output = `php path-to-php-file 'to=$mail&message=$msg&sub=$sub'`;

link帮助了我。

但我真的为这样做感到难过。这不应该被欣赏。

我感谢大家。