StepDoWn Captain Awesome Geschrieben 26. März 2012 Ich brauch mal wieder Hilfe. Für die Schwiegereltern hab ich vor geraumer Zeit eine Homepage gebastelt (Anmerkung: sowohl HTML als auch CSS sind mir eigentlich peinlich, das war die zweite wirkliche Seite die ich gemacht hab ... typischer DIY-Pfusch ) Ein wichtiges Feature für die Page war und ist das "Kontakt"-Feld. Klarerweise kein einfacher Mailto-Link, sondern eben eine schöne Maske, wo die Leute Namen, Email und ihre Nachricht hinterlassen. Sogar ohne Eingabemaske, sollte überhaupt nicht fancy sein, bloß funktionieren sollte es. Gelöst habe ich es damals über eine einfache HTML-Form-Section, die von einem CGI-Script weitervarbeitet wird. Das Script heißt "AnyMail", und ist blöderweise momentan nichtmal mehr Googlebar (also ich hab zumindest auf einige Anläufe keine Entwicklerhomepage gefunden), funktioniert sehr simpel - und wiegesagt, es FUNKTIONIERT, was das wichtigste war und ist. Das Script ruft in weiterer Folge dann das Mail-Service des Webservers auf, ich vermute eben per CGI, sicher bin ich mir durch die fehlende Dokumentation aber nicht ganz. Kleiner Schönheitsfehler: es werden die Umlaute und Sonderzeichen rausgekickt. Wenn der Herr Schößmüller eine Anfrage schickt, können meine armen Schwiegereltern also den Namen nicht rekonstruieren (schon, aber ehschonwissen: schön isses ned). Das Hauptproblem das ich hab ist, dass ich nicht genau sagen kann, welcher Teil des Prozesses meine Umlaute rauswirft. Die HTML-Form per se ist ja eigentlich UTF8-codiert (zumindest laut Header-Tag), dh das CGI-Script müsste die Strings eigentlich noch vollständig als "Schößmüller" empfangen - oder? Alle Versuche, im CGI selbst die utf8-Codierung einzubinden gingen schief. Da gibts zig-Seiten voll mit Diskussionen, wann man welche Variable wie casten muss, damit's wirklich UTF ist, usw. Interessiert mich eigentlich alles nicht wirklich. Hat jemand von euch eine Idee bzw einen Tip? Wenn es gute (!) andere Lösungen gibt, bin ich auch nicht abgeneigt. Brauche keine Required Fields und Captchas (oder wie das Zeug heißt ), deswegen hab ich jetzt 2 Stunden mit enorm komplizierten Lösungen herumgeschissen, die im Endeffekt wieder nicht funktioniert haben (wegen PHP-Version, kleinen Wehwechen, usw ...). CGI/PERL-Code folgt. "use encoding utf8" hat genau so wenig gebracht wie das Aufrufen von der CGI-Library mit -utf8 ... hab echt keine Idee mehr. #!/usr/bin/perl -- use encoding utf8; $| = 1; use CGI qw(:param -utf8); my $script_url = $ENV{'SCRIPT_NAME'}; my $refer = $ENV{'HTTP_REFERER'}; #*# ---------- Begin Configurations ---------- #*# my $admin_address = 'myAddy'; my $bounce_url = "myUrl/"; my @okay_domains = qw(myUrl .co.at); my $location_of_sendmail = '/usr/sbin/sendmail'; my $at_symbol_replacement = '~'; my $require_image_code = '0'; my %text = ('GRt5B' => '1', 'MRP3T' => '1', 'YYP4B2' => '1', '7YUQ44' => '1', 'HHTIV5D' => '1', ); my $version = '1.23'; unless (param()) { print "Location: $bounce_url\n\n"; exit; } else { my $test_text = param("code"); chomp $test_text; unless ((exists $text{"$test_text"}) || ($require_image_code == '0')) { &error('no_key'); } if (defined $refer) { my $ok = check($refer); unless ($ok == 1) { print "Location: $bounce_url\n\n"; exit; } } my $message = ""; my $goto = param("followup"); my $to = param("AnyMailAddress"); chomp $to; my $replace = '@'; $to =~ s/$at_symbol_replacement/$replace/; my ($subject_key, $subject_line, $mailngfrom); if (defined param("POSTDATA")) { print "Location: $bounce_url\n\n"; exit; } if (defined param("subject_line")) { $subject_key = param("subject_line"); $subject_line = param("$subject_key"); } else { $subject_line = "AnyMail Form Results from: $refer"; } if (defined param("FromEmail")) { $mailingfrom = param("FromEmail"); } else { $mailingfrom = "myUrl .co.at<$admin_address>"; } foreach my $name( param() ) { unless (($name eq "followup") or ($name eq "AnyMailAddress") or ($name eq "subject_line")) { my $value = param($name); if ((defined $value) && ($value !~ /^\s*$/)) { $message .= "-------- $name --------\n$value\n\n"; } } } unless (defined $to) { $to = $admin_address; } send_mail($mailingfrom, $to, $subject_line, $message); print "Content-Type: text/html\r\n\r\n"; print qq~ exit; } sub send_mail { my ($from, $to, $subject, $messagebody) = @_; my $flags = "-t"; $mail_program = $location_of_sendmail; $mail_program .= " $flags"; open (MAIL, "|$mail_program") || die "Could Not Open Mail Program: $!"; print MAIL <<__END_OF_MAIL__; To: $to From: $from Reply-to: $from Subject: Homepage-Anfrage [myUrl .co.at] X-Mailer: AnyMail $version Content-type: text/plain $messagebody __END_OF_MAIL__ close (MAIL); } # End of send_mail sub check { my $r = $_[0]; my $ok = 0; foreach $domain(@okay_domains) { if ($r =~ /.+$domain.*/) { $ok++; last; } else{ next; } } return $ok; } sub error { my $type = shift; print "Content-Type: text/html\r\n\r\n"; print qq~ <html><head><br><br> <font face="verdana,arial" size="2"> <font color="red"> Error!!!<br></font> Your request could not be sent. You did not enter all of the required<br> Fields: $type <br><br> Please go back and try again. <br></font></body></html> ~; exit; } 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Geschrieben 29. März 2012 niemand? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
rot_weiss Wichtiger Spieler Geschrieben 29. März 2012 Hi! Bin zwar kein Perl-Kenner. Aber vielleicht kriegst du es hin, das zu versendende E-Mail auch UTF-8 zu kodieren. Möglicherweise liegts daran!? Sollte das allerdings schon der Fall sein (und ich habs übersehen), sorry... Eine andere Lösung fällt mir jetzt auch nicht ein... 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Geschrieben 29. März 2012 Hi! Bin zwar kein Perl-Kenner. Aber vielleicht kriegst du es hin, das zu versendende E-Mail auch UTF-8 zu kodieren. Möglicherweise liegts daran!? Sollte das allerdings schon der Fall sein (und ich habs übersehen), sorry... Eine andere Lösung fällt mir jetzt auch nicht ein... Hallo, danke für deine Antwort - es hat über Umwege geholfen. Daran hatte ich entfernt gedacht, aber nicht sehr konkret, hab viel herumgegoogelt wieder, und letztlich einen Foreneintrag gefunden, wo jemand ein ähnliches Problem hat. Schlussendlich ist er draufgekommen, dass die Mail eh UTF8 ist - dass sein Mailprogramm aber ISO anzeigt, und nicht UTF8. Siehe da, genau dasselbe Problem war bei mir. Ich liebe dumme Lösungen von dummen Problemen. Trotzdem danke für deinen Input, hat wiegesagt geholfen! 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
rot_weiss Wichtiger Spieler Geschrieben 29. März 2012 Schön, dass es dir geholfen hat und super, dass das Problem gelöst ist solche Fehler nerven einfach... 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.