Email send mit php und ajax

Ok, dann hast du da dein Problem. Versuch mal das:

PHP:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
 
$vtext="Ihre Mail ist sicher bei $_POST['empf'] angekommen. Sie werden in den nächsten Tage eine Antwort erhalten.";
 
$bestaetigung="Nachricht angekommen";
 
$message=str_replace("\\\"","\"",$_POST['message']);
$message=str_replace("\'","'",$message);
urlencode ($message);
$message=str_replace("%0D","\n",$message);
 
mail($_POST['empf'],$_POST['subject'],"$_POST['vn'] $_POST['nn']\n$_POST['hp']\n\n\n\n $message","From: ".$_POST['email']);
mail($_POST['email'],$_POST['bestaetigung'],$_POST['vtext'],"From: ".$_POST['empf']);
?>

Hintergrund: Wenn die register_globals auf Off stehen, werden die Werte, die über GET, POST, COOKIE oder SESSION reinkommen, nicht als Variablen verfügbar gemacht, sondern sind nur über das korrespondierende Superglobale Array $_GET, $_POST, usw. verfügbar. Das ist ein Sicherheitsaspekt.

Im übrigen empfehle ich, die Werte nicht ungefiltert zu übernehmen.
 
Hallo saftmeister,

danke für die erklärung für "register_global".
Habe dankensweise deinen korrigierten Code übernommen.
Nun, vom Code her läuft es durch und die success function von ajax wird aufgerufen.
Theoretisch sollte die Mail versenden werden aber praktisch nicht.
Habe es mittlerweile schon zig mal (online) erfolgslos probiert.
Bin schon mittlerweile schon müde und werde mir das morgen nochmals ansehen.
Vielleicht sehe ich auch den Wald vor lauter Bäumer nicht mehr.
Jedenfalls vielen Dank für deine Mühe.

In diesem Sinne wünsche ich dir und euch allen noch einen schönen Abend und gute Nacht.
 
Mach doch mal einen Minimaltest ohne AJAX und ohne Variablen. Einfach nur den mail()-Befehl in eine Datei schreiben und direkt aufrufen.
 
Hallo alxy,

war eine Klasse Idee, hatte mir das auch überlegt gehabt aber wusste nicht ob das dann funktionieren würde wenn man die php Datei einfach so aufrufen würde.
Jedenfalls hat das Senden
Code:
<?php
	mail("empfaenger@mail.com","Betreff","Bla bla","absender@mail.com");
?>
auf diese Variante funktioniert aber mit dem restlichen Inhalt nicht.

Daher mal Verständnissfrage über php.
Code:
$vtext="Ihre Mail ist sicher bei $_POST['empf'] angekommen. Sie werden in den nächsten Tage eine Antwort erhalten.";
 
$bestaetigung="Nachricht angekommen";
 
$message=str_replace("\\\"","\"",$_POST['message']);
$message=str_replace("\'","'",$message);
urlencode ($message);
$message=str_replace("%0D","\n",$message);
 
mail($_POST['empf'],$_POST['subject'],"$_POST['vn'] $_POST['nn']\n$_POST['subject']\n\n\n\n $message","From: ".$_POST['mail']);
mail($_POST['mail'],$_POST['bestaetigung'],$_POST['vtext'],"From: ".$_POST['empf']);
Es werden zwei Variablen (vtext und bestaetigung) deklariert jedoch werden dieser in der mail() function als
$_POST['bestaetigung'] und $_POST['vtext']
übergeben. In diesem Fall würde er wenn ich das richtig verstanden habe in einemn Globalen Array nach der Variable suchen.
Ich frag das nur Interesse halber um mehr Verständniss zu bekommen.
Probiert habe ich es auf verschiedensten Varianten.
Strange ;-)

Danke im voraus und Lg

So, war eine sehr schwere Geburt aber jetzt ist mir auch einbisschen klarer.
Überlicherweise wird für String.Concanate das "+" (Plus) oder "&" (Kaufm. Und) verwendet, bei php "." (Punkt). Das war ausschlaggebend für den Body-Text.

Statt den Body-Text unter Anführungszeichen zusammen zu stellen
Code:
mail($_POST['empf'],$_POST['subject'],"$_POST['vn'] $_POST['nn']\n$_POST['subject']\n\n\n\n $message","From: ".$_POST['mail']);

habe dies nur bei Leerzeichen und Zeilenumbruch angewendet.
Code:
mail($empf,$_POST['subject'], $_POST['vn']." ".$_POST['nn']."\n".$_POST['subject']."\n\n\n\n".$message,"From: ".$_POST['mail']);
Und siehe da die Nachricht wird versendet.

Mit diesen Schlussworten möchte ich mich bei euch beiden recht herzlichst bedanken und wünschen allen noch frohe Ostern.
 
Cool das du es hinbekommen hast, aber einen Einwand habe ich immer noch: filtere die Werte. Sie einfach so zu übernehmen ist wie russisch Roulette. Es könnte jemand mit niederen Motiven missbrauchen. Überleg dir, welche Zeichenketten zu wo zulassen willst, und verwende reguläre Ausdrücke oder dergleichen.

Z.b. beim Email-Text: Da wär es doch angebracht, HTML-Code rauszufiltern. Dazu gibt es die Funktion strip_tags(). Bei der Empfänger- und Absender-Email-Adresse könntest du mit filter_var() arbeiten und die Mail-Adresse validieren.

Das soll keine Schikane sein, sondern dein Interesse an Sicherheitsaspekten wecken. Leider ist PHP, was das angeht, sehr verrufen und häufig stolpern Anfänger der Sprache über diese Probleme - wobei das Thema in anderen Sprache (auch C# oder VB) immer akut ist. Da die Sprachen im Web aber sehr viel seltener als PHP anzutreffen sind, ist der Fokus auch ein geringerer.

Am einfachsten ist es, wenn du für jedes Feld eine Liste von erlaubten Zeichen vorgibst, und dann mit preg_replace() konsequent alles andere rausfilterst.
 
Hallo saftmeister,

danke für deine Tipps jedoch bevorzuge ich diese Art von Prüfungen in JavaScript bzw. jQuery da in diesen Sprachen meine Kenntnisse ausgeprägter sind und ich dabei auf der sicheren Seite bin.

All Eingaben werden auf die Richtigkeit und teils auf die Länge geprüft nur wollte ich dies alles hier nicht posten da es mit dem eigentlichen Problem nichts zu tun hatte.

Aber das macht wiederum einen guten Coder bzw. Programmierer aus wenn ihm gleich solche leks auffalen. Danke für diese Ratschläge.

Besten Grüße
 
Schau mal: Wer schreibt mir denn vor, dein Formular mit JQuery zu verwenden? Ich kann mir mein eigenes Formuar (nur HTML-Seite) basteln, die als ACTION dein PHP-Script als URL hat und schon habe ich deine Java-Script-Prüfungen ausgehebelt. Oder ich verwende curl und kommuniziere auf diese Weise direkt mit deinem PHP-Script.

Werte MÜSSEN immer auf dem Server sanitized werden. IMMER! Vertraue NIEMALS Werten, die über GET, POST, SESSION, COOKIE reinkommen.

:-)
 
Hallo und sry das ich erst jetzt schreibe, war die Feiertage nicht da.

Bzgl. der Pürfung hast sicher recht, solche sachen gehören auf dem Server geprüft.
Aufgrund fehlende Kenntnisse in php ist das die derzeitige Lösung.

Providerwechsel ist im gange da nur mehr die aktuelle Domäne noch auf einen Apache'n mit php läuft.
Werde mir die zwei Links trotzdem durchlesen.

Danke und Lg
 
Zurück