通过CGI与Perl的sendmail有什么区别?

时间:2009-05-01 20:01:56

标签: perl sendmail

我在perl中使用sendmail并且注意到(在多次撞击墙壁之后)当脚本在命令行运行时,它需要你在电子邮件和收件人之后省略\ n(s)电子邮件地址,以便正确格式化邮件,但是当通过CGI运行时,如果那些\ n(s)不存在,则会返回错误,指出收件人的电子邮件格式错误。

还有其他人遇到过这个吗?这两者的不同之处是什么?

5 个答案:

答案 0 :(得分:2)

我打赌你从命令行的提示中获取数据而不是chomp这样的数据:

my $send_to = <>;

这意味着$ send_to已经有一个“\ n”。为了使它们以相同的方式工作,选择变量:

my $send_to = <>;
chomp($send_to);

或只是

chomp(my $send_to = <>);

答案 1 :(得分:0)

数据来自哪里?在脚本或网络表单中硬编码?

另外,如果您从网络表单中获取收件人的电子邮件地址,则表单由垃圾邮件发送者使用。这是100%的保证。

答案 2 :(得分:0)

术语“CGI”很广泛,如果你的意思是你的perl脚本作为CGI而不是你在命令行运行的perlcript运行,我会看看脚本的路径及其一般的继承环境。特别是如果您将其作为不同的用户标识运行。如果网络服务器在chroot等中

use Data::Dumper;
warn(Dumper(\%ENV));

答案 3 :(得分:0)

所以我猜你有这样的东西可以通过命令行运行它:

my $your_email = "you@foo.bar";
my $recipient_email = "them@foo.bar";

这当“通过CGI运行”时:

my $your_email = "you@foo.bar\n";
my $recipient_email = "them@foo.bar\n";

那么我问你的问题是你如何使用上述变量调用sendmail,以及当你说“通过CGI运行”而不是通过命令行运行时你的意思是什么?您只是添加CGI代码并仍然通过命令行运行或通过在Web浏览器中访问其URL?

答案 4 :(得分:0)

在您的一些评论中,您提到您正在使用-l选项(perl -l foo.cgi)从命令行运行脚本。

-l选项启用自动行结束处理,因为您的问题在于行结尾,我建议您在没有-l的情况下尝试。