Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Email senden (https://www.delphipraxis.net/56516-%5Bphp%5D-email-senden.html)

Luckie 7. Nov 2005 10:08


[PHP] Email senden
 
Ich bastele gerade an einem Feedback Formular für meine Homepage. Das klappt auch schon ganz gut, bis auf die Tatsache, dass es ziemlich bescheiden formatiert ankommt.

Mein PHP Code sieht bisher so aus:
Code:
<?php
  $to = 'mpuff@luckie-online.de';

  $headers = 'MIME-Version: 1.0\r\n'.
   'Content-Type: text/plain; charset=iso-8859-1\r\n'.
   'From: "Kontaktformular luckie-online.de" <'.$from.'>\r\n'.
   'To: '.$to.' <'.$to.'>\r\n'.
   'Date: '.date("r").'\r\n'.
   'Subject: '.$subject.'\r\n';

  $msg = 'Von: '.$yourname.' ('.$from.')\r\n\r\nText:\r\n'.$text;

  if (!mail($to, $subject, $msg, $headers))
  {
    echo 'Fehler';
  }
  else
  {
    echo 'und weg.';
  }
?>
Und das Resultat:
Zitat:

Von: Michael Puff (mpuff@gmx.de) Text: With a hard coded(base64 no less) to: function I thought nothing of it until my ISP Suspended my account because AOL complained of multiple complaints of spam from my domain.
My account has still not been restored from the Host they feel that it was my fault for having a Faulty Script.
Be careful guys when using Mail() function--I swore by it less than 3 days ago. Now I\'m a victim of Hacking (feel violated) AOL thinks my website is a spammer and wont do anything to learn different and my host too thinks I\'m at fault :-( go figure that the victim is always the bad guy.
Die Zeilenumbrüche \r\n werden nicht berücksichtigt, doe Hochkomata verden "escaped" und als Absender steht trotz anderer Angaben von mir immer "apache" da. :(

Hier mal der Header, der gesendeten E-Mail:
Code:
Return-Path: <apache@www.zeus03.de>
X-Original-To: [email]mpuff@luckie-online.de[/email]
Delivered-To: [email]l3s11195p3@www.zeus03.de[/email]
Received: by [url]www.zeus03.de[/url] (Postfix, from userid 48)
   id 793F3108A7381; Mon, 7 Nov 2005 09:57:36 +0100 (CET)
To: [email]mpuff@luckie-online.de[/email]
Subject: Hallo
MIME-Version: 1.0\r\nContent-Type: text/plain; charset=iso-8859-1\r\nFrom: "Kontaktformular luckie-online.de" <mpuff@gmx.de>\r\nTo: [email]mpuff@luckie-online.de[/email] <mpuff@luckie-online.de>\r\nDate: Mon, 7 Nov 2005 09:57:36 +0100\r\nSubject: Hallo\r\n
Message-Id: <20051107085736.793F3108A7381@www.zeus03.de>
Date: Mon, 7 Nov 2005 09:57:36 +0100 (CET)
From: [email]apache@www.zeus03.de[/email] (apache)
Status:

r4id3n 7. Nov 2005 10:26

Re: [PHP] Email senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende dafür eine nette kleine E-Mail-Klasse.... Diese unterstützt auch HTML und Plain-Text-Mails.

Hoffe das hilft Dir ein wenig!

Luckie 7. Nov 2005 10:30

Re: [PHP] Email senden
 
Ächtz, ich will nur ein Formular ausfüllen und per mail() verschicken. Mehr nicht.

Und häng bitte den Code als Datei an, über 1200 Zeilen Code in einem Beitrag müssen nun wirklich nicht sein. :roll:

generic 7. Nov 2005 10:34

Re: [PHP] Email senden
 
Zitat:

Zitat von Luckie
Code:
<?php
  $headers = 'MIME-Version: 1.0\r\n'.
   'Content-Type: text/plain; charset=iso-8859-1\r\n'.
   'From: "Kontaktformular luckie-online.de" <'.$from.'>\r\n'.
   'To: '.$to.' <'.$to.'>\r\n'.
   'Date: '.date("r").'\r\n'.
   'Subject: '.$subject.'\r\n';

?>

versuch mal anstelle von ' das "
achte bitte dadrauf das $headers von aussen nicht manipulibar ist.
sonst machst du dir ein offenes spamgateway.

r4id3n 7. Nov 2005 10:35

Re: [PHP] Email senden
 
Damit funktionierts aber.... Ich hab die SMTP-Class mal wieder raus genommen... Die brauchst du nicht! Mit der Klasse weiß ich aber das es geht ;-)

Luckie 7. Nov 2005 10:39

Re: [PHP] Email senden
 
Ah, danke, das war schon mal gut. Aber die Zeilenumbrüche im Text sind immer noch fehlerhaft und die Hochkomata werden imme rnoch "escaped".

Basilikum 7. Nov 2005 10:52

Re: [PHP] Email senden
 
Zitat:

Zitat von generic
Zitat:

Zitat von Luckie
Code:
<?php
  $headers = 'MIME-Version: 1.0\r\n'.
   'Content-Type: text/plain; charset=iso-8859-1\r\n'.
   'From: "Kontaktformular luckie-online.de&quot; &lt;'.$from.'>\r\n'.
   'To: '.$to.' &lt;'.$to.'&gt;\r\n'.
   'Date: '.date(&quot;r&quot;).'\r\n'.
   'Subject: '.$subject.'\r\n';

?&gt;

versuch mal anstelle von ' das "
achte bitte dadrauf das $headers von aussen nicht manipulibar ist.
sonst machst du dir ein offenes spamgateway.

Zitat:

Zitat von Luckie
Ah, danke, das war schon mal gut. Aber die Zeilenumbrüche im Text sind immer noch fehlerhaft und die Hochkomata werden imme rnoch "escaped".

hm ? demfalls hast du den Rat von generic nicht beachtet:
in PHP werden String-Literale mit " (Doppelgänsefuss) eingefasst, nicht wie in Delphi mit '
ich habe das kurz gestestet... der Effekt von escapeten Sonderzeichen und nicht deescapten Zeilenumbrüchen ist so reproduzierbar

so ist's richtig:
Code:
<?php
  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Kontaktformular luckie-online.de\" <".$from.">\r\n".
   "To: ".$to." <".$to.">\r\n".
   "Date: ".date("r")."\r\n";

?>
(Subject kannst weglassen, das wird bereits bei mail() gesetzt...)

Luckie 7. Nov 2005 11:01

Re: [PHP] Email senden
 
Zitat:

Zitat von Basilikum
hm ? demfalls hast du den Rat von generic nicht beachtet:

Doch, daraufhin habe ich ja den Header angepasst. da hat ja dann zu mindest der Header dann gestimmt, aber die zeilenumbrüche und "escapeten" Sonderzeichen sind trotzdem noch da.

Die Mail mit deinem Header sieht übrigens genauso aus:
Zitat:

Von: Michael Puff (mpuff@gmx.de)\r\n\r\nText:\r\nWith a hard coded(base64 no less) to: function I thought nothing of it until my ISP Suspended my account because AOL complained of multiple complaints of spam from my domain.
My account has still not been restored from the Host they feel that it was my fault for having a Faulty Script.
Be careful guys when using Mail() function--I swore by it less than 3 days ago. Now I\'m a victim of Hacking (feel violated) AOL thinks my website is a spammer and wont do anything to learn different and my host too thinks I\'m at fault :-( go figure that the victim is always the bad guy.

ripper8472 7. Nov 2005 12:52

Re: [PHP] Email senden
 
ein \r\n wird nur in "-strings interpoliert. in '-strings sin sie literal wie alle anderen buchstaben.

sniper_w 7. Nov 2005 13:25

Re: [PHP] Email senden
 
Ich habe das bisher auf meinem Freedback formular so gemacht:
Code:
   
$message = 'Name :' . $name . "\n" .
           'E-mail :' . $email . "\n" .
           'Comment :' . $kcmment . "\n" .
           'server time -> ' . $mytime;
Und die Umbrüche funktionieren.

mumu 7. Nov 2005 13:36

Re: [PHP] Email senden
 
probier mal

stripslashes(text)

addslashes(text)

gruß

Luckie 7. Nov 2005 14:19

Re: [PHP] Email senden
 
stripslashes entfernt nur die Backslashes, so dass dann das bei rauskommt:
Zitat:

Von: Michael Puff <mpuff@lgmx.de>rnrnText:rnDies ist nut ein Testtext.
Und addslashes ändert dann auch nichts mehr dran.

mumu 7. Nov 2005 14:24

Re: [PHP] Email senden
 
probier mal nur

addslashes(text)

sorry, hab mich da weng blöd ausgedrückt. nicht beides hintereinander.

Luckie 7. Nov 2005 14:31

Re: [PHP] Email senden
 
Also, die Lösung von ripper löst schon mal das Problem mit den Zeilenumbrüchen. Nur das mit den "escapen" habe ich nochnicht hinbekommen:
Zitat:

Zitat von original
Note that 'e-mail injection' exploits don't need a 'return' byte at all, so there's no use scanning for \n or \r. The safest way to prevent the exploit is to eregi() search all fields for 'MIME-Version: ' or something else found in e-mail headers, and intercept the spammer that way. Here's the simplest way I have:

Mit addslashes:
Zitat:

Note that \'e-mail injection\' exploits don\'t need a \'return\' byte at all, so there\'s no use scanning for \\n or \\r. The safest way to prevent the exploit is to eregi() search all fields for \'MIME-Version: \' or something else found in e-mail headers, and intercept the spammer that way. Here\'s the simplest way I have:
Mit stripslashes:
Zitat:

Note that 'e-mail injection' exploits don't need a 'return' byte at all, so there's no use scanning for \n or \r. The safest way to prevent the exploit is to eregi() search all fields for 'MIME-Version: ' or something else found in e-mail headers, and intercept the spammer that way. Here's the simplest way I have:
Ergo mit stripslashes geht es. :P

Besten dank. :thumb:

So sieht es jetzt aus: http://www.luckie-online.de/impressum.php
Und das Script dazu:
Code:
<?php
  /*
  Copyright (c) 2005: Michael Puff
  Url: [url]http://www.luckie-online.de[/url]
  Mail: [email]mpuff@luckie-online.de[/email]
 
  Version: 1.0 - 2005-11-07
*/

  $to = 'mpuff@luckie-online.de';

  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Kontaktformular luckie-online.de\" <".$from.">\r\n".
   "To: ".$to." <".$to.">\r\n".
   "Date: ".date("r")."\r\n";

  $msg = 'Von: '."\n".$yourname.' <'.$from.'>'."\n\n".'Text:'."\n".$text;
  $msg = stripslashes($msg);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Homepage von Michael Puff</title>
    <link rel="stylesheet" type="text/css" href="/css/dir.css">
  </head>
  <body>
  <h1>Homepage von Michael Puff</h1>
  <?php
    $dir = getcwd();
    $start = strpos(strtolower($dir), '/html/')+5;
    $s = substr($dir, 0, $start);
    include $s.'/includes/nav.shtml';
    include $s.'/includes/copyright.inc';
  ?>
  <h2>E-Mail senden</h2>
  [img]/pics/line.png[/img]
 



<?php
  if (empty($from) || empty($text))
  {
     echo "Bitte füllen Sie mindestens die Felder 'E-Mail Adresse' und 'Text' aus.";
  }
  else if (!mail($to, $subject, $msg, $headers))
  {
    echo '

Es ist ein Fehler beim Senden der E-Mail aufgetreten.</p>';
  }
  else
  {
    echo '

Die E-Mail wurde erfolgreich gesendet.</p>';
  }
?>




  [img]/pics/line.png[/img]
  <table class="tblfooter">
    <tr>
    <?php
      echo '<td class="total"></td>'.'<td class="copy">'.$cr.'</td>';
    ?>
    </tr>
  </table>
</body>
</html>
Ist der Header so wasserdicht oder kann da jemand das Formular missbrauchen? Es wäre nett, wenn ein, zwei mir mal eine Testmail darüber schicken und mir Rückmeldung geben würden.

[edit=Admin]Code-Tags korrigiert. Mfg, Daniel[/edit]

Luckie 7. Nov 2005 20:46

Re: [PHP] Email senden
 
So, irgend eine nette namenlose Person hat mir eine Mail geschrieben. Oder sie war nicht nett und wollte mich nur ärgern. jedenfalls scheint es zu funktionieren. Kan mir mal jemand sagen, wie sicher das jetzt mit dem obigen Code ist?

ripper8472 7. Nov 2005 20:53

Re: [PHP] Email senden
 
sicher.

zwar kann dir jeder alles moegliche schicken und dich evtl sogar vollspammen, aber das ist keine frage von sicher/unsicher mehr.

Pr0g 7. Nov 2005 20:55

Re: [PHP] Email senden
 
In wie fern sicher?

Und du solltest dir angewöhnen die globalen Arrays $_GET und $_POST (in deinem Fall letzteres, da du die Daten aus dem Formular ja wohl auch per "post" abschickst, $_GET wäre für Daten, die über die URL kommen).

Also bspw. $_GET['text'] statt $text.

Zumal du so auch auf der sicheren Seite bist, falls deine Scripte mal auf einem Server laufen sollen, auf dem die Einstellung register_globals auf "off" gestellt wurde, denn dort sind die Werte nur üer globalem Array erreichbar. Infos dazu auch bspw. hier.

Luckie 7. Nov 2005 21:07

Re: [PHP] Email senden
 
Zitat:

Zitat von ripper8472
zwar kann dir jeder alles moegliche schicken und dich evtl sogar vollspammen, aber das ist keine frage von sicher/unsicher mehr.

Nun das ist wohl mit jedem Kontaktformular möglich. Ich meine nur, dass mein Formular nicht für Spammails missbraucht werden kann. Also, wie hier http://de.php.net/manual/de/function.mail.php#55111 oder hier http://securephp.damonkohler.com/ind...mail_Injection beschrieben.

ripper8472 7. Nov 2005 21:31

Re: [PHP] Email senden
 
Luckie: wenn du noch Pr0gs tipp beherzigst ($_GET/$_POST/$_REQUEST/...), dann ist das script wirklich in ordnung.

Luckie 7. Nov 2005 21:33

Re: [PHP] Email senden
 
Zitat:

Zitat von ripper8472
Luckie: wenn du noch Pr0gs tipp beherzigst ($_GET/$_POST/$_REQUEST/...), dann ist das script wirklich in ordnung.

OK, werde ich machen. Danke für eure Hilfe. :P

Luckie 8. Nov 2005 00:04

Re: [PHP] Email senden
 
So gerade wurde von einem netten Forumsteilnehmer mein Script geknackt mit diser HTML Datei:
Code:
<html>
  <form ACTION="http://www.luckie-online.de/php/mail.php" METHOD=POST>
    Ihre E-Mail Adresse:
 
    <textarea NAME="from" COLS=60 ROWS=15>test@tester.de>
To: Tester <xyzabc@foob.ar>
Date: Sat, 22 Oct 2005 16:50:53 +0200 


.
</textarea>

 
    Ihr Name:
 
    <input NAME="yourname" size=35>

 
    Betreff:
 
    <input NAME="subject" size=35>

 
    Ihr Text:
 

    <textarea NAME="text" COLS=60 ROWS=15>
diese mail solltest du gar nicht bekommen, sorry, falls es viele versuchen und du zu gespamt

wirst..., bei mir bleibt es bei diesem einen test! 
versprochen...

Gruß Peter
</textarea>

 
    <input TYPE="submit" VALUE="Senden">
  </form>
</html>
Die Mail ging sowohl an mich, als auch an den anderen Forumsteilnehmer, was ja eigentlich nicht sein sollte.
Den Tipp von Pr0gs habe ich noch nicht eingebaut, hätte der das verhindert? Alös erstes werde ich die Variable $to zu einer Konstanten machen, damit man diese schon mal nicht überschreiben kann.

Puh, jetzt sieht man mal, wie schwer es ist solche Sachen wasserdicht zu bekommen, dabei ist das ja noch recht einfach und übersichtlich. :-?

ripper8472 8. Nov 2005 00:07

Re: [PHP] Email senden
 
es nuetzt nichts, die konstant zu machen.

du musst alle eingaben parsen, also die eingegebenen emailadressen des users zerlegen und auf richtigkeit pruefen. wie du siehst, hat er da weitere header eingeschmuggelt.

edit: aeh unfug. $from musst du im code festlegen. sonst kann ja wie gesehen jeder irgendwas reingeben.

Pr0g 8. Nov 2005 00:10

Re: [PHP] Email senden
 
Mein Vorschläge hätte das Umgehen auch nur verhindert, wenn die register_globals Einstellung auf dem Sever auf "off" gestanden hätte (was sie ja nicht ist, sonst könnte dein Script in jetziger Form nicht funktionieren), da dann kein Zugriff mehr von außen auf die Variablen möglich ist.

Auch unterscheidest du momentan ja nicht zwischen GET und POST Daten, daher hätte man sich das Formular auch fast sparen können und eine Mail nur per Aufruf des Links mit passenden Parametern abschicktn können.

Luckie 8. Nov 2005 00:10

Re: [PHP] Email senden
 
Zitat:

Zitat von ripper8472
du musst alle eingaben parsen, also die eingegebenen emailadressen des users zerlegen und auf richtigkeit pruefen. wie du siehst, hat er da weitere header eingeschmuggelt.

Uff, das übersteigt etwas mein können. Was muss ich da wie parsen und überprüfen?

x000x 8. Nov 2005 00:15

Re: [PHP] Email senden
 
ich würde $from gar nicht für den header verwenden, sondern einen vordefinierten absender benutzen...
@luckie: kannst du die gmx adresse bitte aus dem beitrag entfernen?

ripper8472 8. Nov 2005 00:17

Re: [PHP] Email senden
 
erstmal sorry, dass ich da oben so vorschnell "sicher." gesagt hab. hab deinen code nicht gruendlich genug gelesen.

also. alle daten, die von aussen kommen, sind der potenzielle tod fuer dein script. $from wolltest du dem script per aufruf fuettern, das hat dieser jemand von vor ein paar posts aufgedeckt und einen weg gezeigt, es auszunutzen. das kannst du erstmal fixen, indem du $post im script zuweist.

eingaben von aussen zu pruefen ist schon schwierig. da geht man am besten nicht mit "einschraenken" vor, sondern mit "erlauben". beispiel username in einem forum:
wuerde ich namen verbieten, die die sonderzeichen "!@#$%^&*()" enthalten, dann macht sich einer die muehe, andere sonderzeichen zu finden.
erlaube ich stattdessen nur a-z, A-Z, 0-9 und leerzeichen und verlange mindestens 3-zeichen-lange nicks, dann ist das sicher.

Pr0g 8. Nov 2005 00:22

Re: [PHP] Email senden
 
Hier hast du nen Artikel zum Thema "Emailadressen validieren". Zumindest den ersten Teil mit der Validierung per RegEx kannst du in dein Script packen um dann zu prüfen, ob der User nur eine Email, oder mehr angegeben hat.

Luckie 8. Nov 2005 00:32

Re: [PHP] Email senden
 
OK, jetzt sieht das alles so aus:
Code:
  define("TO", "mpuff@luckie-online.de");
 
  function validate_email($email)
  {
 
     // Create the syntactical validation regular expression
     $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
 
     // Presume that the email is invalid
     $valid = 0;
 
     // Validate the syntax
     if (eregi($regexp, $email))
     {
        list($username,$domaintld) = split("@",$email);
        // Validate the domain
        if (getmxrr($domaintld,$mxrecords))
           $valid = 1;
     } else {
        $valid = 0;
     }
     return $valid;
  }

  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Kontakt luckie-online.de\" <webmaster@luckie-online.de>\r\n".
   "To: ".TO." <".TO.">\r\n".
   "Date: ".date("r")."\r\n";

  $msg = 'Name: '.$_POST['yourname']."\n".
    'E-Mail: '.$_POST['from']."\n\n".
    'Text:'."\n".$text;
  $msg = stripslashes($msg);
?>

// ...

<?php
  if ((empty($from) || empty($text)) || (!validate_email($_POST['from'])))
  {
     echo "

Bitte füllen Sie mindestens die Felder 'E-Mail Adresse' und 'Text' aus und überprüfen Sie ihre E-Mail Adresse
     auf Gültigkeit.</p>";
  }
  else if (!mail($to, $subject, $msg, $headers))
  {
    echo '

Es ist ein Fehler beim Senden der E-Mail aufgetreten.</p>';
  }
  else
  {
    echo '

Die E-Mail wurde erfolgreich gesendet.</p>';
  }
?>
Ist es jetzt etwas sicherer?

x000x 8. Nov 2005 00:40

Re: [PHP] Email senden
 
also ich sehe im moment nichts mehr. bis auf $subject, aber in wie weit, bzw. ob überhaupt man das missbrauchen kann,
dazu fehlen mir die php kenntnisse...

ripper8472 8. Nov 2005 00:44

Re: [PHP] Email senden
 
$subject wuerd ich auch im code festlegen.
von irgendwas ausgehen ist der erste schritt...
moeglicherweise kann man so weitere header einbauen, wie das mit $from schon gemacht wurde...

Luckie 8. Nov 2005 01:06

Re: [PHP] Email senden
 
Hm. Gut. Dann lasse ich es erstmal so. Besten Dank für eure Hilfe. Hier noch mal das komplette Script:
Code:
<?php
  /*
  Copyright (c) 2005: Michael Puff
  Url: [url]http://www.luckie-online.de[/url]
  Mail: [email]mpuff@luckie-online.de[/email]
 
  Version: 1.1 - 2005-11-07
*/

  define("TO", "mpuff@luckie-online.de");
 
  function validate_email($email)
  {
 
     // Create the syntactical validation regular expression
     $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
 
     // Presume that the email is invalid
     $valid = 0;
 
     // Validate the syntax
     if (eregi($regexp, $email))
     {
        list($username,$domaintld) = split("@",$email);
        // Validate the domain
        if (getmxrr($domaintld,$mxrecords))
           $valid = 1;
     } else {
        $valid = 0;
     }
     return $valid;
  }

  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Kontakt luckie-online.de\" <webmaster@luckie-online.de>\r\n".
   "To: ".TO." <".TO.">\r\n".
   "Date: ".date("r")."\r\n";

  $msg = "Name    : ".$_POST['yourname']."\n".
         "E-Mail  : ".$_POST['from']."\n".
         "Betreff : ".$_POST['subject']."\n\n".
    $text;
  $msg = stripslashes($msg);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Homepage von Michael Puff</title>
    <link rel="stylesheet" type="text/css" href="/css/dir.css">
  </head>
  <body>
  <h1>Homepage von Michael Puff</h1>
  <?php
    $dir = getcwd();
    $start = strpos(strtolower($dir), '/html/')+5;
    $s = substr($dir, 0, $start);
    include $s.'/includes/nav.shtml';
    include $s.'/includes/copyright.inc';
  ?>
  <h2>E-Mail senden</h2>
  [img]/pics/line.png[/img]
 



<?php
  if ((empty($from) || empty($text)) || (!validate_email($_POST['from'])))
  {
     echo "

Bitte füllen Sie mindestens die Felder 'E-Mail Adresse' und 'Text' aus und überprüfen Sie ihre E-Mail Adresse
     auf Gültigkeit.</p>";
  }
  else if (!mail($to, $_POST['subject'], $msg, $headers))
  {
    echo '

Es ist ein Fehler beim Senden der E-Mail aufgetreten.</p>';
  }
  else
  {
    echo '

Die E-Mail wurde erfolgreich gesendet.</p>';
  }
?>




  [img]/pics/line.png[/img]
  <table class="tblfooter">
    <tr>
    <?php
      echo '<td class="total"></td>'.'<td class="copy">'.$cr.'</td>';
    ?>
    </tr>
  </table>
</body>
</html>

MisterNiceGuy 17. Feb 2006 19:15

Re: [PHP] Email senden
 
Ich würde dieses Sript auch gerne auf meiner Seite verwenden, nur weiß ich nicht wie ich es einbinde. Kann mir da jemand kurz helfen?

MisterNiceGuy 19. Feb 2006 17:38

Re: [PHP] Email senden
 
*PUSH*

DGL-luke 20. Feb 2006 10:02

Re: [PHP] Email senden
 
Du brauchst eine HTML-Datei mit einer Form, die Daten dieser Form müssen dann an das PHP-Skript gehen.

Luckie 14. Apr 2006 05:36

Re: [PHP] Email senden
 
So, schöne Grüße von meinem Webhoster, das Script funktioniert nicht mehr so wie es soll. Heute Nacht hat mein Hoster irgendwas am Mailsystem gemacht, was hat er nicht gesagt, aber jeden falls zeigt mir Outlook nicht mehr an von wem die Mail ist. Im Webmail Interface wird alles korrekt angezeigt.

So sieht es zur Zeit aus:
Code:
<?php
  /*
  Copyright (c) 2005: Michael Puff
  Url: [url]http://www.michael-puff.de[/url]
  Mail: [email]mpuff@michael-puff.de[/email]
 
  Version: 1.1 - 2005-11-07
*/

  define("TO", "mpuff@michael-puff.de");
 
  function validate_email($email)
  {
 
     // Create the syntactical validation regular expression
     $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
 
     // Presume that the email is invalid
     $valid = 0;
 
     // Validate the syntax
     if (eregi($regexp, $email))
     {
        list($username,$domaintld) = split("@",$email);
        // Validate the domain
        if (getmxrr($domaintld,$mxrecords))
           $valid = 1;
     } else {
        $valid = 0;
     }
     return $valid;
  }

  $headers = "MIME-Version: 1.0\r\n".
   "Content-Type: text/plain; charset=iso-8859-1\r\n".
   "From: \"Developer michael-puff.de\" <mpuff@michael-puff.de>\r\n".
   "To: ".TO." <".TO.">\r\n".
   "Date: ".date("r")."\r\n";

  $msg = "Name    : ".$_POST['yourname']."\n".
         "E-Mail  : ".$_POST['from']."\n".
         "Betreff : ".$_POST['subject']."\n\n".
    $text;
  $msg = stripslashes($msg);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>michael-puff.de/E-Mail senden</title>
    <link rel="stylesheet" type="text/css" href="/css/stylesheet.css">
  </head>
  <body>
  <div>
  <h1>Homepage von Michael Puff</h1>
  <?php
    $dir = getcwd();
    $start = strpos(strtolower($dir), '/html/')+5;
    $s = substr($dir, 0, $start);
    include $s.'/includes/nav.shtml';
  ?>
  <h2>E-Mail senden</h2>
 


<?php
  if ((empty($from) || empty($text)) || (!validate_email($_POST['from'])))
  {
     echo "

Bitte füllen Sie mindestens die Felder 'E-Mail Adresse' und 'Text' aus und überprüfen Sie ihre E-Mail Adresse
     auf Gültigkeit.</p>";
  }
  else if (!mail($TO, $_POST['subject'], $msg, $headers))
  {
    echo '

Es ist ein Fehler beim Senden der E-Mail aufgetreten.</p>';
  }
  else
  {
    echo '

Die E-Mail wurde erfolgreich gesendet.</p>';
  }
?>




  <hr>
  <table class="tblfooter">
    <tr>
    <?php
      echo '<td class="left"></td>';
      echo '<td class="right">Copyright &copy; 2003 - '.date("Y").' [url="/impressum.php"]Michael Puff[/url]</td>';
    ?>
    </tr>
  </table>
  </div>
</body>
</html>
Früher stand da immer in der "Von"-Spalte: Developer michael-puff.de jetzt ist sie aufeinmal leer. :wall:

Und die Mail sieht jetzt so aus:
Zitat:

Content-Type: text/plain; charset=iso-8859-1
From: "Developer michael-puff.de" <mpuff@michael-puff.de>
To: mpuff@michael-puff.de <mpuff@michael-puff.de>
Date: Fri, 14 Apr 2006 05:26:52 +0200


Name : kqfbd
E-Mail : mpuff@gmx.de
Betreff : kacbk

kascbsakdjcb
Der Header sollte da eigentlich nicht stehen und tat er früher auch nicht.

Irgendwas läuft da schief.

Luckie 14. Apr 2006 11:58

Re: [PHP] Email senden
 
Hat sich erledigt, der neue Dienst kommt mit \r\n nicht zurecht. Es muss strikt \n sein. Der alte hat es noch konvertiert. Jetzt geht alles wieder. ;)

DGL-luke 14. Apr 2006 14:48

Re: [PHP] Email senden
 
:warn: Die RFCs spezifizieren sowohl für POP als auch für SMTP \r\n als Zeilenendezeichen... Somit ist der Provider im Unrecht.

Obwohl ich nicht verstehe, was der Server dagegen hat, wenn an jedem Zeilenende \r steht :gruebel:

Luckie 14. Apr 2006 16:03

Re: [PHP] Email senden
 
Was heißt unrecht? Das Programm ist höchstens nicht RFC konform, Recht hat der Hoster schon, wenn er sagt, dass das Mail-Programm mit \r\n nicht klar kommt.

Luckie 14. Apr 2006 16:21

Re: [PHP] Email senden
 
Jemand aus dem Webhosterforum meinte übrigens, dass das Script angreifbar wäre:
Zitat:

Dein Skript ist übrigens angreifbar wenn ich mich nicht irre.

$_POST['subject'] mit

ABC\n
To: spammich@doch\n
Bcc: nocheinspam@opfer.com\n
\n
.

Außer das Ganze ist im MTA gesperrt, da bin ich mir aber nicht sicher.
Stimmt das? Und wenn ja, was müsste ich ändern, um das zu unterbinden?

Daniel 14. Apr 2006 16:23

Re: [PHP] Email senden
 
Zeilenumbruch im Subject unterbinden, sollte in diesem Fall helfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz