kostenloser Webspace werbefrei: lima-city


php ()mail mit Formular und "sendmail.php" in Hintergrund

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    Hallo liebe Community,

    ich habe ein für euch wahrscheinlich kleines Problem. Nur ich beiß mir daran die Zähne aus.

    Angenommen ich habe ein Formular: form.html

    <form method="post" action="sendmail.php">
    								<div class="row uniform 50%">
    									<div class="6u 12u$(4)">
    										<input type="text" name="name" id="name" value=""     placeholder="Name" />
    									</div>
    									<div class="6u$ 12u$(4)">
    										<input type="email" name="email" id="email" value="" placeholder="example@lima-city.de" />
    									</div>
    									<div class="12u$">
    										<div class="select-wrapper">
    											<select name="category" id="category">
    												<option value="">- Category -</option>
    												<option value="1">Manufacturing</option>
    												<option value="2">Shipping</option>
    												<option value="3">Administration</option>
    												<option value="4">Human Resources</option>
    											</select>
    										</div>
    									</div>
    									<div class="4u 12u$(3)">
    										<input type="radio" id="priority-low" name="priority" checked>
    										<label for="priority-low">Low Priority</label>
    									</div>
    									<div class="4u 12u$(3)">
    										<input type="radio" id="priority-normal" name="priority">
    										<label for="priority-normal">Normal Priority</label>
    									</div>
    									<div class="4u$ 12u$(3)">
    										<input type="radio" id="priority-high" name="priority">
    										<label for="priority-high">High Priority</label>
    									</div>
    									<div class="6u 12u$(3)">
    										<input type="checkbox" id="copy" name="copy">
    										<label for="copy">Email me a copy of this message</label>
    									</div>
    									<div class="6u$ 12u$(3)">
    										<input type="checkbox" id="human" name="human" checked>
    										<label for="human">I am a human and not a robot</label>
    									</div>
    									<div class="12u$">
    										<textarea name="message" id="message" placeholder="Enter your message" rows="6"></textarea>
    									</div>
    									<div class="12u$">
    										<ul class="actions">
    											<li><input type="submit" value="Send Message" class="special" /></li>
    											<li><input type="reset" value="Reset" /></li>
    										</ul>
    									</div>
    								</div>
    							</form>


    Dann versuche ich immer, das ganze wie folgt zu machen: sendmail.php

    $name = $_POST['name'];
    $email = $_POST['email'];
    $category = $POST['category'];
    $to = "example@empfänger.com";
    $subject = "Formular";
    mail($to,$subject,$category \n $message [,FROM: "$name" <$email>)


    Aber das funktioniert leider nicht, wie ich will bzw. ich bekomme dauerhaft neue Fehlermeldungen. :( PS: Nur ein Beispiel in der PHP

    Wie kann ich das machen?




    Beitrag zuletzt geändert: 17.6.2015 19:49:55 von lorixon
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,

    vorab, eine Checkbox mit der Frage ob ich ein Mensch bin oder nicht, schützt nicht vor Bots! Da gehört ein wenig mehr dahinter ;)

    Also zum Problem. Wenn du Daten per POST sendest, werden die Variablen in den input-Feldern durch name='Variable' definiert. (Zum Verständnis)

    Zum PHP-Teil:
    $name = $_POST['name'];
    $email = $_POST['email'];
    $category = $POST['category'];
    $to = "example@empfänger.com";
    $subject = "Formular";
    $header = "From: $email \r\n" .
        "X-Mailer: PHP/" . phpversion();
    
    mail($to,$subject,$category \n $message,$header)


    So sollte der Code funktionieren. Verwende für die Headerangaben eine extra Variable zur besseren Übersicht.
    Du solltest das nächste Mal auch deine Fehlermeldungen posten ;)

    Zum Nachlesen: http://php.net/manual/de/function.mail.php

    MFG Micha
  4. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    michaelkoepke schrieb:
    Hi,

    vorab, eine Checkbox mit der Frage ob ich ein Mensch bin oder nicht, schützt nicht vor Bots! Da gehört ein wenig mehr dahinter ;)

    Also zum Problem. Wenn du Daten per POST sendest, werden die Variablen in den input-Feldern durch name='Variable' definiert. (Zum Verständnis)

    Zum PHP-Teil:
    $name = $_POST['name'];
    $email = $_POST['email'];
    $category = $POST['category'];
    $to = "example@empfänger.com";
    $subject = "Formular";
    $header = "From: $email \r\n" .
        "X-Mailer: PHP/" . phpversion();
    
    mail($to,$subject,$category \n $message,$header)


    So sollte der Code funktionieren. Verwende für die Headerangaben eine extra Variable zur besseren Übersicht.
    Du solltest das nächste Mal auch deine Fehlermeldungen posten ;)

    Zum Nachlesen: http://php.net/manual/de/function.mail.php

    MFG Micha


    Danke für diese überaus nette Antwort. Zu dem mit der Checkbox: Wie gesagt, ist ein Beispiel! :)

    Ich konnte durch einen Glücksfund auf Youtube das Problem Gott sei Dank lösen. Mein Code sieht dabei aber etwas anders aus:

    <?php
    				$name = $_REQUEST['name'];
    				$email = $_REQUEST['email'];
    				$money = $_REQUEST['money'];
    				$code = $_REQUEST['code'];
    				$message = $_REQUEST['message'];
    				
    				$empfaenger = "spende@lorixon.eu";
    				$absender = $email;
    				
    				$betreff = "PaySafeCard - Spende von $name";
    				$body = "$name hat über die Spendefunktion auf der Website http://lorixon.eu/spenden.html folgenden Betrag gespendet:\n\n\t$money Euro\n\nDer PIN lautet:\n\t$code\n\n\nEr/Sie hat folgende Zusatznachricht eingetragen: $message";
    				$versandt = "Die Spende wurde versandt und wird gerade gepr&uumlft. Sollte deine E-Mail-Adresse korrekt sein, wirst du noch von Lorixon h&oumlren. Bei Fragen zur Spende, schreibe eine E-Mail an spende@lorixon.eu.";
    				
    				mail("$empfaenger","$betreff","$body\n","FROM: $absender\n");
    				echo $versandt;
    			?>


    Ich möchte mich daher für meine Ungeduld entschuldigen und bedanke mich trotzdem bei dir, michael! :)

    LG
    Lorixon


    Beitrag zuletzt geändert: 17.6.2015 22:35:03 von lorixon
  5. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi, ich helfe doch gern aber bitte BEACHTE folgenden Hinweis!

    Benutze bitte Statt $_REQUEST die $_POST-Variable. Warum? Wenn jemand deine Seite aufruft indem er an deine Domain ?name=XYZ&email=hhh$senden=1 anfügt, kann er eine Email senden. Die REQUEST-Variable beinhaltet ALLE Daten von POST, GET und COOKIE.

    Wieder was zum Nachlesen: http://php.net/manual/de/reserved.variables.request.php

    MFG Micha
  6. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    Hallo,

    noch eine Frage bez. REQUEST und POST: Wenn ich das richtig verstanden habe, kann auch ein nicht zertifizierter dadurch eine E-Mail senden? D.h. selbst durch Passwortschutz von .htaccess? Oder inwiefern ist das so gefährlich? Wer könnte denn vor dem Absenden noch einmal den Link eines anderen abändern bzw. nach dem Absenden? :/


    Danke auf jeden Fall
    Lorixon (PS: Du kannst dir das Formular ja mal ansehen, musst es ned ausfüllen. Keine Sorge! ;) Ich sende dir den Link per PN )
  7. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Wenn du .htaccess verwendest, kommst du um die Passworteingabe nicht herum. Und .htaccess hat auch in dem Zusammenhang nichts mit PHP zu tun. Die REQUEST-Variable ist eine Art Globale-Variable und die beinhaltet Daten die über POST, GET oder COOKIEs gesendet wurden. Sprich ich kann die REQUEST-Variable über 3-Arten setzten.

    POST: Post kannst du über das Senden eines Formularen verwenden.
    GET: Auch über Formular (Zum testen ändere im html-code mal das POST in GET und schau auf deine Domain was passiert) aber auch über die Adresszeile in Form von www.domain.de?id=jjj&name=...
    COOKIE: Existieren Cookies auf dem Rechner (nur für die Seite) werden sie gesendet

    Nochmal: 3 verschiedene Möglichkeiten Daten zu übertragen. Aber alle können mit REQUEST abgefragt werden.

    Frage ich nun nur über $_POST diese Daten ab, kann ich diese auch nur über POST senden. Es ist so sicherer als wenn ich noch andere Möglichkeiten hätte.

    MFG Micha
  8. Dein Script ist noch anfällig für Header-Injection. Damit kann man dann z.B. recht easy rumspammen. :)
  9. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    muellerlukas schrieb:
    Dein Script ist noch anfällig für Header-Injection. Damit kann man dann z.B. recht easy rumspammen. :)


    Und wie schützt man sich vor solchen Dingen? Wollte ohnehin fragen, ob es möglich ist,das so einzustellen, dass pro IP Adresse (würde mir vorerst reichen) nur ein Formular in 5 Stunden abgegeben werden kann bzw. ob es sonstigen Schutz gibt. Aber ich glaube, dazu müsste ich schon einen neuen Thread erstellen. :)

    LG
    Lorixon
  10. Zur IP: Textdatei mit IPs und letzter Mail und dann überpüfen, ob schon mal gesendet: file_*_contents, time(), ...
    Aber recht unsicher: Router neu einwählen lassen und gut ist, dann nimm lieber den Benutzernamen der Auth Basic. Den kannst du meist im $_SERVER-Array finden.
    Edit: Captcha reicht oft. Siehe z.B. Recaptcha.

    Header-Injection: Alle Umbrüche in Betreff, Sender rausschmeißen, dann ist gut. :)

    Beitrag zuletzt geändert: 18.6.2015 1:36:04 von muellerlukas
  11. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    muellerlukas schrieb:
    Dein Script ist noch anfällig für Header-Injection. Damit kann man dann z.B. recht easy rumspammen. :)


    Also ich habe das jetzt probiert. Aber ich denke mein html Code verhindert das iwie. Konnte unter keinen Umständen mehr als EINE E-Mail angeben.
  12. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,

    mit HTML kannst du wohl dieses Problem nicht lösen ;) html kann in deinem Browser geändert und manipuliert werden ;) So etwas musst du Serverseitig lösen!
  13. Autor dieses Themas

    lorixon

    Kostenloser Webspace von lorixon

    lorixon hat kostenlosen Webspace.

    michaelkoepke schrieb:
    Hi,

    mit HTML kannst du wohl dieses Problem nicht lösen ;) html kann in deinem Browser geändert und manipuliert werden ;) So etwas musst du Serverseitig lösen!


    Hat mir schon ein äußerst freundliches Vögelchen gezwitschert.

    Habs jetzt mit Hilfe so gemacht:

    mail("$empfaenger","$betreff\n\n","$body", str_replace("\n", "", "FROM: " . $absender));
  14. $betreff = str_ireplace(array("\r", "\n", "%0a", "%0d"), '', $betreff);

    Und das ebenso mit dem Absender.
    Die Zeilenumbrüche sind unter Win/*nix unterschiedlich.
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!