Generierte Email - Wie absender bestimmen ?

phpMars

Erfahrenes Mitglied
Hallo Leutz,

ich habe wiedermal ein Problem. Nachdem ich es geschafft habe die Checkboxen zum Laufen zu bringen schleicht sich ein neuer Fehler ein.

Mit dem folgenden Code sende ich meine Email ab. Und dabei habe ich den Absender der Email über eine Variable festgelegt. Den Wert bekommt sie durch ein Kontaktformular, welches vorher ausgefüllt werden muss.
Die Email wird auch verschickt, aber nicht mit der eingetragenen Email sondern als Absender wird eine vom Server konfigurierte Email eingetragen. In meinen Testversuchen war es immer die info@.......de auf der das Script lag.

Im Prinzip stört es mich nicht weiter wenn nicht dann immer die Fehler beim Antworten passieren. Unwissende klicken einfach auf Antworten und sehen nicht das sie die Email an ihre eigene Adresse schicken.

Habe ich ein Fehler in meinem Code ?

PHP:
else {

	if($sent) {
	
		//mailcode
		$to = 'meine@email.de';
		$from = ' . $HTTP_POST_VARS[email] . ';
		$subject = 'Kontaktformular - www.server.de';
		$mailtext = 'Nachricht von <br><br>Firma: ' . $HTTP_POST_VARS[company] . '<br>' . $HTTP_POST_VARS[gender] . ' ' . $HTTP_POST_VARS[name] . ' ' . $HTTP_POST_VARS[surname] . '<br>' .  $HTTP_POST_VARS[street] . '<br>' . $HTTP_POST_VARS[zipcode] . ' ' . $HTTP_POST_VARS[city] . '<br>' . $HTTP_POST_VARS[country] . '<br><br>' . 'Tel: ' . $HTTP_POST_VARS[tel] . '<br>Mobil: ' . $HTTP_POST_VARS[mobile] . '<br>E-Mail: ' . $HTTP_POST_VARS[email] . '<br>Fax: ' . $HTTP_POST_VARS[fax] . '
		<br>Der Kunde wuenscht Infomaterial ueber:
		Etikettier- und Sondermaschinen: ' . $HTTP_POST_VARS[et_son_info] . '
		Thermo(transfer)drucker: ' . $HTTP_POST_VARS[thermo_info] . '
		Etikettengestaltungssoftware: ' . $HTTP_POST_VARS[soft_info] . '
		Haftetiketten und Thermotransferfolie: ' . $HTTP_POST_VARS[haft_info] . '
		<br>Nachricht:<br>' . $HTTP_POST_VARS[message];
				 
		$header = 'Content-type: text/html';
		
		//send mail and display succes- or error-message
		if(@mail($to, $subject, $mailtext, $header)) {
		
			?>
			
			Vielen Dank f&uuml;r Ihre Nachricht.<br><br>
			Wir werden umgehend Kontakt mit Ihnen aufnehemen. 
			
			<?php
		
		}
		
		//mail error
		else {
		
			?>
		
			Ihre Nachricht konnte aus technischen Gr&uuml;den leider nicht versendet werden.<br><br>
			Sie k&ouml;nnen uns per E-Mail unter <a href="mailto:info@server.de">info@server.de</a> erreichen.
		
			<?php
		
		}
		
	}
 
Das Header-Feld „From“ deklariert den Absender, beispielsweise From: John Doe <user@example.net>.
 
3 Dinge hierzu:
PHP:
$HTTP_POST_VARS[email]
1. Es sollte besser $_POST anstelle von $HTTP_POST_VARS genutzt werden, da es bei aktuellen PHP-Versionen durchaus sein kann, dass die langen Arraynamen nicht verfuegbar sind. Diese werden nur noch aus Gruenden der Abwaertskompatibilitaet mitgeschleppt, koennen aber in der php.ini deaktiviert werden.
2. Strings sollten als solche gekennzeichnet werden, email ist bei Dir eine Konstante.
PHP ist aber so freundlich die unbekannte Konstante email als String zu handhaben. Grundsaetzlich solltest Du aber '' oder "" nutzen um email als String zu kennzeichnen.
3. Was genau ist das? Steht das die Adresse des Absenders oder Empfaengers drin?
Da es sich um Daten aus einer Form handelt denke ich, dass da wohl der Empfaenger drinsteht. Du setzt diesen Wert aber im Header bei From, dort muss aber die Adresse des Absenders hin.
 
Reptilers Verbesserungsvorschläge auf deinem Skript angewandt, könnte etwa so aussehen:
PHP:
<?php
	…

	if( $sent ) {

		// mailcode
		$to = 'meine@email.de';
		$from = $_POST['email'];
		$subject = 'Kontaktformular – www.server.de';
		$mailtext = 'Nachricht von <br><br>Firma: ' . $_POST['company'] . '<br>' . $_POST['gender'] . ' ' . $_POST['name'] . ' ' . $_POST['surname'] . '<br>' .  $_POST['street'] . '<br>' . $_POST['zipcode'] . ' ' . $_POST['city'] . '<br>' . $_POST['country'] . '<br><br>' . 'Tel: ' . $_POST['tel'] . '<br>Mobil: ' . $_POST['mobile'] . '<br>E-Mail: ' . $_POST['email'] . '<br>Fax: ' . $_POST['fax'] . '
        <br>Der Kunde wuenscht Infomaterial ueber:
        Etikettier- und Sondermaschinen: ' . $_POST['et_son_info'] . '
        Thermo(transfer)drucker: ' . $_POST['thermo_info'] . '
        Etikettengestaltungssoftware: ' . $_POST['soft_info'] . '
        Haftetiketten und Thermotransferfolie: ' . $_POST['haft_info'] . '
        <br>Nachricht:<br>' . $_POST['message'];

		$header = 'Content-type: text/html';

		// send mail and display succes- or error-message
		if( @mail($to, $subject, $mailtext, $header) ) {

?>

		Vielen Dank f&uuml;r Ihre Nachricht.<br><br>
		Wir werden umgehend Kontakt mit Ihnen aufnehemen.
            
<?php

	} else {

		// mail error


?>

		Ihre Nachricht konnte aus technischen Gr&uuml;den leider nicht versendet werden.<br><br>
		Sie k&ouml;nnen uns per E-Mail unter <a href="mailto:info@server.de">info@server.de</a> erreichen.
        
<?php

	}

	…

?>
 
hab das mal übernommen, danke... hat aber leider den fehler nicht behoben...

wie folgt sieht damit eine email aus:

Von: info@fahrschule-lischke.de
An: stephan-liebig@gmx.de
Kopie:
Betreff: Kontaktformular – http://www.server.de
Datum: Sat, 20 Aug 2005 11:29:14 +0200




Nachricht von

Firma: Stylish-Pixel
Herr Liebig Stephan
Eichenstraße 28
64743 Beerfelden
Deutschland

Tel: 06068912738
Mobil: 01704001479
E-Mail: stephan@oberzent.de
Fax: 06068478141

Der Kunde wuenscht Infomaterial ueber:
Etikettier- und Sondermaschinen:
Thermo(transfer)drucker: JA
Etikettengestaltungssoftware: JA
Haftetiketten und Thermotransferfolie: JA

Nachricht:
test do


hier sollte normal bei "Von:" stephan@oberzent.de stehen... aber es erscheint die email vom server..
 
:confused:

Was dann wie aussehen sollte ?
Ich bin noch nicht so der profi und „From“-Header-Feld sagt mir grad nichts.

Was meinst du damit ?
 
Als vierter Parameter der mail()-Funktion können dieser zusätzliche Header-Felder übergeben werden. Darunter sollte auch das „From“-Header-Feld sein, das den Absender bezeichnet.
PHP:
<?php

	…

	$headers = array(
		'MIME-Version: 1.0',
		'From: stephan@oberzent.de',
		'Content-type: text/html'
	);
	if( @mail($to, $subject, $mailtext, join(chr(0x0D).chr(0x0A), $headers)) ) {

	…

	}

	…

?>
 
Zurück