我在perl中使用sendmail并且注意到(在多次撞击墙壁之后)当脚本在命令行运行时,它需要你在电子邮件和收件人之后省略\ n(s)电子邮件地址,以便正确格式化邮件,但是当通过CGI运行时,如果那些\ n(s)不存在,则会返回错误,指出收件人的电子邮件格式错误。
还有其他人遇到过这个吗?这两者的不同之处是什么?
答案 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的情况下尝试。