Upozornění - server ARII je pravidelně v rekonstrukci, následující stránka je občas mimo provoz.


Vážení přátelé,

na serveru arii.fsid.cvut.cz jsem zprovoznil prozatímní verzi cgi scriptu, který Vám pošle vyplněný obsah formuláře, pokud jej správně zavoláte. Program má prozatím některé chyby, mimo jiné následující:

Uvedené problémy jsou způsobeny špatným nastavením programu pro odesílání pošty, do kterého bych ale prozatím nerad zasahoval, protože v zásadě funguje.

Použití skriptu

Použití skriptu názorně ukazuje soubor sample.htm. U deklarace formuláře do příslušného řádku uvedete, že se má spustit skript mailform.cgi z tohoto serveru, a jako dotaz mu uvedete (bez mezer!) svou e-mail adresu, například v mém případě:

<FORM ACTION="http://arii.fsid.cvut.cz/cgi-bin/mailform.cgi?hlavac@fsid.cvut.cz" METHOD="post">

Je to dlouhé - doporučuji text z této stránky překopírovat a opravit e-mail adresu. Pozor na přebytečné mezery - musí být jen před slovy "action" a "method", rozhodně nesmí být mezi uvozovkami.

Omezení:

Program budu muset v nejbližší době upravit tak, aby pracoval jen pro akademickou sféru (omezení statusem sítě ČVUT, viz pravila pro práci v této síti). Asi to učiním tak, že program se ukončí, pokud e-mail adresa nebude končit na ".cvut.cz".

Vladimír Hlaváč


Podrobnější popis

Program byl získán ze serveru Dream Catchers Technologies, Inc., kde byl v následujícím tvaru:

#!/usr/local/bin/perl

######################################################################
#  BEFORE TRYING TO EDIT THIS SCRIPT, READ THE README FILE
###################################################################### 
#
#     The Dream Catcher's Web Free CGI Scripts 
#     Form Return
#     Created by Seth Leonard
#
#     http://dreamcatchersweb.com/scripts/
#
#     (c)2000 Seth Leonard
#     All Rights Reserved
#
######################################################################
# ONLY EDIT THIS PART OF THE SCRIPT!!!!

$backurl = "http://dreamcatchersweb.com/test/home.html";
$backname = "Your Home Page Title";
$mailprog = '/bin/sendmail';
$youmail = 'you@server.com';

# DO NOT EDIT BELOW THIS LINE!!!!
#################################################################

read(STDIN, $namevalues, $ENV{'CONTENT_LENGTH'});

open (MAIL, "|$mailprog $youmail") || die "Can't open $mailprog!\n";
print MAIL ("To: $youmail\n");
print MAIL ("From: Internet User\n");
print MAIL ("Subject: Form Response\n\n");

# Process info from Fill in Form

@namevalues = split(/&/, $namevalues);
foreach $namevalue (@namevalues) {
	($name, $value) = split(/=/, $namevalue);
	$name =~ tr/+/ /;
	$value =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$INPUT{$name} = $value;
	unless ($value eq "") {
		print MAIL ("$name: $value\n");
	}
}

close (MAIL);

# Print Follow up HTML

print ("Content-Type: text/html\n\n");
print ("<html><head><title>Thank You</title></head>\n");
print ("<body><h1>Thank You For Filling in the Requested Information</h1>\n");
print ("The information has been sent and here is what you submitted:<hr>\n");

foreach $namevalue (@namevalues) {
	($name, $value) = split(/=/, $namevalue);
	$name =~ tr/+/ /;
	$value =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$INPUT{$name} = $value;
	unless ($value eq "") {
		print ("$name: $value<br>\n");
	}
}

print ("<hr>\n");
print ("<a href=\"$backurl\">Back to $backname</a><hr>\n");
print ("&copy; <a href=\"http://dreamcatchersweb.com/scripts/\">Dream Catchers Technologies, Inc.</a>\n");
print ("</body></html>\n");

exit;

Upravil jsem jej do následující podoby:

#!/usr/bin/perl

######################################################################
#  BEFORE TRYING TO EDIT THIS SCRIPT, READ THE README FILE
###################################################################### 
#
#     The Dream Catcher's Web Free CGI Scripts 
#     Form Return
#     Created by Seth Leonard
#
#     http://dreamcatchersweb.com/scripts/
#
#     (c)2000 Seth Leonard
#     All Rights Reserved
#
#  Small correction Vladimir Hlavac, 2001
#
######################################################################
# ONLY EDIT THIS PART OF THE SCRIPT!!!!

# $backurl = "http://dreamcatchersweb.com/test/home.html";
# (universal form - no universal way to go back)
# $backname = "Your Home Page Title";
$mailprog = '/usr/sbin/sendmail';
$youmail = $ENV{ 'QUERY_STRING' };

# DO NOT EDIT BELOW THIS LINE!!!!
#################################################################

read(STDIN, $namevalues, $ENV{'CONTENT_LENGTH'});

open (MAIL, "|$mailprog $youmail") || die "Can't open $mailprog!\n";
print MAIL ("To: $youmail\n");
$rem_addr = $ENV{ 'REMOTE_ADDR' };
print MAIL ("From: Internet user at $rem_addr \n");
print MAIL ("Subject: Form Response\n\n");

# Process info from Fill in Form

@namevalues = split(/&/, $namevalues);
foreach $namevalue (@namevalues) {
	($name, $value) = split(/=/, $namevalue);
	$name =~ tr/+/ /;
	$value =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$INPUT{$name} = $value;
	unless ($value eq "") {
		print MAIL ("$name: $value\n");
	}
}

close (MAIL);

# Print Follow up HTML

print ("Content-Type: text/html\n\n");
print ("<html><head><title>Mail has been sent</title></head>\n");
print ("<body><h3>Thank You For Filling in the Form</h3>\n");
print ("The information has been sent to address $youmail");
print (" with your IP ($rem_addr) and here is what you submitted:<hr>\n");
print ("<table>");

foreach $namevalue (@namevalues) {
	($name, $value) = split(/=/, $namevalue);
	$name =~ tr/+/ /;
	$value =~ tr/+/ /;
	$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$INPUT{$name} = $value;
	unless ($value eq "") {
		print ("<tr><td align=right>$name:</td><td><b>$value</b></td></tr>\n");
	}
}

print ("</table>");
print ("<hr>\n");
#print ("<a href=\"$backurl\">Back to $backname</a><hr>\n");
print ("&copy; <a href=\"http://dreamcatchersweb.com/scripts/\">Dream Catchers Technologies, Inc.</a>\n");
print ("<br> &nbsp; (correction by Vladimir <a href=http://www.fsid.cvut.cz/\~hlavac>Hlavac</a>)");
print ("</body></html>\n");

exit;

Sami vidíte, že provedené změny byly minimální. Program je napsán v Perlu, první řádek tedy musíte upravit tak, aby program interpreter Perlu našel. Podotýkám, že odesílací skript je tak málo anonymní, jak jen to umožňuje prostředí Internetu. Na Internetu si své jméno pro poštovního klienta i svou návratovou adresu volí každý sám, a to jakoukoli. Jediné, co člověk nemůže změnit, je IP adresa počítače, na kterém běží prohlížeč. Pokud Vás pro danou IP zajímá, jakému byla přiřazena počítači, zkuste se jakéhokoli unixového (nebo linuxového) serveru zeptat (v prostředí telnetu) příkazem host, například

$host 147.32.160.28

Zkuste si tedy tento program na našem serveru a pak si jej upravte a zinstalujte na svůj linuxový počítač. Pokud máte se svým Linuxem nějaké potíže (nebo se prozatím připojujete modemem), můžete zatím používat tento skript na serveru arii (viz výše).