繁体   English   中英

Perl 脚本出现 500 内部服务器错误,脚本结束 output 在标头之前

[英]Perl script getting 500 Internal Server error, end of script output before headers

我有这个脚本来发送 email。一切正常,除了在发送 email 之后我收到以下错误。 它必须是我所缺少的简单东西。 我检查了一下,cgi 文件是 755,因为它到达了 sub 并执行了它必须是编码器错误。 非常感谢任何帮助。

内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 服务器错误日志中可能提供了有关此错误的更多信息。 此外,在尝试使用 ErrorDocument 处理请求时遇到了 500 Internal Server Error 错误。

服务器日志中的错误是:

[2023 年 1 月 17 日星期二 16:00:23.475272] [cgi:error] [pid 230679] [client 69.90.223.10:35014] 头文件之前的脚本 output 结束:test3.cgi

这是我正在使用的代码,Linux 上的 Perl CGI

#!/usr/bin/perl -Tw
# use warnings;
use strict;
use Net::SMTP;

send_mail('mail.xxxxxxx.com', # Host
 'order@xxxxxxxxx.com', #From
 'yyyyyyy@gmail.com', #to
 'Just a test, from mail.xxxxxx.com please ignore',  #Message body
 "Testing mail server email.\n" # Subject
 );
exit;

sub send_mail {
 my ($SMTP_HOST, $from, $to_addr, $body, $subject, $msg) = @_;

 $msg = "MIME-Version: 1.0\n"
 . "From: $from\n"
 . "To: " . ( ref($to_addr) ? join(';', @$to_addr) : $to_addr ) . "\n"
 . "Subject: $subject\n\n"  # Double \n
 . $body;

 #
 # Open a SMTP session
 #
 my $smtp = Net::SMTP->new( $SMTP_HOST,
 Debug => 0,       # Change to a 1 to turn on debug messages
 Port => 587,
 );

 die("SMTP ERROR: Unable to open smtp session.\n")
 if(!defined($smtp) || !($smtp));

 die("Failed to set FROM address\n")
 if (! ($smtp->mail( $from ) ) );

 die("Failed to set receipient\n")
 if (! ($smtp->recipient( ( ref($to_addr) ? @$to_addr : $to_addr ) ) ) );

 $smtp->data( $msg );

 $smtp->quit;
 
}

检查文件属性它们是 755 因为它运行代码并执行发送 email 字符集应该是正确的 Perl 的新手不知道还有什么要检查

这不是 CGI 程序。 您没有对该请求发送任何响应。 由于没有响应(甚至没有无效响应),脚本退出时没有向标准 output 发送任何内容。服务器意识到这是一个问题,创建 500 服务器错误响应,并将脚本 output 之前结束的错误日志添加到错误日志中标头,这是服务器希望看到的第一件事。

您可能希望从基本的 CGI 教程开始,了解 CGI 的工作原理。

但是,也要意识到通过 CGI 程序发送邮件是 20 世纪 90 年代的事情。 我们通常不再这样做了,因为我们都认为让任何人通过公共服务器触发邮件是个坏主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM