php mailer in html einbinden
raffa69
- php
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"> </p> <p class="p" align="center" style="margin-top: 0; margin-bottom: 0"> </p> <p class="p" align="center" style="margin-top: 0; margin-bottom: 0"> </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ó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">ś</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">ę</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"> </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">Ć</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">Ł</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">Ó</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ówie</font><font face="Trebuchet MS" size="3" color="#000080"><span lang="PL">ś</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>
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)
if (isset($_POST['btn']['absenden']) and isset($_POST['data']))
{
$strMailtext = "";
# while(list($strName,$value) = each($_POST))
foreach($_POST['data'] as $key => $value)
{
if(is_array($value))
{
foreach($value as $subvalue)
{
$strMailtext .= $key.$strDelimiter.$subvalue."\n";
}
}
else
{
$strMailtext .= $key.$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;
}?>
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
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
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
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