PHP PHP Mailfunktion

MetalForLive

Admiral
Registriert
Sep. 2011
Beiträge
8.113
Hi, ich mal wieder :freaky:

Ich wollte gerade mal ne PHP Mailfunktion testen aber komme einfach nicht weiter.
Ich habe mir ein fertiges Template von kontaktformular.com herunter geladen und versuche das nun zu implementieren.
Allerdings habe ich Probleme mit dem Senden der emails, ich vermute es liegt an PHP selbst, da ich 3 verschiedene Formulare ausprobiert habe und es bei allen zu dem Problem kommt.
Ich habe PHP auch schon deinstalliert und neu installiert.

Wenn ich ne Mail senden will, läd das Formular einfach neu.

Hier die PHP Info
Hier das Formular

in der FAQ steht folgendes:

Ich erhalte über das Kontaktformular keine E-Mail? (auch nicht über die Datei test.php)
Mit Ausführung der Datei test.php (im Download Paket enthalten) wird überprüft, ob die PHP-Funktion "mail()" auf Ihrem Server aktiviert ist. Somit wird sichergestellt, dass E-Mails über das Kontaktformular empfangen werden können. Sollten Sie weder eine E-Mail über die Datei test.php, noch über die Datei kontakt.php empfangen, so können hierfür fünf Gründe in Frage kommen.

1. Überprüfen Sie, ob Sie in der Datei config.php eine korrekte E-Mail Adresse eingetragen haben.

2. Überprüfen Sie, ob die E-Mail in Ihrem E-Mail Programm (z.B. Outlook) als Spam deklariert wurde. Info: Bei der Test-Mail (test.php) lautet der Absender "no-reply@kontaktformular.com". Bei bestimmten Spamfilter Einstellungen wird das Wort "no-reply" automatisch als Spam deklariert!

3. Überprüfen Sie, ob ein externen Spamfilter (innerhalb Ihrer Servereinstellungen) aktiv ist. Sollten Sie sich dbzgl. nicht sicher sein, konsultieren Sie bitte Ihren Webhoster.

4. Vergewissern Sie sich, ob die PHP Funktion "mail" tatächlich auf Ihrem Server installiert wurde, indem Sie Ihren Webhoster dbzgl. konsultieren.

5. Sofern Sie ein Kunde bei Hosteurope.de sind, beachten Sie bitte diese Information.

Ich denke mal bei Punkt 4 hakts, aber wie konfiguriere ich das richtig ?

Muss ich ein Emailserver installiert haben ?
Denn ich muss ja in der Konfig auch nur eine Mail Adresse eingeben, um ne Mail damit zu senden, müsste ich doch eigentlich irgendwo auch das Passwort, Ausgangsserver/Port etc. Konfigurieren oder ?
Mir leuchtet das ehrlich gesagt auch nicht ganz ein wie das funktionieren soll.
 
was benutzt du denn für ein server? mail nutzt doch ein einfach sendmail..
 
Windows Server 2012R2 der aus meiner Signatur.

Heißt ich muss z.B. Outlook installieren ?
 
windows server :D kp wie man sowas unter windows macht.. wieso betreibst du einen windows webserver wenn du kein asp verwendest?
 
Ist mein Homeserver, und somit mein Allrounder für alles :D
 
Moment... HOME-Server? So wie "angeschlossen an einen privaten Anschluss"?
Das KANN nichts werden, zumindest nicht mit mail(). Jeder nennenswerte Mail-Dienstleister blockt Mails, die IPs aus dem Privat-Bereich kommen, rigoros. Und selbst wenn das nicht der Fall wäre, hätte dein Setup ja wohl sicherlich keine korrekte RDNS-Einstellungen, oder? DKIM wirst du auch wohl kaum haben. Mit anderen Worten: Du wirst von jedem Spamfilter so hart geblockt, dass du nicht einmal in den Junk-Ordner verschoben wirst, sondern direkt im Müll landest... wenn du überhaupt durch das Greylisting durch kommst, was ich bei einem unqualifiziert konfigurierten Home-Server auch arg bezweifle.

Aber lass den Kopf nicht hängen, auch dafür gibt es Lösungen: Verwende eine PHP-Mailer - Klasse, die per SMTP versendet und nutze dann einen anständigen Mail-Dienstleister als SMTP-Server dafür. Das geht auch aus dem Privat-IP-Bereich ohne Konfiguration.
 
Also mein Ziel ist eigentlich nur auf ner Website n Kontaktformular zu haben, bei dem Leute dann ne mail and info@domain.de schicken können.
Eigentlich will ich garkeine Mails weg schicken, sondern über das Kontakformular nur Empfangen.

Find ich halt schöner als so ein Mailto link.
Aber wenns wieder so umständlich ist das umzusetzen, lasse ich es eben.
 
mails du du empfangen willst müssten ja abgeschickt werden? ;)
kannst dir ja swiftmail oder phpmailer angucken
 
Ach das ist mir zu viel Aufwand.
Wenn jemand was will soll er einfach direkt an die Emailadresse schreiben
 
Habs mir doch anders überlegt, will es mit phpmailer probieren.
Allerdings klappt das momentan nicht.
Hab mir jetzt schon mehrere Tutorials angesehen aber irgendwie will es nicht so.
Sobald ich den senden Button drücke, bekomme ich "Serverfehler in der Anwendung"

An was kann das liegen ?
Hier mal der Code:

Code:
<form id="form1" name="tets" method="post" action="<? PHP_SELF ?>">
<input name="senden" type="submit" value="SENDEN" /> 
</form> 
<?php
	require '/phpmailer/class.phpmailer.php';
	require '/phpmailer/class.smtp.php'; // Optional, wenn du SMTP benutzen möchtest
	require '/phpmailer/language/phpmailer.lang-de.php'; // Optional, wenn du deutsche Fehlermeldungen ausgeben möchtest
	$mail = new PHPMailer;
	$mail->IsSMTP();  // telling the class to use SMTP
	$mail->Host = "smtp.1und1.de"; // SMTP server
	$mail->SMTPDebug  = 2;
	$mail->SMTPAuth = 'true';
	$mail->SMTPSecure = 'tls';
	$mail->Port = '587';
	$mail->Username = 'Username';
	$mail->Password = 'Password';
	$mail->From = 'kontaktformular@domain.de';
	$mail->FromName = 'Kontaktformular';
	$mail->addAddress('info@domain.de');     // Der Name ist dabei optional
	$mail->addReplyTo('info@domain.de', 'Information'); // Antwortadresse festlegen
	$mail->isHTML(true);                                  // Mail als HTML versenden
	$mail->Subject = 'Ein schöner Betreff';
	$mail->Body    = 'Das ist die Nachricht als <code>HTML-Version</code>';
	$mail->AltBody = 'Das ist ohne HTML, es soll wohl da draußen noch Leute geben, die das brauchen';
	if(!$mail->send()) {
		echo 'Mail wurde nicht abgesendet';
		echo 'Fehlermeldung: ' . $mail->ErrorInfo;
	} else {
		echo 'Nachricht wurde abgesendet.';
	}
	 if ($_POST['senden'])
	   {
	   $mail->send();
	}
?>

Natürlich sind Passwort/User und die Mailadressen, hier geändert.
 
Zuletzt bearbeitet:
Und jetzt machst du mal das Error Log deines Mailservers auf und guckst nach, was das für ein Fehler eigentlich ist...

Ist übrigens ziemlicher Unsinn, deinen Code so zu strukturieren. Warum solltest das Script denn den PHP Mailer laden und das Mail-Objekt aufbauen, wenn gar keine Mail verschickt werden soll? Der Kram gehört sich ins Formular-Handling.
 
Ich hab kein Plan von PHP, ich wills jetzt erst mal zum laufen bekommen.
Error log ist nicht, da ich ja per SMTP über smtp.1und1.de verschicken will.

Also ich habe zwei mailadressen bei 1&1 einmal info@domain.de und einmal kontaktformular@domain.de

Ich will am ende, dass wenn jemand über das Kontaktformular was schreibt eine mail von kontaktformular@domain.de mit dem Inhalt aus dem Formular an info@domain.de gesendet wird.

Edit:

Bekomme den gleichen Fehler auch wenn ich meinen privaten Mailaccount (hotmail) angebe.

Edit2:

Bin jetzt n kleines Stück weiter.
Hab noch mal n anderes Script genutzt aber nun sagt er "Authentication credentials invalid" aber die sind richtig, port ist 25 oder 587 ( hab beides getestet) authentication ist auf true und smtpsecure steht auf TLS
Wie von 1&1 vorgeschrieben

Edit:

OH mein Gott, es funktioniert !
Keine Ahnung was ich getan hab, aber es geht.
jetzt muss ich den ganzen Kram nur noch in die Website einpflegen
 
Zuletzt bearbeitet:
Mein Fehler, ich meinte natürlich "Errorlog deines Webservers" (IIS)... denn deine Fehlermeldung kam ja von selbigem.
 
Also ich weiß garnicht was ihr habt, da wird garnicht vom Spamfilter geblockt oder sowas.
Vielleicht habt ihr auch falsch verstanden was ich wollte.

Ich habe 2 Mailadressen bei 1und1, einmal kontakformular@domain.de und einmal info@domain.de.
An die info Adresse kann man sich wenden wenn man ein anliegen hat, diese hab ich auch in meinem Handy hinterlegt.

So wenn man nun über das Kontaktformular was schreibt, wird von der kontaktformular@domain.de Adresse eine mail an die Info Adresse gesendet, mehr ist das nicht.
Dabei wird der Name und die Antwortadresse mit den Werten überschrieben, die im Kontakformular eingegeben werden.
Das funktioniert auch ohne Probleme, somit kann man auch direkt auf Antworten klicken ohne extra eine neue Mail erstellen zu müssen.

Ich schreib hier nochmal meinen Code auf, falls es später Leute gibt die auch ein Problem mit der Einrichtung oder so haben.


Hier meine Form

Code:
<form method="post" action="/email.php">
			<input type="text" name="name" id="name" placeholder="Name" required=" ">
			<input type="text" name="email" id="email" placeholder="Email" required=" ">
			<textarea name="message" id="message" placeholder="Nachricht..." required=" "></textarea>
			<input type="submit" value="Senden">
		</form>

und hier meine email.php

Code:
<meta http-equiv="refresh" content="2; URL=http://meinewebsite.html/">
<?php
	$name = $_REQUEST['name'] ;
	$email = $_REQUEST['email'] ;
	$message = $_REQUEST['message'] ;

	require('/phpmailer/class.phpmailer.php');
	require("/PHPMailer/PHPMailerAutoload.php");
	require '/phpmailer/class.smtp.php';
	require '/phpmailer/language/phpmailer.lang-de.php';

	$mail = new PHPMailer();
	$mail->CharSet = "UTF-8";
	$mail->IsSMTP();

	$mail->Host = "smtp.1und1.de"; 
	$mail->Port = 587;
	$mail->SMTPDebug  = 0;
	$mail->SMTPAuth = true; 
	$mail->SMTPSecure = 'tls';

	$mail->Username = "Username";  // SMTP username
	$mail->Password = "Password"; // SMTP password

	$mail->From = $email;
	$mail->FromName = $name;

	$mail->AddAddress("info@domain.de", "info@domain.de");


	$mail->WordWrap = 50;

	$mail->IsHTML(true);

	$mail->Subject = "Feedback von der Website!";

	$mail->Body    = $message;
	$mail->AltBody = $message;

	if(!$mail->Send())
	{
	   echo "Die Nachricht konnte nicht versendet werden. <p>";
	   echo "Mailer Error: " . $mail->ErrorInfo;
	   exit;
	}

	echo "Die Nachricht wurde erfolgreich versendet";
?>
 
Zuletzt bearbeitet:
Ja, du hast uns nicht verstanden.
Wenn du die PHP-Funktion mail() verwendest, DANN erhält die Mail von Haus aus ein erhöhtes Spam-Rating. Machst du dasselbe dann auch noch von einer Privat-IP aus (die logischerweise keinen Reverse-DNS - Eintrag hat), dann reden wir hier nicht mehr von Spam-Rating, sondern der empfangende Server wird die Mail rundweg verwerfen.

Wenn du hingegen eine Mailer-Klasse (wie eben phpMailer) verwendest, die SMTP anbietet, dann hast du das Problem NICHT.
1.) Du versendest nicht anonym per mail(), sondern per authentifiziertem SMTP => keine erhöhte Spam-Einstufung
2.) Du versendest nicht direkt von deiner Privat-IP aus, sondern du übergibst die Mail an einem externen SMTP-Server (hier: 1&1), dem gegenüber du dich authentifizierst. Dieser Server ist entsprechend konfiguriert, dass er als verlässliche Quelle anerkannt wird.

Also: mail() böse, Versand per externem SMTP gut.
 
Ja ist doch gut, genau das wollte ich ja erreichen.
 
Zurück
Oben