这是我用于在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);
我没有收到任何错误,但无法找到邮件未发送的原因。
请帮助我,我尝试了几个例子和论坛,但没有任何作用。
服务器迁移后会发生这种情况
我知道这个问题已被问过几次,但没有人帮助过我。
答案 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::MIME和Email::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帮助了我。
但我真的为这样做感到难过。这不应该被欣赏。
我感谢大家。