Bestellbestätigung in PHP

S

Swen

Guest
Hallo,

vielleicht könnt ihr mir weiterhelfen, hab ein großes problem. Folgendes:

Warenkorb usw Funktioniert alles wunderbar. Ich bekomm beim Absenden der Bestellung ne liste was ich bestellt hab mit meinen Kundendaten und alles schick formatiert wie es sich gehört aber ich bekomm ich die bestätigungsemail die bestellten Artikel nich hinein da ich in der mail() nur mit einem string arbeiten kann. alle abfragen die ich bisher versucht hab zu bauen laufen entweder auf ne schleife im string hinaus oder es wird nicht dynamisch. könnt ihr mir weiterhelfen? nen ansatz wie ich die artikelliste wenigstens unformatiert in den String der mail bekomm.....


vielen dank im vorraus.

Swen
 
Meinst Du sowas:
CODE

$message = "";
$message .= "Anrede Bla bla bla\n";
$message .= "ARtikelliste\n";
$message .= "Tschüss\n";

mail("empfaenger@irgendwo.xyz", "Ihre Bestellung", $message);




???
 
hi,

erstmal vielen Dank für deine hilfe. Ja so die richtung brauchte ich.

Hab es mittlerweile so gelöst.......

$message1="bla bla bla ";
dann lass ich das hier includen
CODE // Hilfsabfragen zum generieren von Nachricht 2
$art_nummer = mysql_query("SELECT `a_nummer` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$art_bezeichnung = mysql_query("SELECT `a_bezeichnung` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$art_menge = mysql_query("SELECT `a_menge` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$art_groesse = mysql_query("SELECT `a_groesse` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$art_farbe = mysql_query("SELECT `a_farbe` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$art_preis = mysql_query("SELECT `a_preis` FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'");
$x=mysql_num_rows($art_nummer);
echo "Sie haben $x Artikel bestellt.<br><br>";

for($x2=0;$x2<$x;$x2++)
{
$a_nummer=mysql_result($art_nummer,$x2);
$Spalte1= $a_nummer."<br>".$Spalte1;
$a_bezeichnung=mysql_result($art_bezeichnung,$x2);
$Spalte2= $a_bezeichnung."<br>".$Spalte2;
$a_menge=mysql_result($art_menge,$x2);
$Spalte3= $a_menge."<br>".$Spalte3;
$a_groesse=mysql_result($art_groesse,$x2);
$Spalte4= $a_groesse."<br>".$Spalte4;
$a_farbe=mysql_result($art_farbe,$x2);
$Spalte5= $a_farbe."<br>".$Spalte5;
$a_preis=mysql_result($art_preis,$x2);
$Spalte6= $a_preis."<br>".$Spalte6;

}

dann setzt ich in
$message2=" $Spalte1 bis $Spalte6"
$message3=" Tschüss";


$Nachricht=$message1.$message2.$message3;



und so funktioniert das auch.

Wenn es natürlich ne feiner lösung gibt immer her damit.


Mfg
Swen
 
QUOTE
Wenn es natürlich ne feiner lösung gibt immer her damit.



Kommt drauf an... ich verstehe z.b. nicht ganz, warum du für jedes Feld eine einzelne Abfrage machst.
Du kannst doch auch mit:
SELECT a_nummer,a_bezeichnung,a_menge,a_groesse,a_farbe,a_preis FROM `tbl_warenkorb` WHERE `SESSID` = '$session_id2'
gleich alle Felder ausgeben lassen, die Du benötigst.

Naja... es muss nicht immer 'schön' sein... Hauptsache es ist sicher und fehlerfrei.

Apropos sicher: Variablen in SQL-Queries immer mit addslashes($foo) escapen oder darauf achten das magic_quotes in der php config aktiviert ist.
 
Hallo!

Da wir gerade bei der Funktion mail() sind:
In der Anwendung, in der ich die Funktion benutze, werden die E-Mails zu gmx-Adressen nicht gesendet, bzw. kommen da nicht an. GMX blockt diese also schon von vornerein (landet auch nicht im Spam-Verdachtordner).

Kann man dem Abhilfe verschaffen, ohne dass man die Klasse PHPMailer einbezieht? (<- wurde woanders schon als Tipp gegeben)
Ich möchte es eigentlich bei der einfachen mail() - Funktion belassen.

Danke für Tipps!
 
@Franziska: Woher soll der Mailserver von GMX denn wissen ob eine Mail mit PHP, ASP, mail() oder sonst für einer Funktion verschickt wurde? Hast Du zufällig noch eine URL zu dieser Story?
Fehler auf deiner Seite kannst Du sicherlich ausschliessen?
Vielleicht hilft das:
mail mit Envelope-From: ... bei domainfactory.de gibt's auch ein paar interessante Threads dazu.
 
QUOTE (franzi @ Mi 25.1.2006, 22:46)[...] Da wir gerade bei der Funktion mail() sind:
In der Anwendung, in der ich die Funktion benutze, werden die E-Mails zu gmx-Adressen nicht gesendet, bzw. kommen da nicht an. GMX blockt diese also schon von vornerein (landet auch nicht im Spam-Verdachtordner). [...]

Nun, im Grund werden E-Mails gefiltert, wenn diese nicht RFC Komform sind. Das heißt der entsprechende Entwickler ist selber dafür verantwortlich, dass die entsprechenden Standards eingehalten werden. [1]
Eine Ausnahme gibt es jedoch, wenn der E-Mail-Server vom ISP sich nicht komform verhält, werden die Mails meistens auch dann gefiltert, wenn die E-Mail an sich komform aufgebaut ist.



MfG Sascha Ahlers

[1] RFC 2822 → Internet Message Format
 
So sieht es aus:
CODE

$betreff = "Es ist ein neuer Wunsch eingegangen.";
$message = 'Ein Kunde stellte '.$_POST["datetime"].' folgende Anfrage des Typs <b>'.$_POST["type"].'</b>:
<br /><br />
<b>Titel:</b> '.$_POST["title"].' <br />
<b>Beschreibung:</b> '.$description.'<br /><br />
Hier gelangen Sie zur Anfrage: <a href="http://testurl.de/index.php?site=show_request&id='.$row["id"].'">'.$_POST["title"].'</a>';

$message = wordwrap($message, 70);

// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// zusätzliche Header
$header .= 'To: someone <someone@gmx.de>' . "\r\n";
$header .= 'From: me <test@test-url.de>' . "\r\n";
$header .= 'Return-Path: <test@test-url.de>' . "\r\n";

// verschicke die E-Mail
mail('someone@gmx.de', $betreff, $message, $header);


Ist dies nicht konform aufgebaut?

Nachtrag: Es sind natürlich echte E-Mails und URLs eingetragen.
 
Hi Swen

Die saubere Lösung ist, wenn Du die Mailbestätigung gleich komplett in das Mail kopieren willst.


CODE ob_start(); // start output buffer
include("Mailbestätigung"); // füllen puffer
$nachricht .= ob_get_contents(); // lesen puffer
ob_end_clean(); // löschen puffer

// verschicke die E-Mail
mail('$user_mail', $betreff, $nachricht, $header);


Gruss René
 
QUOTE (Franziska @ Do 26.1.2006, 11:25)[...] Ist dies nicht konform aufgebaut? [...]

Sieht recht gut aus, aber durch einen SPAM-Filter wird die E-Mail wohl nicht unbedingt kommen.

Zum Einen weil es schon mal eine html-formatiere E-Mail ist, dadurch sammelt diese schon mal pauschal einige Punkte. Die wordwarp-Funktion würde ich auslassen, ein E-Mail-Programm bricht die Zeilen selber für sich um. Es verbraucht nur Preformance.
Den hier genannten Betreff würde ich etwas ändern, für den gibt es vermutlich auch Punkte.

Eigentlich müsste ein richtiger Date: Header noch angegeben werden. Postfix als MTA fügt diesen wohl ansonsten selber ein, doch ob es auch jeder andere MTA macht, kann ich nicht sagen. Auch eine Message-ID wird empfohlen, die wird aber für gewöhnlich vom MTA eingefügt, wenn keine vorhanden ist.

Auch würde ich sagen, kann der letzte Zeilenumbruch mittels \r\n im Header verschwinden, das erledigt PHP für einen.

Zudem gibt es noch eine Vielzahl anderer Faktoren, auf die ein SPAM-Filter achtet, so bräuchte man auch schon die richtigen Daten, damit man sowas überhaupt beurteilen kann. Oder den kompletten Kopf der als SPAM eingestuften E-Mail.




QUOTE (z-web @ Do 26.1.2006, 12:04)[...] Die saubere Lösung ist, wenn Du die Mailbestätigung gleich komplett in das Mail kopieren willst. [...]

Die Lösung würde ich nicht unbedingt als sauber betrachten, da gibt es durchaus bessere Lösungen. Zum Beispiel indem man die Datei einfach einliest [1], statt diese zu includen und über den Ausgabepuffer in die Variable zu schreiben.
Diese Methode öffnet ggf. nur wieder ein paar Sicherheitlücken mehr.



MfG Sascha Ahlers

[1] string file_get_contents ( string filename [, int use_include_path [, resource context]] )
 
Hallo Sascha,
danke, dass du dich meinem Problem widmest.

Aber ich habe doch oben erwähnt, dass diese Mail bei gmx (eigene Adresse funktionierte) gar nicht erst ankommt, auch nicht im Spamverdachtsordner. Sie wird scheinbar von vornerein herausgefiltert.
 
QUOTE (Franziska @ Do 26.1.2006, 13:23)[...]
Aber ich habe doch oben erwähnt, dass diese Mail bei gmx (eigene Adresse funktionierte) gar nicht erst ankommt, auch nicht im Spamverdachtsordner. Sie wird scheinbar von vornerein herausgefiltert.

Das habe ich wohl etwas übersehen..
Nun, dann können es noch vier [1] Sachen sein:
  • die E-Mail ist nicht RFC-Komform,
  • der sendende E-Mail-Server ist nicht RFC Komform,
  • der sendende E-Mail-Server ist auf einer Blacklist
  • oder die E-Mail wird schon so hoch als SPAM eingeordnet, dass diese gleich gefiltert wird.
So Funktioniert auch mein E-Mail-Server, ich bekomme als Postmaster dann immer solche E-Mails von meinen SPAM-Filter, wenn eine Nachrichtig sofort isoliert wird:



CODE Unerwünschte Massen-Mail Von:
danacorrea_51@pn.itnet.it
Betreff(Subject): Cialis Soft Tabs - Impress her

Der 'Received:' Spur zufolge, stammt diese Nachricht von:
63.130.49.60

Die Nachricht WIRD NICHT GESENDET an:
<***@***>:
550 5.7.1 Message content rejected, UBE, id=32578-05

Die Nachricht wurde isoliert unter:
/***/spam-***.gz

SpamAssassin Bericht:
Spam detection software, running on the system "***", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
the administrator of that system for details.

Content preview: Hi! We have a new product that we offer to you,
C_I_A_L_I_S soft tabs, Cialis Soft Tabs is the new impotence treatment
drug that everyone is talking about. Soft Tabs acts up to 36 hours,
compare this to only two or three hours of Viagra action! The active
ingredient is Tadalafil, same as in brand Cialis. [...]

Content analysis details: (16.7 points, 1.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
1.9 SUBJECT_DRUG_GAP_C Subject contains a gappy version of 'cialis'
0.5 FROM_ENDS_IN_NUMS From: ends in numbers
0.1 RCVD_IN_SORBS_DUL RBL: SORBS: sent directly from dynamic IP address
[218.18.148.208 listed in dnsbl.sorbs.net]
2.8 RCVD_IN_DSBL RBL: Received via a relay in list.dsbl.org
[<http://dsbl.org/listing?218.18.148.208>]
1.0 RCVD_IN_NJABL_PROXY RBL: NJABL: sender is an open proxy
[218.18.148.208 listed in combined.njabl.org]
1.7 RCVD_IN_NJABL_DUL RBL: NJABL: dialup sender did non-local SMTP
[218.18.148.208 listed in combined.njabl.org]
1.6 RCVD_IN_SORBS_SMTP RBL: SORBS: sender is open SMTP relay
[218.18.148.208 listed in dnsbl.sorbs.net]
0.6 URIBL_SBL Contains an URL listed in the SBL blocklist
[URIs: cializ1.net]
2.0 URIBL_AB_SURBL Contains an URL listed in the AB SURBL blocklist
[URIs: cializ1.net]
0.5 URIBL_WS_SURBL Contains an URL listed in the WS SURBL blocklist
[URIs: cializ1.net]
3.9 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist
[URIs: cializ1.net]
0.0 DRUGS_ERECTILE Refers to an erectile drug

------------------------- BEGIN HEADERS -----------------------------
Return-Path: <danacorrea_51@pn.itnet.it>
Received: from saunalahti.fi (unknown [218.18.148.208])
by *** (***) with SMTP id B2EF625C052
for <***@***>; Thu, 26 Jan 2006 12:41:14 +0100 (CET)
Received: from 63.130.49.60 by smtp.pn.itnet.it;
Thu, 26 Jan 2006 11:41:02 +0000
Message-ID: <0a6a01c6226d$9b598761$bc89c859@saunalahti.fi>
From: "Dana Correa" <danacorrea_51@pn.itnet.it>
To: ***@***
Subject: Cialis Soft Tabs - Impress her
Date: Thu, 26 Jan 2006 09:40:31 -0200
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
-------------------------- END HEADERS ------------------------------


Wir können das gerne mal an meinen E-Mail-Server testen. Meine ICQ-Nummer findest Du auf meiner sehr kleinen Homepage.



MfG Sascha Ahlers

[1] Nun, unter Umständen auch fünf, wenn die E-Mail bei einen Server in eine Endlos-Schleife gerät.
 
Zurück
Oben