题
我在perl中使用sendmail并且注意到(在多次敲击墙壁之后)当脚本在命令行运行时,它需要你在电子邮件和收件人之后省略\ n(s)电子邮件地址,以便正确格式化邮件,但是当通过CGI运行时,如果那些\ n(s)不存在,则会返回错误,指出收件人的电子邮件格式错误。
还有其他人遇到过这个吗?这两者的不同之处是什么?
解决方案
在您的一些评论中,您提到您正在使用-l选项(perl -l foo.cgi)从命令行运行脚本。
-l选项启用自动行结束处理,因为您的问题在于行结尾,我建议您在没有-l的情况下尝试。
其他提示
我打赌你是从命令行的提示中获取数据而不是 chomp 他们是这样的:
my $send_to = <>;
这意味着$ send_to已经有一个“\ n”。为了使它们以相同的方式工作,选择变量:
my $send_to = <>;
chomp($send_to);
或只是
chomp(my $send_to = <>);
数据来自哪里?在脚本或网络表单中硬编码?
另外,如果您从网络表单中获取收件人的电子邮件地址,则表单将由垃圾邮件发送者使用。这是100%的保证。
术语“CGI”。很宽泛,如果你的意思是你的perl脚本作为CGI而不是你在命令行运行的perlcript运行,我会看看脚本的路径及其一般的继承环境。特别是如果您将其作为不同的用户标识运行。如果网络服务器在chroot等
use Data::Dumper;
warn(Dumper(\%ENV));
所以我猜你有这样的东西可以通过命令行运行它:
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?
不隶属于 StackOverflow