Ik heb een website en die levert mij problemen op met de php mail functie. Iedere keer wanneer ik het een en ander opnieuw instel werkt het prima, echter alleen voor een paar dagen. Daarna krijg ik wel een succes bericht maar de mail wordt niet verstuurd. Als ik dan de betreffende pagina's van de server haal en vervolgens opnieuw upload werkt het weer een paar dagen en daarna weer niet. Ik heb met geen enkele andere website dit soort problemen. Deze website draait op een KPN server: cp.kpn.com. Ik heb geen idee of iemand dit herkent en/of mij kan vertellen hoe ik dit op kan lossen? Wellicht dat in een extern mail programma moet gebruiken? Elke suggestie is meer dan welkom
Je omschrijft je probleem wat vaag.
Dit kan van alles zijn.
Enkele suggesties:

- Je mail word als spam gezien, of word misbruikt als spambak, waardoor het word geblokkeerd?
- Je hebt een limiet op het versturen van mail?
- Je website is/word gehackt?

Kortom, zonder relevante code word het wat lastig om je goed te helpen.
Je zou eens kunnen kijken naar phpmailer of swiftmailer i.p.v. de mailfunctie van PHP.
Obelix en Idefix op 11/06/2017 12:02:20

Je zou eens kunnen kijken naar phpmailer of swiftmailer i.p.v. de mailfunctie van PHP.


.. met het voordeel vat phpMailer goed kan debuggen wat er fout gaat. Dit geldt dan alleen bij SMTP in gebruik.
Mja, dat zijn mail oplossingen.

Maar zou het geen beter plan zijn om eerst te kijken naar waarom het om de zoveel dagen het niet meer werkt?
Een script wat werkt verandert niet zomaar "opeens".
Daar moet een achterliggend probleem zitten.
Dat zou ik eerst oplossen alvorens het weer allemaal werkend te maken.
Als je de files verwijdert en opnieuw uploadt, werkt het weer??

Zit er een verschil tussen de file op de server en zoals je hem hebt geupload? Maw: verandert de file in de loop der tijd?

Dat lijkt me een serieus probleem.

Dat moet niet kunnen.
En anderzijds: als de scripts gelijk zijn, moet dat geen invloed hebben. Een php-script heeft geen max-houdbaarheidsduur.
Dit is de functie die ik gebruik:


<?php	  
    $ontvangers = array(
        "[email protected]",
	"[email protected]"
    );

    $aan     	        = implode(',', $ontvangers);
    $berijfs_naam       = 'Canton Chinees Specialiteiten Restaurant';
    $bedrijfs_email     = '[email protected]';
    $onderwerp    	= filter_input(INPUT_POST, 'onderwerp', FILTER_SANITIZE_STRING);
    $naam               = filter_input(INPUT_POST, 'naam', FILTER_SANITIZE_STRING);
    $email      	= filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
    $telefoon           = filter_input(INPUT_POST, 'telefoon', FILTER_SANITIZE_STRING);
    $personen           = filter_input(INPUT_POST, 'personen', FILTER_SANITIZE_STRING);
    $daydropdown        = Trim(stripslashes($_POST['dagdropdown']));
    $monthdropdown      = Trim(stripslashes($_POST['monthdropdown'])); 
    $yeardropdown       = Trim(stripslashes($_POST['yeardropdown']));
    $hourdropdown       = Trim(stripslashes($_POST['hourdropdown'])); 
    $minutedropdown     = Trim(stripslashes($_POST['minutedropdown']));
    $wensen             = filter_input(INPUT_POST, 'wensen', FILTER_SANITIZE_STRING);
	
		 	
    $bericht 		= "";
    $bericht 	       .= "<b>Online reservering gemaakt door:</b> ";
    $bericht 	       .= "<br><br><br>";
    $bericht           .= "<b>Naam:</b> ";
    $bericht           .= $naam;
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Email:</b> ";
    $bericht           .= $email;
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Telefoon:</b> ";
    $bericht           .= $telefoon;
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Aantal personen:</b> ";
    $bericht           .= $personen;
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Datum:</b> ";
    $bericht           .= $daydropdown;
    $bericht           .= " ";
    $bericht           .= $maand;
    $bericht           .= " ";
    $bericht           .= $yeardropdown;
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Tijd:</b> ";
    $bericht           .= $hourdropdown;
    $bericht           .= ":";
    $bericht           .= $minutedropdown . " uur";
    $bericht           .= "<br><br>";
    $bericht           .= "<b>Speciale wensen:</b>";
    $bericht           .= "<br><br>";
    $bericht           .= $wensen;


    $headers	        = 'From: ' . $berijfs_naam . ' <' . $bedrijfs_email . '>' . "\r\n" . 
			  'Reply-To: ' . $naam . ' <' . $email  . '>' . "\r\n" .
			  'Return-Path: Mail-Error <' . $bedrijfs_email . '>' . "\r\n" .
			  'X-Mailer: PHP/' . phpversion() . "\r\n" .
			  'X-Priority: 1 (Highest)' . "\r\n" .
			  'X-MSMail-Priority: High' . "\r\n" .
			  'Importance: High' . "\r\n" .
			  'MIME-Version: 1.0' . "\r\n" .
			  'Content-type: text/html; charset=iso-8859-1' . "\r\n";
						   
    $verzenden          =  @mail ($aan, $onderwerp, $bericht, $headers);		

  ?>
En als je nu eens GEEN foutmeldingen met de @ onderdrukt?
Wow, $berijfs_naam lijkt een consequente spellingsfout :p.

Maar inderdaad, waaruit blijkt dat er iets misgaat?

Het succesvol verzenden (de return-waarde van mail(), gevangen in $verzenden - doe je ook ergens iets met de waarde van deze variabele?) is geen garantie voor ontvangen. En onderweg kan er ook van alles misgaan (queue wordt niet leeggehaald, spamfilter, inbox vol etc.).

Vanuit PHP "verstuurde" berichten (met mail()) komen meestal elders in een wachtrij terecht. Deze moet weer uitgelezen worden zodat mail (verder) verstuurd wordt. In het verleden had ik serieus een provider die zei dat het niet hun probleem was dat de queue niet werd leeggehaald :p.

Misschien is het een kwestie van dit proces een schop geven, of de frequentie waarmee deze wachtrij leeggehaald wordt verhogen. Tegelijkertijd zou je eens naar de broncode van (output van) de mail kunnen kijken hoe deze er uitziet, en of deze eventueel een spamscore heeft. En dan nagaan hoe deze score omlaag gehaald kan worden.

Of eens na gaan denken hoe deze reserveringsfunctionaliteit verder geïntegreerd kan worden in een systeem/website. Een systeem via e-mail lijkt mij nogal riskant omdat:
- er blijkbaar geen garantie voor ontvangst is (wat nogal genante situaties kan creëren als iemand in de veronderstelling is dat deze gereserveerd heeft, waar dit verhaal mogelijk mee begon :p)
- er (verder) geen historie is van een reservering als deze nooit aankomt
ik vind het trouwens nogal opmerkelijk dat in 1 script zowel de functie filter_input() voorkomt als stripslashes()

De setting die stripslashes mogelijk nodig maakt, bestaat toch al sinds php 5.4 niet meer. En volgens mij was hij al eerder standaard OFF.

Is zou op die regels ook liever filteren alsof het een string is.
Danwel: in de opbouw van de email htmlspecialchars() gebruiken.

Weghalen van mogelijke (of onmogelijke) slashes levert geen voordeel, maar weghalen van <script>eviljavascript()</script> uit je maandkeuze wel.
Het probleem is dus weer aanwezig. Ik heb de meeste tips ter harte genomen. Mailbox zit niet vol. Heb het mail gedeelte als volgt aangepast:

    public function reservering_verzendenAction()
    {			
		$ontvangers = array(
			"[email protected]"      
		);
		
		setlocale(LC_TIME, 'nl_NL');
		setlocale(LC_TIME, 'nld_nld'); // Windows
		setlocale(LC_TIME, 'nl_NL', 'nld_nld');
		$aan                = implode(',', $ontvangers);
		
		$berijfs_naam       = 'Canton Amsterdam';
		$bedrijfs_email     = '[email protected]';
		
		$onderwerp          = filter_input(INPUT_POST, 'onderwerp', FILTER_SANITIZE_STRING);		
        $naam               = filter_input(INPUT_POST, 'naam', FILTER_SANITIZE_STRING);
        $e_mail             = filter_input(INPUT_POST, 'e_mail', FILTER_SANITIZE_STRING);
	    $telefoon           = filter_input(INPUT_POST, 'telefoon', FILTER_SANITIZE_STRING);
		$personen           = filter_input(INPUT_POST, 'personen', FILTER_SANITIZE_STRING);
		$datum			    = filter_input(INPUT_POST, 'datum', FILTER_SANITIZE_STRING);
		$tijd               = filter_input(INPUT_POST, 'tijd', FILTER_SANITIZE_STRING);
	    $wensen             = filter_input(INPUT_POST, 'wensen', FILTER_SANITIZE_STRING);
		
		
		$bericht            = new View('partials/reservering_mail.php', compact('naam', 'e_mail', 'telefoon', 
		'personen', 'datum', 'tijd', 'wensen'));


		$headers	        =  'From: ' . $berijfs_naam . ' <' . $bedrijfs_email . '>' . "\r\n" . 
							   'Reply-To: ' . $naam . ' <' . $e_mail . '>' . "\r\n" .
						       'Return-Path: Mail-Error <' . $bedrijfs_email . '>' . "\r\n" .
						       'X-Mailer: PHP/' . phpversion() . "\r\n" .
						       'X-Priority: 1 (Highest)' . "\r\n" .
						       'X-MSMail-Priority: High' . "\r\n" .
						       'Importance: High' . "\r\n" .
						       'MIME-Version: 1.0' . "\r\n" .
						       'Content-type: text/html; charset=iso-8859-1' . "\r\n";	
		
		$verzenden          = mail ($aan, $onderwerp, $bericht->render(), $headers);
		
		if ( $verzenden == TRUE )
		{
			$reservering_succes = new View('partials/reservering_succes.php', compact('naam'));
			echo $reservering_succes->render();		
		}
	}


Zou ik wellicht, zoals Obelix en Idefix al voorstelde, een extern mail programma moeten gebruiken?

Alvast bedankt

Reageren