webForumDet fria alternativet

wml och perl

Webbutveckling

10 svar · 328 visningar · startad av puruff

Medlem sedan jan. 200312 inlägg
Frågan#1

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

Medlem sedan juli 20013 378 inlägg
#2

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 ;) )?

Medlem sedan jan. 200312 inlägg
#3

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>

Medlem sedan juli 20013 378 inlägg
#4

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 ;)

Medlem sedan jan. 200312 inlägg
#5

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...

Medlem sedan juli 20013 378 inlägg
#6

Hm...
Och hur returnerar scriptet WML ?

Medlem sedan jan. 200312 inlägg
#7

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

Medlem sedan juli 20013 378 inlägg
#8

OK - Nu ser jag!

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

Medlem sedan jan. 200312 inlägg
#9

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...

Medlem sedan jan. 200312 inlägg
#10

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

Medlem sedan juli 20013 378 inlägg
#11

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

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)