php mail() functie omzeilen spam filters

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Hallo allemaal,

Voor mijn website gebruik ik de mail() functie met een mail form om e-mails te versturen vanaf mijn website.

Mijn code ziet er als volgt uit:

PHP:
1
2
3
4
5
6
7
8
9
10
$mailTo = "info@steljevoor.nl";
$mailFrom = $_POST['emailFrom'];
$subject = $_POST['subject'];
$message = $_POST['message'];

$headers .= "Reply-To: ".$mailFrom.""; 
$headers .= "Return-Path: ".$mailFrom.""; 
$headers .= "From: ".$mailFrom.""; 
        
mail($mailTo, $subject, $message, $headers);


Dit heb ik deels van het internet waar word verteld dat je $headers moet gebruiken om een spam filter te omzeilen. Zie onder andere artikelen als;

http://www.velvetblues.co...ers-with-php-mail-emails/ &
http://www.transio.com/co...ass-spam-filters-php-mail

Dit werkt echter deels.
Mijn mail komt nu wel in mijn Postvak in terecht, maar het ingevulde e-mail adres in de input staat er niet in.
In plaats daarvan staat er (ik weet niet of het nuttige informatie is, maar wil verder geen reclame maken voor mijndomein.nl) 139580@mijndomein.nl een email van mijn host.

Iemand enig idee hoe ik dit kan oplossen?

Bij voorbaat dank!

Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Probeer een 5de parameter toe te voegen aan het mail commando:

dus:
PHP:
1
2
<?php
mail($mailTo,$subject,$message,$headers,'-f ' .  $mailFrom);


En anders zou ik je als advies willen geven om een library als Swiftmailer te gebruiken. Aangezien de standaard mailfunctie in PHP nogal bagger is :).

[ Voor 36% gewijzigd door Solopher op 01-10-2012 23:45 . Reden: Swiftmailer toegevoegd ]


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Wat Solopher zegt klopt, ware het niet dat als je de envelope-header wil gebruiken (-f), dat e-mailadres dan ook in de "trusted users" van je mail-verzend-programma moet staan (op Linux-bakken vaak /etc/mail/trusted-users). Als je wilt verzenden vanaf een user-inputted e-mailadres, lijkt me dat dus niet gemakkelijk mogelijk. Maar je moet je afvragen of je dat wel echt wil?
Als je een soort contact-formulier wil maken waar je direct op kunt replyen naar de invuller van het formulier, gebruik dan het Reply-To-adres, daar is het immers voor bedoeld. En gebruik dan als From-adres bijv. "noreply@domein.tld". Dat lijkt me veel logischer en veiliger.

Maar er is nog een probleem met je code, en dat is dat je je header-regels allemaal aan elkaar plakt. Je vergeet newlines in te voegen, waardoor je header-string er dus zo uit komt te zien:
code:
1
Reply-To: bla@domein.tldReturn-Path: bla@domein.comFrom: bla@domein.tld


Je snapt wel dat dat niet gaat werken. Daarom moet je een newline-character toevoegen na elke header-regel:
PHP:
1
2
3
$headers  = "Reply-To: ".$mailFrom."\n"; 
$headers .= "Return-Path: ".$mailFrom."\n"; 
$headers .= "From: ".$mailFrom."\n";

Probeer het daar eens mee. Misschien lost dat je probleem wel op.

Enneh, denk je ook nog even aan het filteren van je user-input? Rechtstreeks je $_POST (of GET) variabelen op deze manier gebruiken moet je echt niet doen. Brengt allerlei gevaren met zich mee, bovendien is dit script dan héél gemakkelijk voer voor spambotjes..

[ Voor 13% gewijzigd door HyperioN op 01-10-2012 23:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

En daarom moet je nou zelf niet met de mail() functie aan de gang gaan als je dat allemaal niet weet, en gewoon een bewezen mailer class gebruiken.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

En dat was ook meteen duidelijk geweest met een hele simpele zoekquery: zoeken naar "php mail spam" in Programming. Deze vraag komt eigenlijk elke maand wel weer eens voorbij en elke keer is het antwoord dat je beter een class kunt gebruiken die het wiel al voor je uitgevonden heeft. De manier om het waterdicht zelf op te lossen bestaat zelf ook, maar lijkt me nogal overdreven om in detail uit te dokteren voor iets dat eigenlijk een middel zou moeten zijn en geen doel.

'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.