Легко иметь сам вызов CGI-формы perl, вот небольшой пример с использованием вашего HTML-кода. (Кстати, все поля формы должны быть заключены в теги <form>
, а не так, как у вас. И да, метод формы - POST.)
Этот CGI-файл должен функционировать по-разному в зависимости от способа доступа к нему. Сначала нужно распечатать HTML с пустыми полями формы. Это переменная $ html в коде. Затем, когда оно отправлено, ему нужно получить параметры формы и что-то сделать с данными. Чтобы отправить его по электронной почте, вызовите подпрограмму mailForm . У меня нет sendmail на моем сервере, поэтому я просто распечатываю данные формы в примере. Код ниже отправляет его по почте.
Сценарий CGI должен указывать разницу между просто посещением веб-страницы и вызовом как действия формы. Для этого он проверяет наличие скрытого поля формы под названием «проверка». Если «проверка» определена, это означает, что форма была отправлена и есть данные для сбора и обработки. Если «check» не определен, он просто распечатывает пустые поля формы.
Вероятно, есть более элегантные способы сделать это, но я просто хотел продемонстрировать файл CGI, обрабатывающий свои собственные отправленные данные, на случай, если кто-нибудь заинтересуется будущим. Убедитесь, что имя файла совпадает с именем формы action . Вот мой пример кода, form.cgi :
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser set_message warningsToBrowser);
use CGI qw(:standard);
use strict;
use warnings;
print header();
my $cgi = CGI->new();
my $check;
$check = $cgi->param('check') if defined $cgi->param('check');
my $newhtml = '';
if ($check eq "yes") { #collect form data and build email subroutine
my $fromemail = $cgi->param('mailFrom');
my $toemail = $cgi->param('mailTo');
my $subject = $cgi->param('subjectLine');
my $message = $cgi->param('messageBody');
$newhtml = qq{
<html>
<body>
<b>Email sent!</b>
<br>
The from email is from $fromemail<br>
The to email is to $toemail<br>
The subject is $subject<br>
The message is $message<br>
</body>
</html>
};
sub mailForm {
open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "To: $toemail\n";
print MAIL "From: $fromemail\n";
print MAIL "Subject: $subject\n\n";
print MAIL $message;
close(MAIL);
}
} #end of if check
my $html = qq{
<html>
<body>
<form action="form.cgi" method="POST">
<h1>Feedback Form</h1>
<p>Please fill out the entire feedback form.</p>
<table>
<tr>
<td><b>To (recipient's e-mail address):</b></td>
</tr>
<tr>
<td><input type = "text" name = "mailTo" size = "40" maxlength = "50" /></td>
</tr>
<tr>
<td><b>From (your e-mail address):</b></td>
</tr>
<tr>
<td><input type = "text" name = "mailFrom" size = "40" maxlength = "50" /></td>
</tr>
<tr>
<td><b>Enter a subject:</b></td>
</tr>
<tr>
<td><input type = "text" name = "subjectLine" size = "40" maxlength = "50"></td>
</tr>
<tr>
<td><b>Enter your message:</b></td>
</tr>
<tr>
<td><textarea name = "messageBody" rows = "10" cols = "50" maxlength = "300"></textarea></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><input type = "submit" name = "sbutton" value = "Submit" />
<input type = "reset" value = "Reset" />
<input type = "hidden" name = "check" value = "yes">
</td>
</tr>
</table>
</form>
<br>
</body></html>
};
#this prints the regular page if no form is submitted
if (!defined $check) {
print $html;
}
#this mails the form data and prints a confirmation page
else {
print $newhtml;
mailForm();
}
exit 0;