2014-12-04 99 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