mail-Funktion

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

mail-Funktion

Beitrag von zatec » Mi 27. Jul 2011, 12:29

Hallo,

bei mir will in Contenido die PHP-mail-Funktion einfach nicht funktionieren, d.h. die E-Mail kommt nicht an.

Code: Alles auswählen

<?php
mail(Empfänger, Betreff, Nachricht);
?>
Diesen Code habe ich mal im Template eingebaut (Empfänger usw. natürlich angepasst) und die Seite aufgerufen. Aber die Mail will einfach nicht ankommen.

Bei meinen anderen Webseiten, die nicht über Contenido laufen, klappt das immer wunderbar.

Hat Contenido ein Problem mit dieser Funktion? Wenn ja, wie krieg ich sie trotzdem zum laufen? Welche Gründe kann es sonst haben?

Danke im Voraus.

MfG

BagHira
Beiträge: 486
Registriert: Do 23. Feb 2006, 19:42
Wohnort: Tirschenreuth / Oberpfalz / Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von BagHira » Mi 27. Jul 2011, 18:21

Servus zatec,

Contenido hat eine eigene Mailer-Klasse (class.phpmailer.php).
Such einmal danach, oder schau dir mal die Beispielmodule bzw. Module (Gästebücher, Kontakt etc.) hier im Forum an.
Gruß Holger

Träumer haben vielleicht keinen Plan, aber Realisten haben keine Vision.

Handgewickelte Glasperlen Facebook Google+

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Do 28. Jul 2011, 09:14

Danke für die Antwort.

Ich würde aber gerne mein eigenes Formular verwenden. Warum funktioniert es mit der mail-Funktion nicht?

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von Oldperl » Do 28. Jul 2011, 09:26

Hallo zatec,

CONTENIDO verändert nichts an der PHP mail()-Funktion. Mir stellt sich hier eher die Frage wie und wo du diese eingebunden hast. Da wäre es sicherlich hilfreich wenn du uns ein paar mehr Infos gibst, auch der Quelltext deines Formulars/ deiner PHP-Datei wäre nicht schlecht.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Do 28. Jul 2011, 11:35

Hallo,

ich habe eine Kontaktseite, die das Anfrageformular enthält. Dieses Formular führt zu einer Antwortseite, die ein eigenes Template hat. In diesem Template ist im Content-Bereich folgender Code:

Code: Alles auswählen

<?PHP
	// 1. Sicherheits-Stufe war der User vorher auf der kontakt.php?
	if(!basename($_SERVER['PHP_SELF'])=="front_content.php?idcat=90"):
		$Fehler=1;
	endif;
	
	// 2. Sicherheits-Stufe Capture Code korrekt?

	$Capture[1]="1kxcb";
	$Capture[2]="2bnw8";
	$Capture[3]="37hjk";
	$Capture[4]="4h7mx";
	$Capture[5]="5tmoi";
	
	srand();
	$CaptureNr=rand(1,5);

	
	if($Capture[$_POST['CaptureID']]!=$_POST['EingegebenerCode']):
		$Fehler=1;
	endif;
	
	// 3. Sicherheits-Stufe unerlaubte Zeichen entfernen
	
        function formvollendet($FormWert)
	{
		// Boesen Code entfernen
		$FormWert=stripslashes($FormWert);
		$FormWert=preg_replace( "/[^a-z0-9 äüöß!?:;,.\/_\-=+@#$&\*\(\)]/im", "", $FormWert);
		$FormWert=preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $FormWert);
		$FormWert=addslashes(htmlspecialchars($FormWert));
		
		return $FormWert;
	}

	$Name=formvollendet($_POST["Name"]);
	$Strasse=formvollendet($_POST["Strasse"]);
	$PLZ=formvollendet($_POST["PLZ"]);
	$Ort=formvollendet($_POST["Ort"]);
	$EMail=formvollendet($_POST["EMail"]);
	$Telefon=formvollendet($_POST["Telefon"]);
	$Bemerkung=formvollendet($_POST["Bemerkung"]);
	
	// Alle Pflichfeldergefüllt?
	if (!$_POST["Name"] or !$_POST["EMail"] or !$_POST["Bemerkung"]):
		$Felderleer=1;
		$Fehler=1;
	endif;

	// Wenn alles OK, dann Mail versenden
	if ($Fehler!=1 AND $Felderleer!=1):
	
	$Empfaenger="blabla@bla.de";
	$Betreff="bla bla | hier: Nachricht über Ihre Internetseite";

	mail($Empfaenger,$Betreff,
"Über das Kontaktformular wurde folgende Anfrage gestellt:
---------------------------------------------------------------------------

Name: 	$Name
Straße: $Strasse
PLZ/Ort: $PLZ $Ort

E-Mail: $EMail
Telefon: $Telefon

Anfrage:
$Bemerkung

---------------------------------------------------------------------------
	
","From: \"$Name\" <$EMail>");

	endif;
?>	


<?PHP 
	// Rueckmeldung:
	if ($Fehler!=1 AND $Felderleer!=1):
?>
<p>
Vielen Dank für Ihr Interesse an unserem Hause. Wir werden uns ggf. umgehend bei Ihnen melden.
<br><br>
Mit freundlichen Grüßen<br>
Blabla
<br><br>
&raquo; <a href="front_content.php">zur Startseite</a><br>
</p>

<?PHP else:?>

	<p><span class="fehler">Leider sind Fehler aufgetreten...</span><br><br>
	... und Ihre Anfrage konnte nicht übermittelt werden.</p>
	
	<p>Bitte achten Sie auf die korrekte Eingabe des Codes bei der Spamschutz/Sicherheitsabfrage.</p>

<?PHP if($Felderleer==1):?>
	
	<p>Bitte beachten Sie, dass <b>alle Felder mit einem »<span class="star">*</span>«</b> ausgefüllt sein müssen.</p>
	
<?PHP endif;?>
	<p>&raquo; <a href="javascript:history.back()" title="zurück zum Kontaktformular">zurück zum Kontaktformular</a><br></p>
<?PHP endif;?></p>

Hier ist wichtig zu erwähnen, dass das Formular an sich funktioniert. Das heißt z.B., dass der Sicherheitscode funktioniert und die Pflichtfelder korrekt abgefragt werden. Wenn man also nicht alle Felder ausfülllt, kommt die Meldung, dass man alle Felder ausfüllen muss. Wenn man alle Felder ausgefüllt hat und der Sicherheitscode stimmt, kommt der "Vielen Dank ..."-Satz. Allerdings wird die E-Mail irgendwie nicht versendet, obwohl ich die richtige eingegeben habe. :(

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von Oldperl » Do 28. Jul 2011, 11:52

Hallo,

stell mal das error_reporting um :arrow: http://php.net/manual/de/function.error-reporting.php und lass dir alle Fehlermeldungen anzeigen.
Auch solltest du die Eigenheiten von mail() beachten, vor Allem ob es unter Nix oder Win läuft :arrow: http://php.net/manual/de/function.mail.php (Punkt: Anmerkungen)

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Do 28. Jul 2011, 12:16

Leider bin ich nicht so gut in PHP...

Was genau soll ich am error_reporting umstellen?

Soll ich einfach

Code: Alles auswählen

<?php
error_reporting();
?>
schreiben? :?:

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von Oldperl » Do 28. Jul 2011, 12:29

Hallo,
zatec hat geschrieben:Leider bin ich nicht so gut in PHP...
Kein Problem. Du mußt auch nur Lesen können um den entsprechenden Eintrag unter Beispiele :arrow: http://php.net/manual/de/function.error-reporting.php zu finden.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Do 28. Jul 2011, 16:51

Ich habe es mal mit error_reporting(E_ALL); ausprobiert, allerdings wird kein einziger Fehler angezeigt.

BagHira
Beiträge: 486
Registriert: Do 23. Feb 2006, 19:42
Wohnort: Tirschenreuth / Oberpfalz / Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von BagHira » Fr 29. Jul 2011, 08:04

Servus zatec,

setz mal am Anfang des Scripts folgendes ein:

Code: Alles auswählen

$Felderleer=0;
$Fehler=0;
Du überprüfst ja auf einen Wert in einer Variable die es aber nicht gibt.

Ein anderer Weg ist der folgende:
Du setzt isset() http://www.php.net/manual/de/function.isset.php ein um das Vorhandensein der Variablen zu überprüfen.
Z.B. so:

Code: Alles auswählen

if (isset($Fehler,$Felderleer)):
Am Ende des Scripts würde ich dann aber ein unset() http://www.php.net/manual/de/function.unset.php zum Löschen der Variablen einbauen. Den wenn es einen Fehler beim Ausfüllen des Formulars gibt wird dir isset() immer True liefern. D.h. du kommst nicht mehr aus der Fehlerüberprüfung raus.
etwa so:

Code: Alles auswählen

<?PHP endif;
unset($Fehler,$Felderleer);?>
   <p>&raquo; <a href="javascript:history.back()" title="zurück zum Kontaktformular">zurück zum Kontaktformular</a><br></p>
<?PHP endif;?></p>
Nu is sein Post wech :motz:
Gruß Holger

Träumer haben vielleicht keinen Plan, aber Realisten haben keine Vision.

Handgewickelte Glasperlen Facebook Google+

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Fr 29. Jul 2011, 08:10

Danke für die Mühe...

allerdings klappt es noch immer nicht, also scheint es nichts damit zu tun zu haben, dass die Variablen undefiniert sind. Bin zwar PHP-Anfänger, aber irgendwie finde ich das auch logisch, da die Abfragen ja immerhin funktionieren.

Wenn ich z.B. aus

Code: Alles auswählen

// Wenn alles OK, dann Mail versenden
   if ($Fehler!=1 AND $Felderleer!=1):
   
   $Empfaenger="blabla@bla.de";
   $Betreff="bla bla | hier: Nachricht über Ihre Internetseite";

   mail($Empfaenger,$Betreff,
"Über das Kontaktformular wurde folgende Anfrage gestellt:
ein

Code: Alles auswählen

// Wenn alles OK, dann Mail versenden
   if ($Fehler!=1 AND $Felderleer!=1):

   echo "Hallo Holger!";
   
   $Empfaenger="blabla@bla.de";
   $Betreff="bla bla | hier: Nachricht über Ihre Internetseite";

   mail($Empfaenger,$Betreff,
"Über das Kontaktformular wurde folgende Anfrage gestellt:
mache, wird das "Hallo Holger" ausgegeben ;) Das echo befindet sich in der gleichen Abfrage wie die Mail-Funktion, weshalb diese doch eigentlich funktionieren müsste...

BagHira
Beiträge: 486
Registriert: Do 23. Feb 2006, 19:42
Wohnort: Tirschenreuth / Oberpfalz / Bayern
Kontaktdaten:

Re: mail-Funktion

Beitrag von BagHira » Fr 29. Jul 2011, 08:33

Servus zatec,

dann sollten die Warnings ja weg sein.

Befasse dich einmal mit der mail()- Funktion, eine recht einfache Erklärung findest du hier: http://www.php-space.info/php/space/e-m ... it-php.php
Gruß Holger

Träumer haben vielleicht keinen Plan, aber Realisten haben keine Vision.

Handgewickelte Glasperlen Facebook Google+

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Fr 29. Jul 2011, 08:40

Aber was ist bei mir an der mail-Funktion falsch? Stimmt doch alles so weit...

Ich habe dieses Skript bis jetzt bei allen Auftritten verwendet, und es hat IMMER funktioniert... Nur mit COntenido scheint es irgendwie Probleme zu geben...

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: mail-Funktion

Beitrag von Spider IT » Sa 30. Jul 2011, 15:18

Mal eine ganz andere Frage: An welche Adresse versuchst du zu mailen, ist die in der Domain der Webseite?
Die meisten Mailserver akzeptieren keine Mails mehr von Fremddomains um SPAM zu verhindern.
Mails an andere Domains musst du also per smtp versenden und dich dafür einloggen, nur dann geht es.
Dies wird von der CONTENIDO Mailer-Klasse unterstützt.

Gruß
René

zatec
Beiträge: 31
Registriert: Di 26. Jul 2011, 10:32
Kontaktdaten:

Re: mail-Funktion

Beitrag von zatec » Mo 1. Aug 2011, 08:34

Danke erstmal für deine Mühe, Rene ;)

Ich habe es schon mit mehreren E-Mail-Adressen ausprobiert, und keine von denen hat etwas mit der Domain zu tun, auf der Contenido läuft. Das was du über SMTP und Einloggen schreibst, verstehe ich nicht ganz, aber das sollte sich demnach ja erledigt haben oder?

Gesperrt