【问题标题】:What's the difference between sendmail via CGI vs. Perl?通过 CGI 和 Perl 发送邮件有什么区别?
【发布时间】:2009-05-05 14:15:32
【问题描述】:

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

有没有其他人遇到过这种情况?两者有什么不同?

【问题讨论】:

  • 如果您发布了脚本的相关部分,将会更容易看到

标签: perl sendmail


【解决方案1】:

我敢打赌,你是从命令行的提示中获取数据,而不是像这样chomping 他们:

my $send_to = <>;

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

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

或者只是

chomp(my $send_to = <>);

【讨论】:

  • 不不......我不会在没有先确定的情况下发布这个问题。数据最终将来自用户,但出于本次测试的目的,我只是对值进行硬编码。
  • 那么,你是用换行符硬编码它们吗?你在问什么可能导致它没有真正的线索,除了一堆猜测之外还能期待什么?已经有换行符的变量可能会导致问题。接下来要寻找的是,当您运行命令行与 CGI 时环境是否不同。
【解决方案2】:

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

-l 选项启用自动行尾处理,由于您的问题是行尾,我建议您尝试不使用 -l。

【讨论】:

    【解决方案3】:

    数据从何而来?硬编码在脚本中,还是来自网络表单?

    顺便说一句,如果您从网络表单中获取收件人的电子邮件地址,您的表单被垃圾邮件发送者使用。这是 100% 的保证。

    【讨论】:

      【解决方案4】:

      “CGI”这个词很宽泛,如果你的意思是你的 perl 脚本作为 CGI 运行而不是你的 perlscript 在命令行运行,我会看一下脚本的路径及其一般继承的环境。特别是如果您以不同的用户 ID 运行它。如果网络服务器在 chroot 等中。

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

      【讨论】:

      • 有趣。是的,它是一个带有 cgi 扩展名的 perl 脚本。当我像这样运行它时 >perl -l foo.cgi [enter] 它坚持 to 字段是“To:foo@bar.com”但是当我通过浏览器运行它时它会失败,除非它是“To:foo@bar .com\n" 我不确定环境与它有什么关系,但我会四处寻找。
      • 你为什么使用“perl -l”? -l 选项与可能导致不同行为的行尾混淆。
      【解决方案5】:

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

      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 来运行?

      【讨论】:

      • 我正在以标准规定的方式打印到 sendmail。我正在运行相同的文件,只是在运行之间更改它。当我说 CGI 时,我的意思是,我通过浏览器调用它,并将其 chmoded +x 和 765。在命令行中,我只是将它作为 perl -l foo.cgi 运行
      猜你喜欢
      • 2015-06-23
      • 2011-02-18
      • 2015-09-29
      • 2015-01-11
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多