2014-12-04 52 views
0

工作,我有以下的测试脚本,以发送电子邮件:电子邮件脚本不是IIS

use strict; 
use Net::SMTP; 

print "Content-Type: text/plain\n\n"; 
print "Sending email...\n"; 

my $smtp = Net::SMTP->new('10.0.0.1', Port => 25, Timeout => 10, Debug => 1); 
$smtp->mail("user1\@domain.local"); 
$smtp->to("user2\@domain.local"); 
$smtp->data(); 
$smtp->datasend("From: user1\@domain.local\n"); 
$smtp->datasend("To: user2\@domain.local\n"); 
$smtp->datasend("Subject: Test\n\n"); 
$smtp->datasend("Testing 1 2 3\n"); 
$smtp->datasend(); 
$smtp->quit; 

,当我在命令行中运行它,它工作得很好,我得到的电子邮件的时候了。但是,当我把它放在C:\inetpub\wwwroot并从网络浏览器运行它时,我得到了Sending email...文本,但没有任何内容。没有电子邮件发送,没有错误信息显示。我查看了邮件服务器日志,甚至没有连接。我不知道为什么它从cmd工作,但不是从IIS工作。脚本是否需要一些额外的配置才能通过IIS执行此操作?

我也尝试过sendmail()并获得类似的结果。

回答

1

首先,添加以下标头文件

use strict 'vars'; 
use warnings; 
use diagnostics; 
use feature qw/say/; 
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 

... your code... 

# Print Warnings 
warningsToBrowser(1); 

这会给你更多的信息,如果它的失败或扔东西的警告。

其次,你是如何安装Net :: SMTP的?确保它以及它的所有依赖项都具有IIS工作进程的权限。

+0

我用你提供的代码得到的错误是'Can not call method " mail " on C:\ inetpub \ wwwroot \ test.pl line 14.'这就是我所期望的,如果' Net :: SMTP-> new'调用失败。但它仍然没有告诉我为什么失败。至于工作进程中的权限,我不确定你的意思。这是一个默认的IIS安装中的简单Perl脚本,所以我会在哪里寻找它? – Dendory 2014-12-05 14:14:10

+0

看看在IIS上运行perl @ http://blogs.iis.net/wadeh/archive/2009/04/13/running-perl-on-iis-7.aspx – harvey 2014-12-07 21:55:11

+0

如果那太复杂了,你可以下载来自http://search.cpan.org/~shay/libnet-3.04/lib/Net/SMTP.pm的Net :: SMTP的源代码 - 将bin文件夹相对于您的CGI复制,并使用'use文件::基名;使用lib dirname(__FILE__)。 '/ bin';' – harvey 2014-12-07 21:58:12