PHP Mailer - Contact form

Pagina: 1
Acties:
  • 152 views

Verwijderd

Topicstarter
Ik heb een website waarbij een reactie kan worden verzonden per onderstaand PHP-script:

code:
1
2
3
4
5
6
7
8
9
10
11
<?php

$Name = "Da Duder"; //senders name
$email = "email@adress.com"; //senders e-mail adress
$recipient = "PersonWhoGetsIt@emailadress.com"; //recipient
$mail_body = "The text for the mail..."; //mail body
$subject = "Subject for reviever"; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields

mail($recipient, $subject, $mail_body, $header); //mail command :)
?>


Deze code werkt out of the box in PHP. In maak gebruik van Ideal om na betaling een mail te versturen naar een mail-adres wat via de database bekend staat.

Ik heb hiervoor een coder ingehuurd om het e.a voor mij te doen. Hiervoor is een vast tarief afgesproken, en onderhand zijn we vastgelopen. Wanneer je de volgende code uitvoert op een default Centos-webserver met PHP5 / Apache en dergelijk uitvoert krijgt alleen de CC de uiteindelijke email, maar wordt de mail naar de oorspronkelijke ontvanger niet uitgevoerd. Deze verdwijnt blijkbaar in /dev/null/.

code:
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
<?php

function checkmail($email){
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' and version_compare(PHP_VERSION, '5.3.0') === -1) {
        return preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $email);
    }
    
    if(preg_match('#.+@(?<host>.+)#',$email,$match) > 0 and getmxrr($match['host'],$mxhosts)){
          $valid = false;
              while($host = next($mxhosts) and !$valid){
              $valid = checkdnsrr($host, 'A') or checkdnsrr($host,'AAAA');
          }
           return $valid;
     }
     return false;
}

if(isset($_GET['actie']) == "v")  {
        $naam = addslashes($_POST['naam']);
        $email = $_POST['email'];
        $profiel = addslashes($_POST['profiel']);
        $bericht = addslashes($_POST['bericht']);
        $profiel = $row[0];

     if(empty($naam)){ $error= "<li> U heeft geen naam ingevuld.</li>";  }
     if(empty($email)){ $error.= "<li> U heeft geen e-mail adres ingevuld.</li>";    }
     if(empty($bericht)){ $error.= "<li> U heeft geen bericht ingevuld.</li>"; }
 
    // if(!checkmail($email)){ $error.= "<li> U heeft geen geldig e-mail adres ingevuld.</li>"; }
     if(!is_string(filter_var($email,FILTER_VALIDATE_EMAIL))){ $error.= "<li> U heeft geen geldig e-mail adres ingevuld.</li>";  }
     if(!preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $_POST['email'])){ $error.= "<li> U heeft ongeldig teken in uw e-mail adres staan.</li>"; }
     
     if(isset($error) == true){
     echo "Er zijn de volgende fouten opgetreden:<ul>".$error.'</ul><p>Klik <a target="_self" href="javascript:history.go (-1);">hier</a> om terug te gaan en het formulier aan te passen!</p>';
     } else {

 
        mysql_query("INSERT INTO `database` (`naam`, `email`, `profiel`, `bericht`,`betaalcode`) VALUES ('$naam', '$email', '$profiel, '$bericht', '".$_COOKIE['betaalcode']."')") or die (mysql_error());


Bovenstaande code is onderhand wel 10x nagelopen, en behoort gewoon te functioneren. Out of the box testen gaat ook gewoon prima. Je zou zeggen het ligt aan de cookie(s) die worden gebruikt voor een betaling via ideal. Maar niets is minder waar. Op een windows gebaseerde webserver werkt het prima. De mail komt aan en ook de CCér wordt verzonden.

Ik heb beide webservers naast elkaar vergeleken, en kan niets anders opmaken dan dat het om een incompatibility gaat tussen het script of beide machines. Ze draaien beide dezelfde software (PHP5, Apache, Mysql en de hele reut inclusief dezelfde settings, cookies, cache enz via PHPInfo). We komen er gewoon niet uit.

Omdat ik jaarlijks 250 euro betaal voor webhosting is ineens overstappen een beetje zonde aangezien ik dan extra zou moeten bijbetalen voor Windows webhosting. Daarnaast ben ik met iets bezig wat aardig wat traffic zou kunnen veroorzaken, wat zonde is om extra voor bij te moeten betalen terwijl ik zelf al webhosting heb.

Nu is mijn vraag zozeer of iemand nog een slinger in de juiste richting kan geven met betrekking tot op gebruik van script/website op een CentOS machine ipv Windows. Mijn webhoster heeft onderhand een leger van TD's losgelaten op zijn configuratie(s) maar kan niet meer concluderen dat de servers qua instellingen nagenoeg identiek zijn, op CentOS / Windows Server na. Ideal werkt bijna op elke type webserver, en het bovenstaand script werkt out of the box prima op een Windows webserver. Hetgeen wat ik in gedachten had is om de cruciaale bestanden te gebruiken op de Windows webserver en de statische bestanden (heel wat) op een 2de webserver te plaatsen.

Beide machines zijn rap genoeg en de interconnects naar buiten toe zou je niet eens mogen merken dat er vanaf een 2de machine wordt geladen. Hiermee zou ik de kosten op een Windows webhosting kunnen besparen.

Edit: Kom er net achter dat de reden waarom een CC naar mijn adres wel werkt is omdat het local is, en een uitgaande mail iets met een te strakke policy te maken heeft aan de andere kant. Wellicht geen goede DNS en / of fysieke web of mailserver. Ik heb het probleem nog eens voorgelegd met wat extra nieuwe details en hopelijk komen zij met een oplossing.

[ Voor 3% gewijzigd door Verwijderd op 24-12-2009 01:29 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 24 december 2009 @ 00:54:
Ik heb hiervoor een coder ingehuurd om het e.a voor mij te doen.
Is 'ie duur? :X
Wijs 'm even naar Debuggen: Hoe doe ik dat?. Debuggen, logfiles nakijken, en inderdaad mailserver's even checken blablabla. Standaard riedeltje afwerken.

Gezien het (uiteindelijke) probleem geheid in (mail)serverconfiguratie zit (relaying en stuff) zie ik verder even geen discussiewaarde meer in dit topic dat met PRG te schaften heeft en je bent nog/weer met hem/je hoster in overleg dus daar kunnen wij ook even niet veel meer mee.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Dit topic is gesloten.