[php] mailform - mails komen niet aan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi allen,

ik heb een probleem met mijn php mailform. Het is de bedoeling dat het bericht wordt gestuurd naar het ingevulde emailadres, maar de mails komen niet aan. Verder krijg je, of je nou een emailadres invult of niet, altijd de echo dat het goed is gegaan. Waar zit(ten) de fout(en)..? Daarnaast vraag ik me af of ik ook een fill-in-check voor mijn radiobuttons kan doen.

HTML code:

<form name="inschrijfmodule" action="contact.php" method="POST">

Naam:
<input type="text" name="naam">

Email:
<input type="text" name="email">

<input type="radio" name="groep" value="bd"> Lezer Brabants Dagblad<br>
<input type="radio" name="groep" value="mkb"> Ondernemer<br>
<input type="radio" name="groep" value="uvt"> Medewerker UvT

<input type="submit" value="Inschrijven">

</form>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  
 {
   $groep    = $_REQUEST['groep'];
   $to      = $_REQUEST['email'];
   $subject = "Bevestiging Inschrijving"; 
   $message = "Beste $groep,/n/n
    Bedankt dat u het 26ste symposium wil bijwonen./n
    Bij deze is aanwezigheid bevestigd./n
    Met vriendelijke groet,/n/n
    Symposium Na de Troonrede";
   $headers = "Afzender: Symposium Na de Troonrede";

   mail ($to, $subject, $message, $headers);

   echo "Bedankt voor het aanmelden.";
 } 

else
 {
   echo "Uw heeft uw niet alle velden ingevuld. Ga terug en probeer het opnieuw";
 }

?>


Alvast bedankt voor de moeite om hier naar te kijken
gr

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Komen de mails niet gewoon in je spam-folder. Het is overigens ook aan te raden om niet de mail functie te gebruiken maar iets als PHPMailer, dan heb je minder kans dat je mail als spam aangemerkt word, en ben je ook iets veiliger.

Zie ook http://gathering.tweakers...&where=Dit+forum#hitstart

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
  • Controleer waarde van $_POST['email'] (en gebruik dus aub niet $_REQUEST)
  • Controleer of groep ingevuld is als je dat blijkbaar wil. :z
  • Controller of groep 1 vd mogelijke waardes is, anders kan je zelf de tekst van het mailtje compleet omgooien.
  • Controleer de return value van mail
  • $headers slaat echt als een tang op een varken, in het protocol heet dat altijd 'From'. :Z
  • Zet display_errors aan inc. alle error_reporting
  • Stop met aanklooien en lees eens wat documentatie over user input, de mail functie, basic protocol stuff en nog wat PHP basics.

{signature}


Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Precies wat Woy zegt, PHPMailer is heel makkelijk te gebruiken, je download het pakket en dan include je die in je huidig bestand.

Je kan hem dan bijvoorbeeld initialiseren door middel van:
PHP:
1
$mailer = new PHPMailer(true); //true = voor mail functie dacht ik zo

De rest staat allemaal in de documentatie.

Verder kan ik je aanraden geen $_REQUEST te gebruiken, kies in dit geval gewoon post, ben je ten minste zeker dat niemand de info in de URL propt.

Acties:
  • 0 Henk 'm!

Verwijderd

$headers = "Afzender: Symposium Na de Troonrede";

Je mist From: headers ;), verder moet je /n vervangen door \r\n. Check of je webserver(/mailserver) op een blacklist staat: http://www.mxtoolbox.com/blacklists.aspx

Verder is $_REQUEST deprecated in php5 dacht ik, gebruik $_POST. Controleer ook of $_POST['email'] wel een emailadres is dat geldig is. Filter $_POST['groep'] ook.

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Controleer ook even de config instelling van SMTP in php.ini indien je windows gebruikt. Of die variabele ook gebruikt wordt in PHPMailer weet ik niet, dus als je dat gebruikt even de manual nakijken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tsja, /n in plaats van \n en dan ook nog een niet-bestaande "Afzender" header gebruiken... Iets zegt me dat de topicstarter er meer aan heeft om eens wat documentatie te gaan lezen over hoe email nou eigenlijk werkt. PHPMailer gebruiken lost in die zin het probleem op dat die in-depth kennis van email niet nodig is om mailtjes goed bezorgd te krijgen. Zie zelf maar wat je vindt dat je moet gebruiken. ;)
Verwijderd schreef op zondag 09 augustus 2009 @ 14:13:
Verder is $_REQUEST deprecated in php5 dacht ik, gebruik $_POST.
Ik geloof niet dat $_REQUEST deprecated is, maar als je het nodig hebt ben je wel verkeerd aan het programmeren. De enige plek waar $_REQUEST handig is, is ergens waar je niet weet of een variabele nou via een request of post method binnenkomt, of misschien toch in een cookie/sessie staat. En eigenlijk hoor je dat gewoon te weten. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • b12e
  • Registratie: Augustus 2009
  • Laatst online: 12-09 15:05
rutgerlak heeft volledig gelijk,

PostGETREQUEST
Input (veilig)input(onveilig)kan eender welke input zijn, is zeer onveilig. ?hallo is dan hetzelfde als $_REQUEST['hallo'], terwijl ik "hallo" post... dus mensen kunnen je post formulier omzeilen en gewoon een eigen sliert parameters in hun url-balk typpen


Je emailheaders kloppen ook niet helemaal, de meeste programma's gaan "Afzender" negeren.
PHP:
1
2
3
$headers = 'From:  Symposium Na de Troonrede <noreply@uwdomein.nl>' . "\r\n" .
    'Reply-To: noreply@uwdomein.nl' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();


nog even over je radio-buttons:

<input type="radio" name="geslacht" id="gesl-man" value="Man" /> <label for="gesl-man">Man</label>
<input type="radio" name="geslacht" id="gesl-vr" value="Vrouw" /><label for="gesl-vr">Vrouw</label>
PHP:
1
2
3
4
5
if(isset($_POST['geslacht']))
   //er is een geslacht gekozen
   echo "ah, je bent een " . $_POST['geslacht'];
else
   echo "kies een geslacht alstublieft.";


Dus:
  • Verander je $headers!
  • verander $_REQUEST naar een $_POST (=> veliger)
  • lees m'n klein radio-voorbeeld
  • have fun:)

[ Voor 97% gewijzigd door b12e op 09-08-2009 23:42 . Reden: tabel ]


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

b12e schreef op zondag 09 augustus 2009 @ 23:20:
rutgerlak heeft volledig gelijk,

PostGETREQUEST
Input (veilig)input(onveilig)kan eender welke input zijn, is zeer onveilig. ?hallo is dan hetzelfde als $_REQUEST['hallo'], terwijl ik "hallo" post... dus mensen kunnen je post formulier omzeilen en gewoon een eigen sliert parameters in hun url-balk typpen


[...]
Never trust user input! Alle input moet gechecked worden, dus ook je $_POST variabelen. Verder doe iets aan controle op spam, want ander wordt je formulier binnen no time gebruikt als spam verzender. Immers kan je met een scriptje zo email adressen met eigen berichten spammen.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

b12e schreef op zondag 09 augustus 2009 @ 23:20:
rutgerlak heeft volledig gelijk,

PostGETREQUEST
Input (veilig)input(onveilig)kan eender welke input zijn, is zeer onveilig. ?hallo is dan hetzelfde als $_REQUEST['hallo'], terwijl ik "hallo" post... dus mensen kunnen je post formulier omzeilen en gewoon een eigen sliert parameters in hun url-balk typpen
Sorry hoor, maar je verkoopt onzin door te zeggen dat rutgerlak volledig gelijk heeft; $_REQUEST is niet deprecated. Als het dat wel was, dan had je dat hier kunnen lezen. En bovendien is $_POST allesbehalve veilig, zoals hierboven ook al gezegd wordt. User input uit elke bron is onbetrouwbaar en goed afgevangen gebruik van $_REQUEST is onnoemelijk veel veiliger dan achteloos geschreven code die gebruik maakt van $_POST. Dat maakt $_REQUEST nog steeds niet een goeie keuze, maar wat jij hierboven schreef is gewoon niet waar of in elk geval niet volledig.
nog even over je radio-buttons:

<input type="radio" name="geslacht" id="gesl-man" value="Man" /> <label for="gesl-man">Man</label>
<input type="radio" name="geslacht" id="gesl-vr" value="Vrouw" /><label for="gesl-vr">Vrouw</label>
Ik zie geen enkel verschil met de code van de topicstarter afgezien van het label. Die extra check in je PHP-code is wel handig maar gaat alleen wat dingen iets netter afhandelen als het formulier niet ingevuld is.
Dus:
• verander $_REQUEST naar een $_POST (=> veliger)
Ehm...juist. Praktijkvoorbeeldje: er is een veldje op het formulier waar de gebruiker zijn mailadres kan invullen. Jij zet op basis daarvan een Reply-to header op deze manier:
PHP:
1
$headers .= 'Reply-to: '.$_POST['afzender']."\r\n";

Leuk en aardig, maar nu ga ik als kwaadwillende gebruiker daar lekker het volgende invullen:
random@mailadres.com\r\nBCC: adres@spamtarget.com, adres2@spamtarget.com, ...

Op die manier kan ik je mailformuliertje met wat header-injectie mooi gebruiken voor het versturen van spam...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • b12e
  • Registratie: Augustus 2009
  • Laatst online: 12-09 15:05
Ja waarom ook niet :)

Laten we lekker zelf dan maar beginnen spammen... een post is zoiezo veiliger dan een GET. laat staan een request. ik geef ook geen afzender-post op als emailheader, dat zou best wel dom zijn. Nee, in plaats daarvan geef ik enkel het "aan" adres als POST en probeer ik het formulier een beetje te corrigeren (juiste afsluiting van tags, om te beginnen), dan nog de IDs en labels, en ik toon ook maar hoe je checkt of er iets ingegeven is en hoe je radios gebruikt. Sorry als dat niet mag, maar dan denk ik dat ik beter niet tweakers help, dan kan ik beter mezelf bezig houden dan m'n tijd te verdoen hier, als dat is wat je vindt. Ik help maar - en toch geef ik rutgerlak gelijk. dan misschien niet over het moeilijke woordje daar, deprecated. wél over al de rest in z'n bericht.

edit: en nu lees ik dat ik niet zei "veilig" maar "veiliger"!. meeste mensen kunnen alleen shit toevoegen in de url, en kennen de trukjes niet om POSTs te sturen ;)

[ Voor 9% gewijzigd door b12e op 13-08-2009 00:04 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

b12e schreef op woensdag 12 augustus 2009 @ 23:53:
edit: en nu lees ik dat ik niet zei "veilig" maar "veiliger"!. meeste mensen kunnen alleen shit toevoegen in de url, en kennen de trukjes niet om POSTs te sturen ;)
Ja, dat klopt. Alleen mensen die je daadwerkelijk willen hacken of je site op een andere manier willen misbruiken zullen die truukjes kennen. Maar wacht even, wilden we die niet juist buiten houden...? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

b12e schreef op woensdag 12 augustus 2009 @ 23:53:
edit: en nu lees ik dat ik niet zei "veilig" maar "veiliger"!. meeste mensen kunnen alleen shit toevoegen in de url, en kennen de trukjes niet om POSTs te sturen ;)
In je tabel gaf je aan dat POST-variabelen veilig waren. Dat is gewoon niet het geval. Je moet POST-variabelen niet anders behandelen dan GET-variabelen. Dat is gewoon dom.

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 19-09 11:12
Zoals hierboven mij al 1000x is gezegd, je kunt geen user-input vertrouwen, hoe je het ook went of keert. Heb zelf wel eens gezien dat mensen de afzender / het adres naar een andere gebruiken in een cookie (ja in een cookie :|) gingen opslaan zodat het altijd werd onthouden. Dit ook nog zonder de data te filteren.

Zo kon je dus heel leuk even de cookie(s) aanpassen en je eigen spam-form creeëren. (Dit is dus duidelijk een techniek hoe je het niet moet aanpakken :)).

Ik begrijp trouwens niet waarom $_REQUEST nog niet deprecated is... Het levert totaal geen meerwaarde op, ik zie het eerder als security issue dan als echt iets wat handig is.
Pagina: 1