Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

Opgelost Php form email geraakt in spambox

Ik heb onderstaand php formulier, en de mail geraakt in de spambox ?
Hoe kan ik dit verkomen ?


if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
if ( empty ( $_POST['email'] ) ) {
# receiver
$to = getUserData( "email" );
# domein
$url = preg_replace( "/(http:\/\/www.)/i", "", getUserData( "domein" ) );
# subject
$subject = "Kontakt formular: " . $url;
# inputs
$firma = $_POST['firma'];
$name = $_POST['name'];
$strabe = $_POST['strabe'];
$plz = $_POST['plz'];
$ort = $_POST['ort'];
$poster = $_POST['poster'];
$message = $_POST['message'];
# headers
$headers = "From:" . stripslashes( $name ) . "<" . stripslashes( $poster ) . ">";
# message body
$body = 'Firmenname: ' . $firma . "\r\n";
$body .= 'Ansprechpartner: ' . $name . "\r\n";
$body .= 'Strabe: ' . $strabe . "\r\n";
$body .= 'PLZ: ' . $plz . "\r\n";
$body .= 'Ort: ' . $ort . "\r\n";
$body .= 'E-mail: ' . $poster . "\r\n";
$body .= 'Bericht: ' . "\r\n" . $message . "\r\n";
# send
if ( @mail( $to, $subject, $body, $headers ) ) {
echo 'sent';
} else {
echo 'failed';
}
} else {
header( "Location: http://"; . $url . "/" );
}
}
If it's not fun, you're not doing it right!

Reacties

  • zet achter je headers ook een newline

    "From:" . stripslashes( $name ) . "<" . stripslashes( $poster ) . ">\r\n";
    ReneVnuet
  • PMPosts: 732
    Oeps die was ik vergeten, maar dit zal toch niet de reden zijn dat hij in de spambox geraakt.
    If it's not fun, you're not doing it right!
  • bewerkt di 31 mrt 2015
    PMPosts: 415
    Of het de reden is weet ik niet 100% zeker zonder zelf te testen, maar achter je headres moet wel een newline.
    Verder vind ik alleen de From header wel zeer mager...

    Wat sowieso tricky is, is een From header van een ander domein....!
    Jij verstuurd dus mail van meneerjansen@whatevermijnisp.is via renev.nl dat is waar het tricky wordt, maar ik weet zelf niet uit mijn hoofd welke headers je wel allemaal nodig hebt voor zoiets...lees verder

    Ik heb de minimalistische manier van mailtjes versturen allang opgegeven met de komst van phpmailer etc, die komen gewoon altijd aan, ook met blijlages etc etc...
  • bewerkt di 31 mrt 2015
    PMPosts: 732
    Ik heb de headers aangepast:


    $to = getUserData("email");
    $poster = Trim(stripslashes($_POST['poster']));

    $headers = 'From:' . $to . "\r\n";
    $headers .= 'Reply-To:' . $poster . "\r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();

    @mail($to $subject, $body, $headers)

    Nu komt het gekke :)
    Zodra ik het formulier in duits gebruik komt hij in de spambox, dus met duitse inhoud.
    Maar gebruik ik hem in het Nederlands dan komt hij netjes in de inbox.

    Moet je soms in de headers ook een Langugae aangeven ?
    If it's not fun, you're not doing it right!
  • PMPosts: 879
    Welke emailclient test je? Of welke webmaill?
  • bewerkt di 31 mrt 2015
    PMPosts: 415
    Plaats deze header er eens bij

    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $to . "\r\n";
    $headers .= 'Reply-To:' . $poster . "\r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();

    Als je geen html mail verstuurt dan zou je dit kunnen gebruiken:
    "Content-type: text/plain; charset=iso-8859-1";

    Probeer evt ook utf-8 ipv iso ... etc

    Nuet, dat moet niets uitmaken, mail moet gewoon OVERAL aankomen ;-)
  • PMPosts: 732
    Dat heb ik ook al geprobeert met de headers content type iso of utf8 maakt niks uit

    Ik denk niet dat de fout in het script zit, dit script gebruik ik een beetje standaard bij klanten.
    Juist nu loopt het op een Duits domein en gaat het gek doen grrrrrrr.
    Wat zou het wel niet geven in Chinees of Japans :)

    Maar ik kan mij zo slecht voorstellen, als je een bericht in Nederlands vermeld, dat het script gewoon werkt en de ontvanger hem in de inbox krijgt en zodra je een bericht in Duits schrijft dan komt hij in de spam-box.

    Wel heb ik die headers aangepast met verzender, inderdaad niet slim.

    If it's not fun, you're not doing it right!
  • Gebruik dan toch voor de gein eens phpmailer of swiftmailer o.i.d

    Dan heb je nu misschien even werk (5 mins?) om jezelf wegwijs te maken met die class, maar daarna kun je gewoon alles doen met die classes zonder na te denken
  • bewerkt di 31 mrt 2015
    PMPosts: 879
    Ik heb die php mailer eens ingesteld voor gmail en hotmail; hier staat de tut nog: http://webprofis.nl/discussion/9/contactformulier-en-phpmailer-instellingen-voor-gmail-en-live
    Misschien kun je hier wat mee
  • PMPosts: 732
    Maar dat is niet de oplossing waarom hij in de spambox geraakt.

    Daarbij zijn er weer diverse instellingen in de class van phpmailer, die ik dan weer in het cms moet verwerken.
    Tja en er zijn klanten die echt niks op gebied van email instellingen, hosting of websites weten en juist gebruik maken van het cms omdat het zo simpel is te gebruiken.

    Misschien in de toekomst om er eens over te denken, maar nu is mij dat teveel werk om dat te realiseren.
    If it's not fun, you're not doing it right!
  • PMPosts: 732
    Opgelost pfffffffffff......

    Wat ging er nu fout, nou de klant heeft meerdere domeinen bijvoorbeeld
    naam-een.de naam-twee.de naam-drie.de en hoofd account naam.de

    Op naam-een.de en naam-twee.de heeft hij destijds ook een email account aangemaakt, en dit email account vermelde hij dan in het cms, en het contact formulier gebruikt dit email account als verzender.
    Maar op naam-drie.de heeft hij nooits een email account aangemaakt, en in het cms voor deze site gebruikte hij dus het email van naam-een.de
    Dit veroorzaakte dus dat de mail in de spambox kwam.

    Snap je hem nog :) Ja ik ook maar voor de helft maar het werkt weer.

    Thanks voor het meedenken, proost.
    nuet
    If it's not fun, you're not doing it right!
  • PMPosts: 732
    Nog een tip voor dit gebeuren.

    Stel je bezit een hosting account met domein, gebruik dan ook nooit een gmail acoount als verzender in een formulier.
    De kans is namelijk groot dat het als spam wordt ontvangen!
    If it's not fun, you're not doing it right!
  • bewerkt wo 1 apr 2015
    PMPosts: 879
    Als ik dit zo lees, 3 domeinen, emailaccounts gebruiken van andere domeinen, dan wordt dat gezien als phishing.
    De ip adressen kloppen dan niet meer waardoor het als een verdachte email gezien wordt.
    Als ik het goed begrijp: je stuurt vanaf een mailserver ( die wat bij jouw domein hoort) en je afzender wordt gekoppeld aan dat ip adres van de mailserver. Als je nu verzend met een andere afzender ( je doet je eigenlijk voor a iemand anders), maar wel via dezelfde mailserver klopt de combinatie ip adres en afzender niet meer en ben je dus eigenlijk aan het spoofen.
    Toevallig wilde ik vandaag een grapje uithalen met iemand via een contactformulier met als afzender hetzelfde mailadres als waar de mail naartoe gaat. Ik tesste dit even uit op mijn Gmail en jahoor: kwam melding van: "Mogelijk is dit emailadres niet de werkelijke afzender van dit bericht" met een linkje naar: Report phishing
  • Dubieus verhaal ....

    Wat heeft een al dan niet juist emailadres te maken met een duitse versus nederlandse inhoud?
  • PMPosts: 732
    @nuet
    Zoiets in die aard was het, en dat vondt ik na lang zoeken :(

    @vinTage
    Al sla je me dood, misschien dat het komt omdat het hoofd account een .nl domein is en de andere domeinen .de
    Ik weet het echt niet, was voor mij een raadsel, was al zover dat ik in google.DE aan het zoeken was.

    Het werkt nu en ik gebruik onderstaand scriptje, als iemand hier nog verbeteringen in vindt verneem ik dit graag!


    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ( empty ( $_POST['email'] ) ) {
    # website data
    $sender = getUserData( "email" );
    $domein = preg_replace( "/(http:\/\/)/i", "", getUserData( "domein" ) );
    $datum = date("d-m-Y H:i:s", time());
    # inputs
    $firma = stripslashes($_POST['firma']);
    $name = stripslashes($_POST['name']);
    $strabe = stripslashes($_POST['strabe']);
    $plz = stripslashes($_POST['plz']);
    $ort = stripslashes($_POST['ort']);
    $poster = Trim(stripslashes($_POST['poster']));
    $message = stripslashes($_POST['message']);
    # subject
    $subject = '[ ' . $domein . ' | contactformulier ] Poster: ' . $name;
    # body
    $body = "Contact formulier vanaf de website: $domein \n";
    $body .= "Verzonden op $datum \n";
    $body .= "---------------------------------------------------------------- \n";
    $body .= "\n";
    $body .= "Firma: $firma \n";
    $body .= "Naam: $name \n";
    $body .= "Straat: $strabe \n";
    $body .= "Postcode: $plz \n";
    $body .= "Plaats: $ort \n";
    $body .= "E-mail: $poster \n";
    $body .= "\n";
    $body .= "Bericht: \n";
    $body .= $message . "\n";
    # headers
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n";
    $headers .= 'From:' . $sender . "\r\n";
    $headers .= 'Reply-To: ' . $name . '<' . $poster . '>' . "\r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();
    # send
    if (@mail($sender, $subject, $body, $headers)) {
    echo 'sent';
    } else {
    echo 'failed';
    }
    } else {
    header("Location: http://".$domein."/";);
    }
    }

    If it's not fun, you're not doing it right!
  • waarom gebruik je stripslashes over de posts, die lijken me enorm nutteloos :D
    Ik zou alle data die de bezoeker kan posten door addslashes en htmlentities halen, door vervelende lui wordt er vaak misbruik gemaakt van slecht beveilgde formulieren.
  • PMPosts: 879
    Die stripslahes wat vinTage oppert hierboven kan ik me ook wel in vinden. Wat mij verder opvalt is het @ teken voor de mailfunctie. Zover als ik weet wordt dit teken gebruikt om waarschuwingen te onderdrukken maar je hebt die mail toch al in een if statement staan met "failed" als het fout gaat?
  • Jep Nuet, maar als je de standaard foutmelding weghaalt, dan krijgt de bezoeker (vaak een leek!) geen melding voor zijn neus met (voor hem/haar) onduidelijke errorcodes :)

    Ik zet altijd/meestal error_reporting uit op mijn creaties maar als je een cookie plaatst met de naam "debug" dan zet ik hem aan.
    Zo ziet de gebruiker alleen mijn "ifjes"
    nuet
  • PMPosts: 732
    Is deze beter?


    $name = strip_tags( trim( $_POST[ 'name' ] ) );
    $poster = trim ( $_POST['poster'] );
    $message = htmlentities ( trim( $_POST['message'] ), ENT_QUOTES, "UTF-8" );
    If it's not fun, you're not doing it right!
  • PMPosts: 879
    In de naam wordtt tags en whitespace geschrapt
    Bij poster wordt alleen whitespace geschrapt
    Bij message worden alle karakters omgezet naar HTML en geen whitespace

    Dits is vlg mij functioneler dan stripslahes die je voorheen had
  • ik zou alles htmlentitie??n
  • PMPosts: 732
    En de reden voor alles te html ?
    Want in poster (is trouwens email) en naam is dit toch overbodig ?
    If it's not fun, you're not doing it right!
  • ***och vraag me niet hoe ze het doen maar dagelijks worden er miljarden spammailtjes verzonden via slecht gemaakte applicaties.
    htmlentites hoeft niet perse, maar jij doet geen enkele controle (zoals ikzelf wel altijd doe), dus is htmlentites nog het simpelst.
    zelf haal ik altijd de naw meuk door een regex, het mailadres door filtervar en het bericht door htmlentities.

    *** denk aan personen die dit soort namen hebben:
    Bcc: $emailList\r\n
  • PMPosts: 732
    Ik heb daar eigenlijk niet zo bij stil gestaan, omdat ik al in de javascript een validatie heb zitten.


    var emailValid = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
    var nameValid = /^[a-z0-9_]{8,25}$/i;

    Alleen omdat ik nu dat contact script ben aan het checken (door die Duitse meut) dacht ik verbeter het eens.
    Het enigste waar ik steeds van baal zijn die umlauts, die moet ik er nog in verwerken.
    En tot heden:


    // naam
    if ( empty( $_POST['name'] ) ) {
    die( 'Fout: Vermelden van een Naam is verplicht!' );
    } else {
    $name = trim ( $_POST['name'] );
    if( !preg_match( '/^[A-Z0-9][a-zA-Z0-9 ]+$/i ', $name ) ) {
    die( 'Fout: Vermeld een geldige Naam!' );
    }
    }

    // email
    if ( empty( $_POST['poster'] ) ) {
    die( 'Fout: Vermelden van een E-mail is verplicht!' );
    } else {
    $poster = trim ( $_POST['poster'] );
    if ( !filter_var( $poster, FILTER_VALIDATE_EMAIL ) ) {
    die( 'Fout: Vermeld een geldig E-mail adres!' );
    }
    }

    // bericht
    if ( empty( $_POST['message'] ) ) {
    die( 'Fout: Vermelden van een Bericht is verplicht!' );
    } else {
    $message = htmlentities ( trim( $_POST['message'] ), ENT_QUOTES, "UTF-8" );
    }
    If it's not fun, you're not doing it right!
  • bewerkt ma 6 apr 2015
    PMPosts: 415
    javascript validarie == LOL

    javascript is puur eyecandy, dat zou je toch ondertussen moeten weten ;-)

    Ik ben vanavond even bezig geweest met een regex die denk ik goed bruikbaar is, ik ga hem voortaan zelf ook maar gebruiken, ik ben er tevreden mee :p

    <?php
    // goed
    $names[] = "Hans en Grietje"; //{\s\w}
    $names[] = "H??ns"; //u modifier
    $names[] = "Han??"; //u modifier
    $names[] = "Hans _- kabouters.nl"; //{-.}
    $names[] = "??t-x?? s??? x??? n???ng"; //whoop zelfs vietamese namen :p

    // fout
    $names[] = "a"; //te kort{{2, 20}}
    $names[] = "Hans's"; //bevat ongeldig teken '
    $names[] = "Hans ?"; //dito
    $names[] = "<html>"; //dito (zie je wel in de src)
    $names[] = "aaaaaaaaaaaaaa bb aaaaaa"; //te lang {2, 20}


    foreach ($names as $name){
    echo preg_match("{^[\s\w-.]{2,20}$}u", $name) ? 'goed: '.$name : 'fout: '.$name;
    echo '<br>';
    }
  • hmm uitlijning?..ik heb het zelfs een keer opnieuw gedaan...of mijn arm is echt om zeep of er klopt iets niet met de formatting.
  • bewerkt za 4 apr 2015
    PMPosts: 879
  • haha nog de goeie kant ook :)

    maareuh, de formatting lijkt imho toch te falen ;-)
Login of Registreer om te reageren.