Hallo,
Ik heb een contactformulier dat ik via PHPMailer verstuur.
Ik heb alle bug-meldingen aan staan. Ik heb ook getest dat het formulier meldt wanneer er iets fout is.
Dus volgens mij, heb ik alles goed staan, en nadat ik SEND heb gedaan, krijg ik de melding dat het formulier succesvol verzonden is. Echter, de mail komt niet aan!!!
Ik heb ook spam en zo gechecked, maar daar ook niks.
Mijn code:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

	use PHPMailer\PHPMailer\PHPMailer;
	use PHPMailer\PHPMailer\Exception;

	require 'PHPMailer/src/Exception.php';
	require 'PHPMailer/src/PHPMailer.php';
	require 'PHPMailer/src/SMTP.php';
	
	//Set variables
	$firstname = $lastname = $email = $contactmessage = "";
	$err = array();
	$msg = "";
	
	//Make function to test the input data
	function test_input($data) {
		$data = trim($data);
		$data = stripslashes($data);
		$data = htmlspecialchars($data);
		return $data;
	}
	
	if ($_SERVER['REQUEST_METHOD'] == 'POST') {
		if (empty($_POST['firstname'])) {
			$err['firstname'] = "Firstname is required";
			//Limit length and strip HTML tags
		} else {
			$firstname = test_input($_POST['firstname']);
			if(!preg_match("/^[a-zA-Z ]*$/",$firstname)) {
				$err['firstname'] = 'Only letters and white space allowed!';
			}
		}
		if (empty($_POST['lastname'])) {
			$err['lastname'] = "Lastname is required";
			//Limit length and strip HTML tags
		} else {
			$lastname = test_input($_POST['lastname']);
			if(!preg_match("/^[a-zA-Z ]*$/",$lastname)) {
				$err['lastname'] = 'Only letters and white space allowed!';
			}
		}
		//Make sure the address they provided is valid before trying to use it
		if (empty($_POST['email'])) {
			$err['email'] = 'Email is required';
		} else {
			$email = test_input($_POST['email']);
			if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			  $err['email'] = "Invalid email format"; 
			}
		}
		//Apply some basic validation and filtering to the message
		if (empty($_POST['contactmessage'])) {
			$err['contactmessage'] = 'What is your message';
			//Limit length and strip HTML tags
		} else {
			$contactmessage = test_input($_POST['contactmessage']);
		}
		$name = $firstname.' '.$lastname;
		if (count($err) == 0)  {
			require_once '../../data/data.php';
			$mail = new PHPMailer;
			$mail->isSMTP();
			$mail->SMTPDebug = 4;
			$mail->Host = $host;
			$mail->Port = $port;
			$mail->SMTPSecure = 'ssl';
			$mail->SMTPAuth = true;
			$mail->Username = $user;
			$mail->Password = $pass;
				//It's important not to use the submitter's address as the from address as it's forgery,
				//which will cause your messages to fail SPF checks.
				//Use an address in your own domain as the from address, put the submitter's address in a reply-to
			$mail->setFrom = ($from.', '.$fromName);
			$mail->addReplyTo($email, $name);
			$mail->addAddress = ($addAddress.', '.$addName);
			$mail->Subject = 'Contact request';
			$body = 'Name: '.$firstname.' '.$lastname;
				$body .= '<br>Email: '.$email;
				$body .= '<br>Message: '.$contactmessage;
			$mail->Body = $body;
			$mail->AltBody = $body;
				
			//include_once '../../data/data.php';
			if ($mail->send()) {
				$success = "<p style='margin-left:10%;padding-bottom:2%;width:60%'><strong>Thank you for contacting us.<br>The following message is successfully sent:</strong><br>";
				$success .= $name."<br>".$email."<br>".$contactmessage."</p>"; 
				
			}		
			else {
				$fail= 'Mailer Error: ' . $mail->ErrorInfo;
			}
		}
	}
?>
Zet de Debug eens op 3.
Wat is de debug-error die je krijgt?
dat is het hem nou juist, ik krijg helemaal geen error. Ik krijg de melding dat de mail succesvol verstuurd is. Maar aankomen doet ie niet
Dan zou ik het eens bij je SMTP-provider zoeken.
Want als je geen foutmelding krijgt, en dus lijn 93 niet wordt aangeroepen, dan is de mail bij jouw gewoon verstuurd.
Oké thanks. Zal eens informeren bij de provider
<?php if(!preg_match("/^[a-zA-Z ]*$/",$firstname)) { ?>

Waarom mogen Willem-Alexander en Máxima jou niet mailen?

De "-" staat niet in je lijstje toegestane tekens, net als letters met accenten.
Er is nog wat voor te zeggen om tekens als < te willen vermijden, maar dit is een vrij botte manier.

---
<?php $mail->setFrom = ($from.', '.$fromName); ?>

Waar komen $from en $fromName vandaan?
Zijn die ingevuld? Als ontvangende mailserver zou dat zo maar een reden kunnen zijn om de mail niet te accepteren.
En als de server van jou dan zelf maar wat invult, is dat ook vast niet wat je wilde hebben.

Ik blijf altijd weer problemen houden met de preg_match functies, want natuurlijk mogen zij me wel mailen, maar mister<html> niet.
Ik heb uiteindelijk de fout gevonden. Ik heb de data voor user en password in een datafile buiten de domeinroot staan in een datafile. Ik had daar ook de variabele voor de setFrom en de addAddress in staat, maar dat kan kennelijk niet???
Ik heb deze twee nu direct ingevuld in de $mail->setFrom en de $mail->addAddress en nu gaat het wel goed.
Maar ik begrijp niet goed waarom het niet met een variabele werkt.
hoe ver buiten je docroot je mag kijken met php, is in te stellen.
Op shared hosting omgevingen is dat vaak strikter dan je zou willen.

open base dir restriction is mogelijk de fout melding die je kreeg?

En hou ook in de gaten, of je include rekent vanaf het huidige script, of vanuit het door de browser aangeroepen script en dan juist weer niet door een geinclude script.
Het is duidelijk dat de file wél gelezen wordt, want de gegevens van de user en de password komen uit diezelfde file.
Ik vermoed dat er iets niet goed is in de schrijfwijze van de setFrom gegevens.

In de datafile zet ik:

$from = '[email protected]';
$fromName = 'Mijn Website';

en in het php script komt dan:

$mail->setFrom = ($from.', '.$fromName);

Dit heb ik nu dus aangepast naar:

$mail->setFrom('[email protected]', 'Mijn Website');

Aangezien in deze laatste geen = voorkomt, vermoed ik dat de wijze van de variabelen invoeren niet juist is. Maar als ik daar het = teken weglaat, krijg ik ook een foutmelding
Dat zijn 2 verschillende aanroepen he.

<?php $mail->setFrom = ($from.', '.$fromName); ?>

hier stuur je 1 parameter naar setFrom: een string die begint met een email-adres en dan een komma en een naam.

In het 2e geval roep je de functie aan met 2 argumenten (beide argumenten gescheiden door een komma, zoals altijd in php)

Aanroep 1 zal mogelijk ook kunnen als je de string opbouwt met <> om het mailadres, maar dat is minder duidelijk

[size=xsmall]Toevoeging op 28/10/2019 16:50:31:[/size]

oh.
zie nu pas het = teken erbij staan:

setFrom is een function.

probeer het eens met

<?php $mail->setFrom($from, $fromName); ?>
Zou het dan zo moeten zijn?

<?php $mail->setFrom ($from, $fromName); ?>


[size=xsmall]Toevoeging op 28/10/2019 16:55:31:[/size]

:) Ja dus

Reageren