---
title: "wml och perl"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/66658-wml-och-perl"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "puruff"
published: "2003-01-30T20:10:56.000Z"
updated: "2003-01-30T22:15:25.000Z"
replies: 10
views: 338
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/webbutveckling/66658-wml-och-perl"
---

# wml och perl

## #1 — puruff, 2003-01-30T20:10Z

Har kopplat ihop min wappsida med ett perl-script. Men när jag ska skicka få får jag meddelander "Ingen server tillgång" på mobben.
Scriptet fungerar hur bra som helst från vanliga nätet.
Någon som har några tips om vad som kan vara fel?
//maccan

Permalänk: https://www.webforum.nu/p/66658

## #2 — jarvklo, 2003-01-30T20:43Z

Hmm...
Grund-fällor (sm inte har med just Perl att göra utan gäller generellt):
Är du säker på att du har rätt MIME-typ? - kolla att du kör ut resultatet med "text/vnd.wap.wml"

De flesta testverktyg på webben är alldeles för förlåtande mot "icke-perfekt" WML-kod.
Har du validerat ditt resultat som XML för att vara säker på att den är "perfekt" ?

Har du en länk till det knasande scriptet så att man kan kolla detaljer (som det antagligen är fråga om - det är det nästan alltid med WML ;) )?

Permalänk: https://www.webforum.nu/p/934146

## #3 — puruff, 2003-01-30T21:11Z

Här är perl-koden:
$sendmethod = 'libnet';                            # Sändmetod "libnet" / "sendmail".
$mailprog = '/usr/lib/sendmail';                   # Om du använder sendmail anger du sökvägen
                                                   \# till programmet sendmail här.
$mailserver = 'smtp.glidecom.se';                  # Mailserveradress.
$allow_recipient_from_form = '1';                  # '0'(nej) eller '1'(ja).
$recipient = 'your_email@domain.com';              # Mottagarens e-postadress.
$allow_sender_from_form = '1';                     # '0'(nej) eller '1'(ja).
$sender = '';   	                           # Adress som skall stå som avsändare.
$allow_replyto_from_form = '0';                    # '0'(nej) eller '1'(ja).
$replyto = '';                                     # Adress dit svarsmail skall skickas. Får samma
                                                   \# värde som $senter om den lämnas tom.
$use_template = '1';                               # '0'(nej) eller '1'(ja).
$allow_template_from_form = '0';                   # '0'(nej) eller '1'(ja).
$templatefile = 'template.txt';                    # Templatefil som skall användas.
$basedir = 'http://www.hakansdansskola.se/cgi-bin/';       # Sökväg till den katalog där berörda filer ligger.
$default_subject = 'E-post från puruff';           # Det som skall stå som ämne om inget annat anges.
$allow_redirect_from_form = '0';                   # '0'(nej) eller '1'(ja).
$redirect = 'http://www.hakansdansskola.se/wap/index.wml';  # URL till ev. tacksida.

\# Ändra inte på följande rader.
if(lc($sendmethod) eq "libnet"){
	use Net::SMTP;
}
&init;
&read_form;
if($form{'jxsubject'}){
	$default_subject = $form{'jxsubject'};
}
if($allow_recipient_from_form eq "1" && $form{'jxrecipient'}){
	$recipient = $form{'jxrecipient'};
}
if($allow_sender_from_form eq "1" && $form{'jxsender'}){
	$sender = $form{'jxsender'};
}
if($allow_replyto_from_form eq "1" && $form{'jxreplyto'}){
	$replyto = $form{'jxreplyto'};
}
if($allow_template_from_form eq "1" && $form{'jxtemplatefile'}){
	$templatefile = $form{'jxtemplatefile'};
}
if($allow_redirect_from_form eq "1" && $form{'jxredirect'}){
	$redirect = $form{'jxredirect'};
}
if (length($replyto) \< 1){
	$replyto = $sender;
}
if($use_template eq "1"){
	open(INDATA,$basedir . "/" . $templatefile);
	@maillines = \<INDATA\>;
	close(INDATA);
	$maillines\[0\] = "\\n" . $maillines\[0\];
	for($n=0;$n\<=$#maillines;$n++){
		if ($maillines\[$n\] =\~ /%%(.\*)%%/) {
			foreach $testmacro (@macros){
				$maillines\[$n\] =\~ s/%%$testmacro%%/$form{$testmacro}/g;
			}
			$maillines\[$n\] =\~s/%%date%%/$date/g;
			$maillines\[$n\] =\~s/%%clock%%/$clock/g;
			$maillines\[$n\] =\~s/%%userip%%/$ENV{'REMOTE_ADDR'}/g;
		}
	}
} else {
	@maillines = ("\\n");
	foreach $testmacro (@macros){
		push(@maillines, $testmacro . " : " . $form{$testmacro} . "\\n");
	}
}
&send_mail;
if ($redirect){
	print "Location: $redirect\\n\\n";
} else {
	print "Content-type: text/html\\n\\n";
	print \<\<End_of_html;
\<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"\>

\<html\>
\<head\>
	\<title\>Meddelandet skickat\</title\>
\</head\>
\<body bgcolor="white"\>
\<h3\>Tack!\</h3\>
Ditt meddelande är skickat.\<br\>
\<a href="$ENV{'HTTP_REFERER'}"\>Tillbaks\</a\>
\</body\>
\</html\>
End_of_html
}

sub send_mail {
	if ($sendmethod eq "sendmail"){
		my $mailmsg = \<\<End_of_mail;
To: $recipient
From: $sender
Reply-to: $replyto
Content-type: text/plain; charset=ISO-8859-1
Subject: $default_subject
End_of_mail
		foreach $mailline (@maillines){
			$mailmsg .= $mailline;
		}
		open(SMTP,"\|$mailprog -t");
		print SMTP $mailmsg;
		close(SMTP);
	} elsif ($sendmethod eq "libnet"){
		my $mailmsg = \<\<End_of_mail;
From: $sender
Reply-to: $replyto
To: $recipient
Content-type: text/plain; charset=ISO-8859-1
Subject: $default_subject
End_of_mail
		foreach $mailline (@maillines){
			$mailmsg .= $mailline;
		}
		my $smtp = Net::SMTP-\>new($mailserver);
		$smtp-\>mail($sender);
		$smtp-\>to($recipient);
		$smtp-\>data();
		$smtp-\>datasend($mailmsg);
		$smtp-\>dataend();
		$smtp-\>quit();
	}
}
sub read_form {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	@pairs = split(/&/, $buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =\~ tr/+/ /;
		$value =\~ s/%(\[a-fA-F0-9\]\[a-fA-F0-9\])/pack("C", hex($1))/eg;
		$value =\~ s/\<!--(.\|\\n)\*--\>//g;
		$form{$name} = $value;
		push(@macros,$name);
	}
}
sub init {
	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
	$mon++;
	$mon = substr("0" . $mon,length($mon)-1,length($mon)+1);
	$mday = substr("0" . $mday,length($mday)-1,length($mday)+1);
	if ($year \> 99){
		$year += 1900;
	}
	$date = $year . "-" . $mon . "-" . $mday;
	$sec = substr("0" . $sec,length($sec)-1,length($sec)+1);
	$min = substr("0" . $min,length($min)-1,length($min)+1);
	$clock = $hour . ":" . $min . ":" . $sec;
}

Här är själva wml-scriptet:
\<?xml version="1.0"?\>
\<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml"\>
\<wml\>
	\<card id="E-post" title="Uppgift 22"\>
	\<p\>Meddelande: \<input name="mailbody"/\>
	   Subject: \<input name="jxsubject"/\>
	   Din e-post: \<input name="jxsender"/\>
	   Mott. e-post: \<input name="jxrecipient"/\>
	\<anchor\>Skicka
		\<go method="post" href="../cgi-bin/jxformmail.pl"\>            
		\<postfield name="mailbody" value="mailbody"/\>
		\<postfield name="jxsubject" value="jxsubject"/\>
		\<postfield name="jxsender" value="jxsender"/\>
		\<postfield name="jxrecipient" value="jxrecipient"/\>
		\</go\>
	\</anchor\>\</p\>
	\</card\>
\</wml\>

Permalänk: https://www.webforum.nu/p/934174

## #4 — jarvklo, 2003-01-30T21:47Z

Hmm...
Är ingen klippa på Perl direkt, men jag tycker att det ser ut som om att din Perl-kod returnerar en HTML-sida till den som postar in ett meddelande oavsett vad den postar ifrån... 

Sådant brukar kunna få WAP-gateways och annat krafs som sitter mellan din server och Nallefonen kräkas ur sig elaka felkoder (som t.ex. Error 500 ) och tvärvägra att vidarebefordra något vettigt till Nallefonen ;)

Permalänk: https://www.webforum.nu/p/934197

## #5 — puruff, 2003-01-30T21:50Z

Nja på 18:e raden. Dit skickas man efteråt.
Om man inte skriver in något där så skriver den ut html-koden som är längre ner...

Permalänk: https://www.webforum.nu/p/934201

## #6 — jarvklo, 2003-01-30T21:52Z

Hm...
Och hur returnerar scriptet WML ?

Permalänk: https://www.webforum.nu/p/934203

## #7 — puruff, 2003-01-30T21:54Z

När den tagit emot så skickas man till sidan som är skriven på 18:e raden. Det är ju en wml-fil.

Permalänk: https://www.webforum.nu/p/934205

## #8 — jarvklo, 2003-01-30T21:55Z

OK - Nu ser jag!

Men jag är inte säker på att alla Nallefoner hanterar redirects...

Permalänk: https://www.webforum.nu/p/934206

## #9 — puruff, 2003-01-30T21:57Z

Det tror du, oki får lov att ändra så att den skriver ut wml-kod där nere då.v (om jag kan)
Men då borde mailet ha kommit fram iaf tycker jag?! 
Det är ju bara en vanlig sida som komemr efteråt...

Permalänk: https://www.webforum.nu/p/934208

## #10 — puruff, 2003-01-30T22:04Z

Tyvärr fungerade det inte bättre för det:/

Permalänk: https://www.webforum.nu/p/934213

## #11 — jarvklo, 2003-01-30T22:15Z

\*Bang\*  där slog jag huvudet i väggen... :x 
Någon annan med idéer ?

Permalänk: https://www.webforum.nu/p/934224

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/66658-wml-och-perl
