einfaches php. emailformular bei strato

mad dog

mad dog

Aktives Mitglied
Thread Starter
Dabei seit
16.02.2006
Beiträge
161
Reaktionspunkte
3
hallo,
ich benutze ein einfaches php emailformular script welches bei etlichen Hostern funktioniert ausser Strato.
Im Netz hab ich nicht wirklich was gefunden ausser das etliche auch ein Problem mit Emailformularen bei Strato haben.
Hat einer von euch eine Idee ??
Schon mal Danke im Vorraus
Mad

PHP:
<?php


$siteOwnersEmail = 'meine@email.de';


if($_POST) {

   $name = trim(stripslashes($_POST['contactName']));
   $email = trim(stripslashes($_POST['contactEmail']));
   $subject = trim(stripslashes($_POST['contactSubject']));
   $contact_message = trim(stripslashes($_POST['contactMessage']));

   // Check Name
    if (strlen($name) < 2) {
        $error['name'] = "Bitte geben Sie Ihren Namen ein.";
    }
    // Check Email
    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Bitte geben Sie eine gültige E-Mail-Adresse ein.";
    }
    // Check Message
    if (strlen($contact_message) < 15) {
        $error['message'] = "Bitte geben Sie Ihre Nachricht ein. Mindestens 15 Zeichen.";
    }
   // Subject
    if ($subject == '') { $subject = "Contact Form Submission"; }


   // Set Message
   $message .= "Email from: " . $name . "<br />";
   $message .= "Email address: " . $email . "<br />";
   $message .= "Message: <br />";
   $message .= $contact_message;
   $message .= "<br /> ----- <br />Diese E-Mail wurde vom Kontaktformular Ihrer Website gesendet. <br />";

   // Set From: header
   $from =  $name . " <" . $email . ">";

   // Email Headers
    $headers = "From: " . $from . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
     $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";


   if (!$error) {

      ini_set("sendmail_from", $siteOwnersEmail); // for windows server
      $mail = mail($siteOwnersEmail, $subject, $message, $headers);

        if ($mail) { echo "OK"; }
      else { echo "Etwas ist schief gelaufen. Bitte versuchen Sie es erneut."; }
       
    } # end if - no validation error

    else {

        $response = (isset($error['name'])) ? $error['name'] . "<br /> \n" : null;
        $response .= (isset($error['email'])) ? $error['email'] . "<br /> \n" : null;
        $response .= (isset($error['message'])) ? $error['message'] . "<br />" : null;
       
        echo $response;

    } # end if - there was a validation error

}

?>
HTML:
<form action="sendEmail.php" method="post" id="contactForm" name="contactForm">
<fieldset>

<div>
<label for="contactName">Name <span class="required">*</span></label>
<input type="text" value="" size="35" id="contactName" name="contactName">
</div>
<div>
<label for="contactEmail">Email <span class="required">*</span></label>
<input type="text" value="" size="35" id="contactEmail" name="contactEmail">
</div>
<div>
<label for="contactSubject">Betreff</label>
<input type="text" value="" size="35" id="contactSubject" name="contactSubject">
</div>
<div>
<label for="contactMessage">Nachricht <span class="required">*</span></label>
<textarea cols="50" rows="15" id="contactMessage" name="contactMessage"></textarea>
</div>
<div>
<button class="submit">Senden</button>
<span id="image-loader">
<img alt="" src="images/loader.gif">
</span>
</div>
</fieldset>
</form>
 
habe das mal wie folgt geändert funktioniert aber auch nicht. Das Script reagiert überhaupt nicht, es gibt noch nicht mal eine Fehlermeldung.
PHP:
<?php


$mail->IsSMTP(); // telling the class to use SMTP

$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "smtp.strato.de"; // sets the SMTP server

$mail->Username   = "meine@email.de"; // SMTP account username
$mail->Password   = "meinpasswort";        // SMTP account password

$siteOwnersEmail = 'meine@email.de';

if($_POST) {

   $name = trim(stripslashes($_POST['contactName']));
   $email = trim(stripslashes($_POST['contactEmail']));
   $subject = trim(stripslashes($_POST['contactSubject']));
   $contact_message = trim(stripslashes($_POST['contactMessage']));

   // Check Name
    if (strlen($name) < 2) {
        $error['name'] = "Bitte geben Sie Ihren Namen ein.";
    }
    // Check Email
    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Bitte geben Sie eine gültige E-Mail-Adresse ein.";
    }
    // Check Message
    if (strlen($contact_message) < 15) {
        $error['message'] = "Bitte geben Sie Ihre Nachricht ein. Mindestens 15 Zeichen.";
    }
   // Subject
    if ($subject == '') { $subject = "Contact Form Submission"; }


   // Set Message
   $message .= "Email from: " . $name . "<br />";
    $message .= "Email address: " . $email . "<br />";
   $message .= "Message: <br />";
   $message .= $contact_message;
   $message .= "<br /> ----- <br />Diese E-Mail wurde vom Kontaktformular Ihrer Website gesendet. <br />";

   // Set From: header
   $from =  $name . " <" . $email . ">";

   // Email Headers
    $headers = "From: " . $from . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
     $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";


   if (!$error) {

      ini_set("sendmail_from", $siteOwnersEmail); // for windows server
      $mail = mail($siteOwnersEmail, $subject, $message, $headers);

        if ($mail) { echo "OK"; }
      else { echo "Etwas ist schief gelaufen. Bitte versuchen Sie es erneut."; }
     
    } # end if - no validation error

    else {

        $response = (isset($error['name'])) ? $error['name'] . "<br /> \n" : null;
        $response .= (isset($error['email'])) ? $error['email'] . "<br /> \n" : null;
        $response .= (isset($error['message'])) ? $error['message'] . "<br />" : null;
     
        echo $response;

    } # end if - there was a validation error

}

?>
 
ja und nu?
Dann mußt Du eben ein bisschen Debug-Code hinzufügen um zu ermitteln was da passiert!
 
Ich denke, diesen PHP-Code möchtest du nicht für ein Kontaktformular verwenden.
  • Die mail()-Funktion von PHP ist relativ unzuverlässig und bietet kaum Debugmöglichkeiten
  • Die Header werden nicht überprüft, jeder kann über Header-Injection beliebige weiter Empfänger etc. angeben und deine Website als Spamschleuder missbrauchen
  • Der E-Mail-Check lässt gültige Adressen nicht durch (zb example@example.berlin)
  • Wozu wird stripslashes() aufgerufen? Das bringt nur Probleme, wenn der Benutzer wirklich Backslashes verwenden will. Wenn bei deinem Hoster wirklich noch eine Uralt-PHP-Version mit magic quotes rennt, solltest du diesen wechseln ;)
Schau dir besser eine gute Library für diesen Zweck, zum Beispiel Swiftmailer an.
 
  • Gefällt mir
Reaktionen: Difool
ok habe jetzt phpMailer und eine Testmail aus einem Tutorial genommen.
Leider bekomme ich das auch nicht zum Laufen.
PHP:
<?php
   // Sind die kopierten Dateien nicht im selben Verzeichnis, dann
   // den include-Pfad dorthin erweitern. In diesem Beispiel gehe
   // ich davon aus, daß es ein Verzeichnis phpmailer gibt

   // Aktueller Pfad
   $pfad = get_include_path();

   // Pfad erweitern
   $pfad .= PATH_SEPARATOR . 'inc/dir';

   // Pfad setzen
   set_include_path($pfad);

   // Die Klasse einbinden
   require_once 'class.phpmailer.php';

   // Das Objekt erzeugen
   $mail = new PHPMailer();

   // Wenn mit der Language-Datei gearbeitet werden soll,
   // dann setzten wir hier die Sprache und Pfad
   $mail->SetLanguage ("de", "inc/language/phpmailer.lang-de.php");

   // In den meisten Fällen benutzen wir einen SMTP-Server
   $mail->IsSMTP();

   // Der SMTP-Server ist der gleiche Server, wie er im Mail-Client
   // (Outlook, Pegasus, etc) eingetragen ist
   $mail->Host     = "smtp.strato.de";

   // Meistens wird eine Authentifizierung gebraucht
   $mail->SMTPAuth = true;

   // Der Benutzername, wie er im Mail-Client eingetragen ist
   // Nicht zu verwechseln mit der Mail-Adresse, bei manchen
   // Servern ist aber der Benutzername gleich der Adressse
   $mail->Username = "meine@email.de";

   // Und nun das Passwort, wie es auch im Mail-Client benutzt wird.
   $mail->Password = "meinPasswort";

   // Die Absenderadresse
   $mail->From     = "meine@email.de";

   // Der Absendername, nicht zwingend erforderlich
   $mail->FromName = "Mein Name";

   // Die Empfängeradresse eintragen
   $mail->AddAddress("empfänger@mail.de");

 

   // Der Betreff
   $mail->Subject  =  "Ich teste den phpMailer";

   // Wenn man eine HTML-Mail verschicken möchte
   $mail->IsHTML(true);

   // Der HTML-Body
   $mail->Body  =  "<b>Hallo,</b><br><br>alles Paletti?";

   // Der Text-Body, falls keine HTML-Mail verschickt wird
   // Aber auch bei einer HTML-Mail sollte man hier einen
   // Text angeben, falls der Empfänger keine HTML-Mails
   // lesen kann, und nicht dumm aus der Wäsche guckt.
   $mail->AltBody  =  "Ohh, keine HTML-Mail";

   // Das sollte es für die meistem Fälle gewesen sein
   // Also schicken wir die Mail ab
   if( ! $mail->Send())
   {
      echo "Mist, da hat was nicht funktioniert! <p>";
      echo "Mailer Error: " . $mail->ErrorInfo;
   }
   else
    echo "Hurra, die Mail ist raus.";
?>

HTML:
<form action="email.php" method="post" id="Form" name="Form">
<fieldset>
<div>
<button class="submit">Senden</button>
<span id="image-loader">
<img alt="" src="images/loader.gif">
</span>
</div>
</fieldset>
</form>
 
PHP:
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
                <input type="hidden" value="Anfrage von neuer Homepage" name="Subject">
               
                    <div style="position:absolute;top:15px;left:53px;width:382px;height:139px;">
                        <table width="382" border="0" cellspacing="0" cellpadding="0" height="139">
                            <tr>
                                <td valign="middle" width="157">Name, Vorname</td>
                                <td valign="middle"><input type="text" name="Name" size="32" /></td>
                            </tr>
                            <tr>
                                <td width="157">Stra&szlig;e, Nummer</td>
                                <td><input type="text" name="Straße" size="32" /></td>
                            </tr>
                            <tr>
                                <td width="157">PLZ, Ort</td>
                                <td><input type="text" name="Ort" size="32" /></td>
                            </tr>
                            <tr>
                                <td width="157">Telefonnummer</td>
                                <td><input type="text" name="Telefon" size="32" /></td>
                            </tr>
                            <tr>
                                <td width="157">Email-Adresse</td>
                                <td><input type="text" name="E-Mail" size="32" /></td>
                            </tr>
                        </table>
                    </div>
                    <div style="position:absolute;top:180px;left:53px;width:382px;height:110px;">
                        <table width="382" border="0" cellspacing="0" cellpadding="0" height="110">
                            <tr>
                                <td valign="middle" width="157">Ihr Text...</td>
                                <td rowspan="2" valign="middle"><textarea name="Text" cols="27" rows="8">
</textarea></td>
                            </tr>
                            <tr>
                                <td width="157"><input type="submit" value="Mail senden" /></td>
                            </tr>
                        </table>
                    </div>
                </div>
            </form>
 
Das ist aus meinem Form-Mailer, der lief bis letzte Woche bei strato. (Bin umgezogen..)
Ist nicht bereinigt oder so. Wollte nur zeigen, der läuft so bei strato.
 
@MacEnroe
Das dies grundsätzlich geht ist mir klar, nur bekomme ich den Form-Mailer mangels php Kenntnissen nicht versendet. Das ursprüngliche PHP Script ist so ein Freescript aus dem Netz. Wie ich dank xentric 'rausgefunden habe muss man sich bei Strato aber über SMTP authentifizieren. Die try and error Methode hat mich nicht weiter gebracht bzw. ich bekomme noch nicht mal die Testmail aus dem phpMailer Tut. versendet.
 
@mad dog

Die versendende Mailadresse des Formulars muss auch bei STRATO angelegt sein.
 
@MacEnroe
Das dies grundsätzlich geht ist mir klar, nur bekomme ich den Form-Mailer mangels php Kenntnissen nicht versendet.

Ich habe da auch Null Kenntnisse. Hab das PHP Ding genommen, in eine Seite (hinten .php) eingebaut, mit der
richtigen Mail-Adresse versehen (wie Difool richtig sagt muss die bei strato liegen) und funzt...

Kann es sein, dass du als Endung der Datei .html verwendest?
 
@Difool
Die Adresse für den Platzhalter meine@email.de ist bei Strato angelegt... auf dem Mac unter Mail funktioniert alles wunderbar, also von dieser Seite aus ist alles OK.
 
@MacEnroe
welches php Script hast du denn benutzt ? Du hast ja nur das Formular gepostet.
Mad
 
PHP:
<?php

### Konfiguration ###

# Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!

# An welche Adresse sollen die Mails gesendet werden?
$strEmpfaenger = 'mail@xxxx.de';

# Welche Adresse soll als Absender angegeben werden?
# (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)
$strFrom       = '"Formmailer" <xxx@xxxxxx.de>';

# Welchen Betreff sollen die Mails erhalten?
$strSubject    = 'Feedback von www.xxxxx.de';

# Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?
# Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
$strReturnhtml = 'http://www.xxxxx.de/content/Kontakt-Redirect.html';

# Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
$strDelimiter  = ":\t";

### Ende Konfiguration ###

if($_POST)
{
$strMailtext = "";

while(list($strName,$value) = each($_POST))
{
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strDelimiter.$value."\n";
  }
}

if(get_magic_quotes_gpc())
{
  $strMailtext = stripslashes($strMailtext);
}

mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
}

?>


Stimmt, hat gefehlt ... das hier steht noch in der Datei, am Anfang.
Und wie gesagt, die Datei .php benennen.
 
@MacEnroe
Danke Dir aber leider geht das Script bei mir auch nicht. Ist auch irgendwie logisch da Strato ja SMTP Auth. verlangt. Keine Ahnung warum das bei Dir gelaufen ist
 
Alternative log dich in deinen STRATO-Account ein und schau mal nach diesem FormTools.
 
@MacEnroe
Danke Dir aber leider geht das Script bei mir auch nicht. Ist auch irgendwie logisch da Strato ja SMTP Auth. verlangt. Keine Ahnung warum das bei Dir gelaufen ist

Keine Ahnung, ob das eine Rolle spielen kann, aber ich hatte ein Paket seit über 10 Jahren, das es
so schon lange nicht mehr gibt ... die Hosting Pakete heißen jetzt anders und haben andere Preise
und Leistungen. Vielleicht ist das der Grund.

Wobei die Server-Konfig, PHP und MySQL usw. schon immer ein Update erfahren hatten.
 
Ich danke euch für's Kopfzerbrechen. Ich nehme erstmal eine völlig unelegante Lösung die Strato noch bietet: Formailer.pl. Das geht über cgi - mal sehen ob ich das zum laufen bekomme. Wenn man zum Thema PHP-Mailformular googelt bin ich wohl nicht der einzige der damit so seine Probleme hat. Was mich wundert, es gibt doch sonst zu jedem Mist ein ausführliches Tutorial oder sogar ein Template.
Mad
 
Hast Du die PHP Version deiner Domain geprüft (PHPinfo). Vergleiche das mit den Voraussetzungen des scripts. Falls z. B. seit Jahren Ver. 5.2 bei dir rennt, das script aber aktueller ist und 5.4 wünscht, müsstest Du die Version anpassen? Das ist ein häufiges Problem.
 
Da du dich zu meinem mehrmaligen Hinweis bisher nicht geäußert hast, vermute ich immer noch,
dass du die Seite eventuell falsch benannt hast. ...?
 
Zurück
Oben Unten