[PHP] Contactformulier icm phpmailer verstuurt niet alles

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 05-06 14:11

mickjuh

Good news everyone!

Topicstarter
Beste Tweakers.

In een website heb ik een contactformulier zitten die dmv van phpmailer het formulier verstuurd. Echter komen naar mijn mening maar 50% van deze ingevulde formulieren ook daadwerkelijk aan. Ik heb bijvoorbeeld gisteren om 12:00 uur drie keer het contactformulier ingevuld (zowel getest in IE6, IE8 en FF3.6). Deze kwamen ook alle drie aan in mijn e-mail. Om 16:00 uur dezelfde dag weer wat formulieren ingevuld maar deze kwamen allemaal niet in mijn e-mail. Ik heb overigens voor de zekerheid een e-mail adres aangemaakt onder het zelfde domein.

Nu vraag ik me dus zwaar af of het aan de code ligt of aan het bedrijf waar ik de website host (pcextreme.nl).

Hier onder zal ik in ieder geval wat code laten zien wat naar mijn mening relevant is. Ik hoop echt dat iemand me uit de brand kan helpen want ik zou echt niet meer weten waar het aan kan liggen.

contact.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
require_once("php/contact.inc.php");
require_once("php/phpmailer/class.phpmailer.php");

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
        contact_verzenden($_POST['naam'], $_POST['email'], $_POST['opmerking']);
}

?>

Het formulier begin ik met:

<form name="contact" method="post" action="index.php?pag=contact" onSubmit="return Check()">

Het formulier wordt wel gechecked met javascript via de functie Check


contact.inc.php
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?
// Functie om het contactformulier te versturen.
function contact_verzenden($naam, $email, $opmerking)
{
    $inhoud = "<html>\n";
    $inhoud .= "<head>\n";
    $inhoud .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
    $inhoud .= "<meta content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\">\n";
    $inhoud .= "<title>Vraag via eigenwijsinkunst.nl</title>\n";
    $inhoud .= "</head>\n";
    $inhoud .= "<body>\n";
    $inhoud .= "<table cellspacing=\"0\" cellpadding=\"0\">\n";
    $inhoud .= "<tr align=\"left\" valign=\"top\">\n";
    $inhoud .= "<td width=\"100\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Naam:</font></td>\n";
    $inhoud .= "<td width=\"10\">&nbsp;</td>\n";
    $inhoud .= "<td><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">".$naam."</font></td>\n";
    $inhoud .= "</tr>\n";
    $inhoud .= "<tr align=\"left\" valign=\"top\">\n";
    $inhoud .= "<td width=\"100\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">E-mail:</font></td>\n";
    $inhoud .= "<td width=\"10\">&nbsp;</td>\n";
    $inhoud .= "<td><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">".$email."</font></td>\n";
    $inhoud .= "</tr>\n";
    $inhoud .= "<tr align=\"left\" valign=\"top\">\n";
    $inhoud .= "<td width=\"100><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">Opmerking:</font></td>\n";
    $inhoud .= "<td width=\"10\">&nbsp;</td>\n";
    $inhoud .= nl2br("<td><font face=\"Arial, Helvetica, sans-serif\" size=\"2\">".$opmerking."</font></td>\n");
    $inhoud .= "</tr>\n";
    $inhoud .= "</table>\n";
    $inhoud .= "</body>\n";
    $inhoud .= "</html>\n";

    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->Host = "mail.pcextreme.nl";

    // Geef aan dat het een HTML mail betreft
    $mail->IsHTML(true);
    
    $mail->From     = "postmaster@website.nl";
    $mail->FromName = "website";
    $mail->AddAddress("email@adres.nl", "Website");
    $mail->AddReplyTo($email, $naam);
    $mail->Subject     = "Contactbericht via de website";

    // Alternatieve body
    $mail->Body     = $inhoud;
    
    $mail->send();

    header ("Location: index.php?pag=contact&actie=verzonden");
    exit();
?>


De phpmailer versie die ik gebruik is 2.3. De php versie die pcextreme gebruikt is: 5.2.4-2ubuntu5.9

Ik hoop dat iemand me verder kan helpen. Mocht er nog wat nodig zijn hoor ik dat graag. Alvast bedankt :)

[ Voor 28% gewijzigd door mickjuh op 05-03-2010 14:49 ]


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 15-06 12:57
Zet daaronder gewoon even een mail()-functie die heel lame "TEST" naar jouw email stuurt, als die wel constant aankomt ligt het aan PHPmailer, als die niet aankomt ligt het aan je hoost \o/

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Waar is de functie contact_verzenden()? Geef eens een volledig PHP-bestand en niet een klein stukje. Want datgene wat je hier plaatst gaat sowieso niet werken.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

De afzender moet bekend zijn in het WSCP paneel van je website (bij PCExtreme). Dit om spam te vermijden.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 05-06 14:11

mickjuh

Good news everyone!

Topicstarter
_eXistenZ_ schreef op vrijdag 05 maart 2010 @ 13:23:
Zet daaronder gewoon even een mail()-functie die heel lame "TEST" naar jouw email stuurt, als die wel constant aankomt ligt het aan PHPmailer, als die niet aankomt ligt het aan je hoost \o/
Dat kan ik ook inderdaad nog eens proberen. Thanks!
HuHu schreef op vrijdag 05 maart 2010 @ 13:27:
Waar is de functie contact_verzenden()? Geef eens een volledig PHP-bestand en niet een klein stukje. Want datgene wat je hier plaatst gaat sowieso niet werken.
Aangepast, zie eerste post. In contact.php zit dan wel het formulier maar daarvan heb ik denk ik de belangrijkste dingen gepost. Denk niet dat het spannend is om het formulier te zien toch?
Snake schreef op vrijdag 05 maart 2010 @ 13:33:
De afzender moet bekend zijn in het WSCP paneel van je website (bij PCExtreme). Dit om spam te vermijden.
Oke, ik heb de afzender nu zo ingesteld dat het e-mail adres dat ze invullen de afzender is. Dit is makkelijk om te reply-en op een bericht die je via de e-mail binnen krijgt. Of is het verstandig om toch het e-mail adres te gebruiken die ik in WSCP paneel heb aangemaakt?

Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 13:10

MueR

Admin Tweakers Discord

is niet lief

Je bent niet bekend met Reply-to (of de code tag)?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

mickjuh schreef op vrijdag 05 maart 2010 @ 13:58:
[...]


Dat kan ik ook inderdaad nog eens proberen. Thanks!


[...]


Aangepast, zie eerste post. In contact.php zit dan wel het formulier maar daarvan heb ik denk ik de belangrijkste dingen gepost. Denk niet dat het spannend is om het formulier te zien toch?


[...]


Oke, ik heb de afzender nu zo ingesteld dat het e-mail adres dat ze invullen de afzender is. Dit is makkelijk om te reply-en op een bericht die je via de e-mail binnen krijgt. Of is het verstandig om toch het e-mail adres te gebruiken die ik in WSCP paneel heb aangemaakt?

Alvast bedankt :)
Neen de afzender is gewoon postmaster@jouwdomein.nl

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Even los van je probleem, volgens mij check je verder echt niet de userinput en dat is erg belangrijk. Voor je t weet wordt je systeem gebruikt als machine om spam te versturen. Verder kom ik nog meer slordigheden tegen die je even moet gaan bestuderen :)

PHP:
1
<form name="contact" method="post" action="<?php echo"".$_SERVER['PHP_SELF'].""; ?>?pag=contact" onSubmit="return Check()">

Gewoon bij action de eigen pagina invullen, dit kan mogelijk voor XSS-aanvallen zorgen.
Het formulier wordt wel gechecked met javascript via de functie Check
Clientside validatie moet je nooit vertrouwen, het kan enkel gebruiksvriendelijk zijn voor je gebruikers.

PHP:
1
header ("Location: index.php?pag=contact&actie=verzonden");

Je vergeet de die(); of exit(); na je header, requests hoeven niet perse te komen van een client die deze headers opvolgen.

PHP:
1
$mail->From = "".$email."";

Waarom plaats je lege strings om je variabele heen?

Acties:
  • 0 Henk 'm!

  • XyritZz
  • Registratie: Augustus 2003
  • Laatst online: 04-06 13:41
Als het goed is geeft de send functie van PHPMailer een boolean terug, true wanneer het verzenden is gelukt en false wanneer het verzenden niet is gelukt. Als je daar een check op toevoegt en bijv. een standaard line toevoegt aan een log bestandje wanneer de send functie false terug geeft kun je altijd zien of het in PHPMailer fout gaat.

Persoonlijk zou ik dit soort formulieren anders opzetten, het posten van het formulier slaat alle gegevens op in een database en door middel van een cronjob ga ik de e-mails versturen.

Bij elk record in de database hou ik dan een boolean bij of de gegevens al verzonden zijn, deze boolean komt alleen op 'verzonden' te staan wanneer PHPMailer->send() true terug geeft. Als het versturen dan een keer fout gaat (om welke reden dan ook) zal je script de volgende keer nogmaals proberen die e-mail te versturen en raak je in ieder geval geen gegevens kwijt.

I think there is a world market for maybe five computers. - Thomas Watson (1874-1956), Directeur van IBM (1943)


Acties:
  • 0 Henk 'm!

  • mickjuh
  • Registratie: Mei 2004
  • Laatst online: 05-06 14:11

mickjuh

Good news everyone!

Topicstarter
Nee, was ik niet bekend mee. Heb de eerste post aangepast met de code-tag. Ook de reply-to bijgevoegd en net een test weer verstuurd. Alweer geen e-mail binnen gekregen helaas.
Snake schreef op vrijdag 05 maart 2010 @ 14:09:
[...]

Neen de afzender is gewoon postmaster@jouwdomein.nl
Oke thanks. Heb deze toegevoegd.
Cartman! schreef op vrijdag 05 maart 2010 @ 14:18:
Even los van je probleem, volgens mij check je verder echt niet de userinput en dat is erg belangrijk. Voor je t weet wordt je systeem gebruikt als machine om spam te versturen. Verder kom ik nog meer slordigheden tegen die je even moet gaan bestuderen :)

PHP:
1
<form name="contact" method="post" action="<?php echo"".$_SERVER['PHP_SELF'].""; ?>?pag=contact" onSubmit="return Check()">

Gewoon bij action de eigen pagina invullen, dit kan mogelijk voor XSS-aanvallen zorgen.


[...]

Clientside validatie moet je nooit vertrouwen, het kan enkel gebruiksvriendelijk zijn voor je gebruikers.

PHP:
1
header ("Location: index.php?pag=contact&actie=verzonden");

Je vergeet de die(); of exit(); na je header, requests hoeven niet perse te komen van een client die deze headers opvolgen.

PHP:
1
$mail->From = "".$email."";

Waarom plaats je lege strings om je variabele heen?
Bedankt voor alle tips. Heb ze bijna allemaal doorgevoerd op het javascript ding na. Denk dat ik daar nog wel naar ga kijken of ik dat ook met php kan afvangen.

Net weer een test verstuurd maar helaas niets binnen gekregen. Denk dat ik toch maar eens moet gaan afvangen zoals XyritZz zegt om te kijken of er fouten optreden tijdens het versturen.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
mickjuh schreef op vrijdag 05 maart 2010 @ 14:53:
[...]

Bedankt voor alle tips. Heb ze bijna allemaal doorgevoerd op het javascript ding na. Denk dat ik daar nog wel naar ga kijken of ik dat ook met php kan afvangen.
Dat is echter misschien wel de belangrijkste in dit geval, die zou ik prioriteit geven :)
Pagina: 1