Mail schicken via PHP?

  • Themenstarter Themenstarter Alex363
  • Beginndatum Beginndatum
A

Alex363

Hallo, ich möchte gerne die Option haben über eine Webseite ein Mail via einem Kontaktformular zu versenden. Dazu habe ich dieses PHP-Script im Netz gefunden:

PHP:
<?php
if(isset($_POST["message"])) {
if(isset($_POST["email"])) {
$mail = mail($_POST["email"],$_POST["betreff"],$_POST["message"],"From: ".$_POST["from"]);
}
else {
echo "Keine e-Mail Adresse angegeben. Die Mail wurde nicht gesendet.<br/>";
}
}
else {
echo "Es wurde keine Nachricht eingegeben. Die Mail wurde nicht gesendet.<br/>";
}
?>
<html>
<body>
<form action="sendmail.php" method="POST">
   eMail: <input type="text" name="email"><br/>
   Betreff: <input type="text" name="betreff"><br/>
   Message: <textarea name="message"></textarea><br/>
   <input type="hidden" name="from" value="none@testserver.com">
   <input type="submit" value="abschicken">
</form>
</body>
</html>


Allerdings ist mir das Textfeld in das man die Nachricht schreibt zu klein, wie macht man das größer?

Und dann möchte ich dass das versenden auch möglich ist, wenn man kein POP3 Mail auf dem Rechner installiert hat. Wo gebe ich dann die Adresse an, um die Nachrichten aus dem Web zu erhalten?
 
Hi!

Das Textarea-Element bekommst du mit der Angabe rows und cols breiter und höher, z.B.:
Code:
Message: <textarea name="message" rows="10" cols="50"></textarea><br/>

kein POP3 Mail auf dem Rechner installiert hat
:confused:
Auf dem Rechner? Du meinst ganz ohne Mailserver? Geht nicht..

Viele Grüße,
Jacka
 
Auf dem Rechner? Du meinst ganz ohne Mailserver? Geht nicht..

Nur beim abschicken, so das die Nachricht nicht über Outlook Express verschickt wird.
Viele benutzen nämlich GMX oder Hotmail.
Ich weiß nicht wie ich das erklären soll, aber die Nachricht soll über den Explorer versendet werden, eine kleine Anzeige an den Benutzer wäre dann nicht schlecht das die Mail verschickt ist. Und wo gibt man in dem Script die Empfängeradresse an, dort wo die Nachricht ankommen soll?
 
Wenn du dieses Script benutzt, braucht der Anwender keinen POP3-Client installiert haben. Das einzig nötige ist ein SMTP-Dienst auf der Serverseite und dieser wird wohl vorhanden sein (egal, bei welchem Anbieter du bist).

Im Moment ist es so, dass das Script die Email an die im Textfeld "Email" angegebene Mailadresse sendet und als Absender den Wert des versteckten Felds "from" benutzt. Wenn du einen festen Empfänger definieren willst und die im Textfeld "Email" angegebene Mailadresse als Absender fungieren soll, dann schreib dein Script etwas um:
PHP:
<?php

$empf = "dein@empfaenger.com";

if(isset($_POST["message"])) {
   if(isset($_POST["email"])) {
      $mail = mail($empf, $_POST["betreff"], $_POST["message"], "From: ".$_POST["email"]);
   } else {
      echo "Keine e-Mail Adresse angegeben. Die Mail wurde nicht gesendet.<br/>";
   }
} else {
   echo "Es wurde keine Nachricht eingegeben. Die Mail wurde nicht gesendet.<br/>";
}
?>
<html>
<body>
<form action="sendmail.php" method="POST">
   eMail: <input type="text" name="email"><br/>
   Betreff: <input type="text" name="betreff"><br/>
   Message: <textarea name="message"></textarea><br/>
   <input type="submit" value="abschicken">
</form>
</body>
</html>
Das Script als solches ist allerdings nicht wirklich sicher. Du solltest dich diesbezüglich noch dringend informieren, bevor du es einsetzt!
 
Hallo!

Zu 1)
Ja, das ist der feste Empfänger.

Zu 2)
Problem 1: Das Script wird auch dann abgeschickt, wenn man die Eingabefelder leer lässt.
Problem 2: Ein böser Mensch könnte die Header der Mail modifizieren!

Ich hab mir dein Script nochmal kurz angesehen und beide Probleme behoben:
PHP:
<?php

/**
 * Gibt 1 zurück, wenn $mail eine gültige Emailadresse ist;
 * ansonsten wird 0 zurückgegeben.
 */
function checkmail($mail) {
   return preg_match('#^[a-z0-9_.-]+@[a-z0-9.-]+\.[a-z]+$#i', $mail);
}

// Empfänger
$empf = "dein@empfaenger.com";

// Wenn der Betreff nicht min. 1 Zeichen lang ist, Fehler!
if(!isset($_POST["betreff"]) || !strlen(trim($_POST["betreff"])))
   die("Bitte einen Betreff eingeben!");

// Wenn Textmeldung nicht min. 1 Zeichen lang ist, Fehler!
if(!isset($_POST["message"]) || !strlen(trim($_POST["message"])))
   die("Bitte eine Nachricht eingeben!");

// Wenn Email ungültig ist, Fehler!
if(!isset($_POST["email"]) ||!checkmail($_POST["email"]))
   die("Bitte eine g&uuml;ltige Emailadresse angeben!");

// mail(EMPFÄNGER, BETREFF, MELDUNG, HEADERS)
mail($empf, str_replace("\n", "", $_POST["betreff"]), str_replace("\n.", "\n..", $_POST["message"]), $_POST["email"]);

?>
<html>
<body>
<form action="sendmail.php" method="POST">
   E-Mail: <input type="text" name="email"><br/>
   Betreff: <input type="text" name="betreff"><br/>
   Message: <textarea name="message"></textarea><br/>
   <input type="submit" value="abschicken">
</form>
</body>
</html>
Ich hoffe, ich konnte dir helfen!
 
Zuletzt bearbeitet:
Tut mir leid aber das abschicken funktioniert noch nicht, ich habe das auf dem Webserver getestet, folgende Meldung kommt wenn man den Text abschickt:

Parse error: syntax error, unexpected T_STRING in /var/www/users/krizz/sendmail.php on line 1
 
Zurück