raffa69: php mailer in html einbinden

hallo,

habe ein kleines problem.habe eine html seite in die ich einen mailer einbinden will.das will nicht so recht klappen.habe den php mailer von Stefan Münz hier aud dem forum benutzt.könnte sich vielleicht einer von euch,wenn er zeit hat,meinen code angucken?

danke

<?php

$strEmpfaenger = 'info@studiumwahl.de'; $strSubject    = 'Feedback'; $strReturnhtml = 'http://www.teamworxx.com/STUDYNET/PL/index-pl.html'; $strDelimiter  = ":\t";

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; }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Welcome to Study-Net</title> </head>

<!--[if lt IE 7]> <script language="JavaScript"> function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6. {    var arVersion = navigator.appVersion.split("MSIE")    var version = parseFloat(arVersion[1])    if ((version >= 5.5) && (document.body.filters))    {       for(var i=0; i<document.images.length; i++)       {          var img = document.images[i]          var imgName = img.src.toUpperCase()          if (imgName.substring(imgName.length-3, imgName.length) == "PNG")          {             var imgID = (img.id) ? "id='" + img.id + "' " : ""             var imgClass = (img.className) ? "class='" + img.className + "' " : ""             var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "             var imgStyle = "display:inline-block;" + img.style.cssText             if (img.align == "left") imgStyle = "float:left;" + imgStyle             if (img.align == "right") imgStyle = "float:right;" + imgStyle             if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle             var strNewHTML = "<span " + imgID + imgClass + imgTitle             + " style="" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"             + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"             + "(src='" + img.src + "', sizingMethod='scale');"></span>"             img.outerHTML = strNewHTML             i = i-1          }       }    } } window.attachEvent("onload", correctPNG); </script> <![endif]-->

<style type = "text/css">

a:link {color: #FF0000} a:visited {color: #00FF00} a:hover { color:#FF6600} a:active {color: #0000FF}

td.background1 {

border: 1px solid black; border-bottom:none;

}

td.background2 {

border: 1px solid black; border-top:none;

}

div.transbox { width: 800px; height: 700px; background-color:#0066CC; border: 2px solid #0033CC; margin: 30px 50px; filter:alpha(opacity=70); -moz-opacity: 0.7; }

div.background { width: 800px; height: 700px; background-color:none; border: 2px solid #0033CC; img }

img.trans { filter:filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=image src='logo_mvr.png'); background: none; }

img.left2 { float: right; position: relative; background-color:none;

}

img.right { margin-left: 40px; float: left; position: relative;

}

img.png { float: none; position: relative; top: 5; border: ridge 1px #FFFFFF; margin: 20px 20px; }

a:hover img{border: ridge 2px #FFFF00;} a:active img{border: ridge 2px #33FF00;}

h1.go { margin: 40px 40px; font-size:40px; font-weight:bold; color: #FFFFFF; vertical-align:super; white-space: normal; text-shadow:#000000;

font: Georgia, "Times New Roman", Times, serif; }

div.transbox p { margin: 3px 40px; font-size:20px; font-weight:bold; color: #ffffff; vertical-align:super; white-space: normal; line-height: 150% }

div.transbox h2 { margin: 20px 40px; font-size:40px; font-weight:bold; color: #ffffff; vertical-align:super; white-space: normal; }

td.p { white-space:normal; }

</style>

<body bgcolor="#CCFFFF"> <table width="1173" height="1" border="0" align="center" cellspacing="0" >   <tr>     <td width = "134" rowspan="8" height="1" >   </td>     <td width="900" height="1" align="left" nowrap="nowrap" bordercolor="#000000" colspan="5" >  <p align="center" style="margin-top: 0; margin-bottom: 0">  <img border="0" src="../banner.jpg" width="757" height="148"> </td>     <td width = "121" rowspan="8" height="1">   </td>   </tr>   <tr>     <td bordercolor="#000000" width="76" height="1" >  <p class="p" align="center" style="margin-top: 0; margin-bottom: 0">     &nbsp;&nbsp;&nbsp; </p>  <p class="p" align="center" style="margin-top: 0; margin-bottom: 0">     &nbsp;&nbsp; </p>  <p class="p" align="center" style="margin-top: 0; margin-bottom: 0"> &nbsp;</p></td>     <td bordercolor="#000000" width="250" height="1" valign="top" >  <p align="center">     <img border="0" src="kierunki.jpg" width="143" height="112" align="center"></td>     <td bordercolor="#000000" width="290" height="1" valign="top" >  <p align="center" style="margin-top: 0; margin-bottom: 0">         <img border="0" src="aplikacja.jpg" width="193" height="116" align="center"></td>     <td bordercolor="#000000" width="200" height="1" valign="top" >         <img border="0" src="formalnosci1.jpg" width="201" height="122"></td>     <td bordercolor="#000000" width="96" height="1" >  <p style="margin-top: 0; margin-bottom: 0"></td>   </tr>   <tr>     <td bordercolor="#000000" width="76" height="9" >  <p style="margin-top: 0; margin-bottom: 0">  </td>     <td bordercolor="#000000" width="250" height="9" >  <p align="center" style="margin-top: 0; margin-bottom: 0">         <strong>         <font face="Rockwell" color="#000080" style="font-size: 12pt">Wyszukiwarka kierunk&oacute;w</font></strong></td>     <td bordercolor="#000000" width="290" height="9" >  <p align="center" style="margin-top: 0; margin-bottom: 0">           <font face="Rockwell" color="#000080">           <strong>Aplikacja na           studia</strong></font></td>     <td bordercolor="#000000" width="200" height="9" >  <p align="center" style="margin-top: 0; margin-bottom: 0"><strong>               <font color="#000080" face="Rockwell">Formalno</font></strong><b><font face="Trebuchet MS" size="3" color="#000080"><span lang="PL">&#347;</span></font></b><strong><font color="#000080" face="Rockwell">ci i urz</font></strong><span lang="pl"><b><font face="Trebuchet MS" size="3" color="#000080">&#281;</font></b></span><strong><font color="#000080" face="Rockwell">dy</font></strong></td>     <td bordercolor="#000000" width="96" height="9" >  <p style="margin-top: 0; margin-bottom: 0">  </td>   </tr>   <tr>     <td bordercolor="#000000" width="76" height="1" >  <p style="margin-top: 0; margin-bottom: 0"></td>     <td bordercolor="#000000" width="740" height="1" colspan="3" >  <p class="p" style="margin-top: 0; margin-bottom: 0" align="center">     &nbsp;</p>  <p class="p" style="margin-top: 0; margin-bottom: 0" align="center">     <font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; text-decoration:underline">     CHCESZ JAKO PIERWSZY SKORZYSTA</font><u><font color="#FF0000" face="Arial Black" size="2">&#262;</font></u><font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; text-decoration:underline">     Z NASZEJ BEZP</font><u><b><font face="Arial" size="3" color="#FF0000">&#321;</font></b></u><font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; text-decoration:underline">ATNEJ POMOCY?</font></p>  <p class="p" style="margin-top: 0; margin-bottom: 0" align="center">     <font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; text-decoration:underline">     PODAJ </font><u>     <font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; ">     SW</font><b><font face="Arial" color="#FF0000" size="3">&Oacute;</font></b><font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; ">J </font>     </u>     <font face="Rockwell" color="#FF0000" style="font-size: 12pt; font-weight:700; text-decoration:underline">     MAIL:         <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">

<p align="center"><input type="text" name="E-Mail" /></dd>

<p align="center">             <input type="submit" value="Wyslij" />             <input type="reset" value="Wyczysc" />             </p>         </form>   <tr>     <td bordercolor="#000000" width="76" height="1" >  <p style="margin-top: 0; margin-bottom: 0"></td>     <td bordercolor="#000000" width="250" height="1" >  <p align="center" style="margin-top: 0; margin-bottom: 0">         <img border="0" src="rowiesnicy2.jpg" width="201" height="137"></td>     <td bordercolor="#000000" width="290" height="1" >  <p align="center" style="margin-top: 0; margin-bottom: 0">         <img border="0" src="praca%20mieszkania2.jpg" width="210" height="129" align="middle"></td>     <td bordercolor="#000000" width="200" height="1" >  <p align="center" style="margin-top: 0; margin-bottom: 0">         <img border="0" src="stypednia.jpg" width="96" height="122" align="top"></td>     <td bordercolor="#000000" width="96" height="1" >  <p style="margin-top: 0; margin-bottom: 0"></td>   </tr>   <tr>     <td bordercolor="#000000" width="76" height="1" >  <p style="margin-top: 0; margin-bottom: 0">  </td>     <td bordercolor="#000000" width="250" height="1" valign="top" >  <p align="center" style="margin-top: 0; margin-bottom: 0"><b>         <font face="Rockwell" color="#000080">R&oacute;wie</font><font face="Trebuchet MS" size="3" color="#000080"><span lang="PL">&#347;</span></font><font face="Rockwell" color="#000080">nicy</font></b></td>     <td bordercolor="#000000" width="290" height="1" valign="top" >  <p align="center" style="margin-top: 0; margin-bottom: 0">               <strong>               <font face="Rockwell" color="#000080">M</font></strong><font face="Rockwell" color="#000080"><strong>ieszkania               / praca studencka</strong></font></td>     <td bordercolor="#000000" width="200" height="1" valign="top" >  <p align="center" style="margin-top: 0; margin-bottom: 0">           <strong>           <font face="Rockwell" color="#000080">S</font></strong><font face="Rockwell" color="#000080"><strong>typendia</strong></font></td>     <td bordercolor="#000000" width="96" height="1" >  <p style="margin-top: 0; margin-bottom: 0">  </td>   </tr>   <tr>     <td bordercolor="#000000" width="912" height="1" colspan="5" >  </td>   </tr>   <tr>    <td width="900"  bordercolor="#000000" height="1" colspan="5"  >    </td>   </tr> </table> </body> </html>

  1. Hello,

    es hätte genügt, wenn Du diese beiden Abschnitte gepostet hättest.

    Ich finde den "Formmailer grausam, will aber mal versuchen zu erläutern, was da geschieht.

    <?php

    Hier werden Variablen für das Script festgelegt; hast Du ja auch schon bemerkt

    $strEmpfaenger = 'info@studiumwahl.de';
    $strSubject    = 'Feedback';
    $strReturnhtml = 'http://www.teamworxx.com/STUDYNET/PL/index-pl.html';
    $strDelimiter  = ":\t";

    Als Trennzeichen wird ein Tabulator benutzt

    Das soll sicherlich bedeuten, dass dieser Mailer nur tätig wird, wenn das Formular per POST abgesendet wurde. Das ist aber leider nicht so. Da die Superglobalen Arrays $_POST und $_GET in JEDEM Script zur Verfügung stehen, egal wie es aufgerufen wurde, sorgt dieses Script für die "Selbstbespammung" mit leeren Mails...

    if($_POST)

    besser Daten und sSteuerdne Elemente getrennt halten und überhaupt

    danach fragen, ob sie übermittelt wurden. Das geschieht dann wirklich

    nur bei einem POST-Request

    if (isset($_POST['btn']['absenden']) and isset($_POST['data']))

    {

    Eine leere Variable für die Aufnahme des Mailtextes wird vorbereitet

    $strMailtext = "";

    alle ÜBERMITTELTEN Wertepaare aus $_POST abholen

    #  while(list($strName,$value) = each($_POST))

    foreach($_POST['data'] as $key => $value)

    {

    der ansatzweise Versuch von Rekursion...

    wenn $value selber ein Array ist

    if(is_array($value))
      {

    foreach($value as $subvalue)

    {

    die dann vermeintlich nicht mehr als Array vorliegenden Werte in

    der Variable Mailtext sammeln

    $strMailtext .= $key.$strDelimiter.$subvalue."\n";

    }
      }
      else
      {

    wenn es keine Subarray waren, auch in der Variable für den mailtext sammeln

    $strMailtext .= $key.$strDelimiter.$value."\n";
      }
    }

    wenn der Mechanismus "Magic Quotes" (bitte im PHP-Manual nachlesen)

    eingeschaltet ist, die Maskierungen wieder entfernen

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

    Die enail absenden

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

    ?>

    In Deinem Formular fehlen nun freilich die Eingabefelder, die im obigen Script so universell aufgelesen werden sollten

    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">

    <p align="center"><input type="text" name="E-Mail" /></dd>

    <p><input type="text" name="data[Anliegen]" size="45" /></p>

    <p><textarea nane="data[Mitteilung]" rows="10" cols="45"></texarea></p>

    <p align="center">

    <input type="submit" name="btn[absenden]" value="Absenden" />

    <input type="reset" value="Hoppla" />
                </p>
            </form>

    Ich habe es nicht ausprobiert, aber so sollte es funktionieren.
    Das Formular solltest Du noch um "Vornamwe, Name", "Telefon" und "email" ergänzen, denn sowas wird gerne vergessen anzugeben von den Schreibern.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. danke für die hilfe :)

      noch eine letzte frage habe ich.ich habe ja nur ein feld.der nutzer schreibt in dieses feld seine email und schickt es weg.ich möchte,dass die mails,die bei mir ankommen als absender eben die reingeschriebenen emails haben.ist sowas möglich?
      ich möchte nämlich direkt antworten können,ohne die adresse zu kopieren,die ja jetzt nur als nachricht kommt.

      danke

      1. Hello,

        danke für die hilfe :)

        noch eine letzte frage habe ich.
        ich habe ja nur ein feld. der nutzer schreibt in dieses feld seine email und schickt es weg. ich möchte, dass die mails, die bei mir ankommen, als absender eben die reingeschriebenen emails haben. ist sowas möglich?

        ich möchte nämlich direkt antworten können,ohne die adresse zu kopieren,die ja jetzt nur als nachricht kommt.

        Das ist möglich, aber nicht ungefährlich.
        Diese Angabe müsste in die Header der eMail aufgenommen werden, also in die Verwaltungsinformationen, die auch der Mail-Server sich anschaut und auswertet.

        Daher müssen diese Informationen besonders sorgsam geprüft werden und man muss darauf achten, dass einem niemand Dinge hineinschreibt, die nicht dorthin gehören. Es wäre einem Angreifer dadurch möglich, den ganzen Header umzuschrweiben und über Deinen Server an tausende Leute Spam zu verschicken. Das nennt sich dann "Mail-Injection"

        Man muss also dafür sorgen, dass dort keine Sicherheitslücke bleibt.

        Wie man das machen kann, wurde hier immer wieder diskutiert und ist im Archiv sicherlich hundertfach zu finden.

        Du brauchset also nur ein zusätzliches Input-Feld

        <input type="text" class="mailform" size="50" name="data[email]" />

        und eine Überprüfungsmethode auf dem Server.

        Meine Methode dafür ist:

        $_POST['data']['email']   kommt am Client an.

        Ich schaue nach, ob _genau__ein_ '@' im String enthalten ist.
          http://de.php.net/manual/de/function.substr-count.php

        if (substr_count($_POST['data']['email']),'@') != 1)  return 'Bitte genau ein '@'pro eMail-Adresse angeben!';

        ich schaue nach, ob der Datenwert ein CRLF (oder ähnlich) enthält.
          http://de.php.net/manual/de/function.strpos.php

        if (strpos($_POST['data']['email'],CRLF) !== false) return 'Fehler im eMail-Feld';
          if (strpos($_POST['data']['email'],CR) !== false) return 'Fehler im eMail-Feld';
          if (strpos($_POST['data']['email'],LF) !== false) return 'Fehler im eMail-Feld';

        Das gweht natürlich auch in einem Schritt mit einer Regular Expression.

        Wenn diese Fehlermöglichkeiten ausgeschossen sind, ist die angegebene Absenderadresse
          für den Mail-Header unschädlich und meistens auch verwendbar.

        Als Funktion sieht das dann so aus

        #-------------------------

        define ('CRLF', chr(13).chr(10));     ## Carriage Return für DOSen, HTTP und MAIL
        define ('CR', chr(13));               ## Für ältere MACs
        define ('CR', chr(10));               ## Für UNIXe und LINUXe

        function check_mail($email)
        {
           if (gettype($mail) != 'string') return 'Fehler im eMail-Feld';
           if (substr_count($mail,'@') != 1)  return "Bitte genau ein '@'pro eMail-Adresse angeben!";
           if (strpos($mail,CRLF) !== false) return 'Fehler im eMail-Feld';
           if (strpos($mail,CR) !== false) return 'Fehler im eMail-Feld';
           if (strpos($mail,LF) !== false) return 'Fehler im eMail-Feld';

        return 0;
        }

        #--------------------------

        Und im Programm dann.

        $_error = array();        ### Array für die Fehlermeldungen meines Affenformulares
        $_mailheader = array();   ### Array zum sammeln der zusätzlichen Header

        if(($mailerror = check_mail($_POST['data']['email'])) !== 0)
          {
            $_error[] = $mailerror;
          }
          else
          {
            $_mailheader['From'] = $_POST['data']['email'];
          }

        Später werden dann die Header zusammengebaut

        $mailheaderstr = '';

        foreach($_mailheader as $name => $val)
          {
            $mailheaderstr .= "$name: $val".CRLF;
          }

        und den kannst Du dann in die mail()-Funktion von PHP einbauen

        $mailsendOK = mail($mailto, $mailsubject, $mailmessage, $headerstr);

        Solange sich aber im Array $_error Fehlermeldungen gesammlet haben, sende ich die mail gar nicht ab, sondern lege dem Client das Formular mitsamt den Fehlermeldungen und den falsxhen Daten wieder vor:

        Es sollte nicht unerwähnt bleiben, dass Du ähnliche Prüfungen für $mailto und $mailsubject durchführen musst, wenn Du sie nicht fest vorgibst in Deinem Script.

        Alles, was in $mailmessage zusammengefasst wird, ist allerdings (nach bsiherigen Erkenntnissen) unschädlich für den Mailserver. Ob es der Client (oser sein Leser *g*) vertragen kann, steht auf einem anderen Blatt.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Hello,

          War ja klar. Mindestens ein Schreibfehler an relevanter Stelle ist immer drin...

          Als Funktion sieht das dann so aus

          #-------------------------

          define ('CRLF', chr(13).chr(10));     ## Carriage Return für DOSen, HTTP und MAIL
          define ('CR', chr(13));               ## Für ältere MACs
          define ('CR', chr(10));               ## Für UNIXe und LINUXe

          function check_mail($mail)

          {
             if (gettype($mail) != 'string') return 'Fehler im eMail-Feld';
             if (substr_count($mail,'@') != 1)  return "Bitte genau ein '@'pro eMail-Adresse angeben!";
             if (strpos($mail,CRLF) !== false) return 'Fehler im eMail-Feld';
             if (strpos($mail,CR) !== false) return 'Fehler im eMail-Feld';
             if (strpos($mail,LF) !== false) return 'Fehler im eMail-Feld';

          return 0;
          }

          #--------------------------

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)