【问题标题】:Email script not working on IIS电子邮件脚本在 IIS 上不起作用
【发布时间】:2014-12-05 10:58:53
【问题描述】:

我有以下测试脚本来发送电子邮件:

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() 并得到了类似的结果。

【问题讨论】:

    标签: perl iis


    【解决方案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 工作进程的权限。

    【讨论】:

    • 您提供的代码出现的错误是Can't call method "mail" on an undefined value at C:\inetpub\wwwroot\test.pl line 14.,如果Net::SMTP->new 调用失败,这就是我所期望的。但它仍然没有告诉我为什么它失败了。至于工作进程中的权限,我不确定你的意思。这是默认 IIS 安装中的一个简单 Perl 脚本,那么我该去哪里找呢?
    • 看看在 IIS 上运行 perl @blogs.iis.net/wadeh/archive/2009/04/13/…
    • 如果太复杂,您可以从search.cpan.org/~shay/libnet-3.04/lib/Net/SMTP.pm 下载 Net::SMTP 的源代码 - 复制与您的 CGI 相关的 bin 文件夹,并使用 use File::Basename; use lib dirname( __FILE__ ) . '/bin'; 添加库位置
    • 当我将 vdir 凭据更改为具有管理员组权限的用户时,我设法让它工作。我不确定这是否是它做的,或者为什么它在之前没有其他细节的情况下失败了。
    • 似乎该模块或其依赖项之一是在没有正确凭据的情况下安装的,并且是在没有 IUSR 所需权限的情况下安装的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多