Recommended Posts

Captain Awesome

Ich brauch mal wieder Hilfe. :schluchz:

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 :D), 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;


}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wichtiger Spieler

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Captain Awesome

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

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

Trotzdem danke für deinen Input, hat wiegesagt geholfen!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Folge uns auf Facebook

  • Partnerlinks

  • Unsere Sponsoren und Partnerseiten

  • Wer ist Online

    • Keine registrierten Benutzer online.