ich habe für meine Webseiten und zwei Kunden den PHPMailer verbaut. Ich hatte zuvor Formulare von Werner Zenks Generator, nur diese funktionierten nicht mehr mit PHP 8.x
Für diese neue PHPMailer-Version habe ich ein "sendmail.php" Script sowie ein "mailscript.php" (das mit SMTP-Login arbeitet). Beide Scripte funktionieren auch über meine IONOS und Hetzner Tarife.
Bei der Kundenwebsite, um die es hier geht, bekomme ich aber beim Absenden (sendmail.php) einen Error 500. Ich habe schon den Hoster kontaktiert. Ist aber so ein amerikanischer Billighoster (one.com), mit einem sehr unmotivierten Support. Man hat mir jetzt gnädiger Weise die PHP-Fehlermeldungen aktiviert:
Fatal error: Uncaught Error: Call to undefined function PHPMailer\PHPMailer\popen() in /customers/4/f/7/xxxx.de/httpd.www/PHPMailer-master/src/PHPMailer.php:1749 Stack trace: #0 /customers/4/f/7/xxxx.de/httpd.www/PHPMailer-master/src/PHPMailer.php(1641): PHPMailer\PHPMailer\PHPMailer->sendmailSend('Date: Fri, 17 F...', 'Kontaktformular...') #1 /customers/4/f/7/xxxx.de/httpd.www/PHPMailer-master/src/PHPMailer.php(1481): PHPMailer\PHPMailer\PHPMailer->postSend() #2 /customers/4/f/7/xxxx.de/httpd.www/sendmail.php(79): PHPMailer\PHPMailer\PHPMailer->send() #3 {main} thrown in /customers/4/f/7/xxxx.de/httpd.www/PHPMailer-master/src/PHPMailer.php on line 1749
Wenn jemand nun fragen möchte, wieso man bei so einem Hoster hostet oder wieso kein mailscript.php verwendet wird:
Ich habe den Kunden über eine Agentur, Kunde und Agentur sind völlig chaotisch und haben null technisches Verständnis. Ich warte schon 2 Wochen auf die Logins von dem Hoster, aber der Kunde weiß nicht wo die sind. Wahrscheinlich weiß diesen nicht einmal, wo er hostet. Seine MX-Records verweisen auf Microsoft, da Exchange genutzt wird. Gibt also kein SMTP mehr über diese Domain und wenn über Exchange, müsste man die Lizenzen erweitern (hat mir der aktuelle EDV-"Betreuer" gesagt. Der hat mit one.com aber auch nichts am Hut). Also wäre sendmail das Einfachste - wenn es denn funktionieren würde, wie bei IONOS und Hetzner (das sind meine Hoster).
Ich kann hier noch das sendmail.php posten:
Code: Alles auswählen
<?php
/*
* sendmail.php versenden mit Spamschutz gegen Bots
* Version vom 16.10.2021
*
* Erfolgreich getestet mit: PHPMailer Version: 6.5.0
*/
// PHP Fehlermeldungen (1 um das Formular zu testen) anzeigen.
error_reporting(1); // (1)
// PHPMailer einbinden
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require "PHPMailer-master/src/Exception.php";
require "PHPMailer-master/src/PHPMailer.php";
require "PHPMailer-master/src/SMTP.php";
// Danke und Fehlerseite
$dankeSeite = "index.php"; // Danke - Seite, die Mail wurde erfolgreich versandt.
$fehlerSeite = "index.php"; // Fehler - Seite, falls die Mail nicht versandt werden konnte.
// Betreff
// Jede E-Mail benötigt einen Betreff, da jedoch im Formular kein
// entsprechendes Feld gesetzt wurde, wird ein fester Betreff hinzugefügt.
$betreffEmail = "Kontaktformular xxxx.de";
// Wurden POST-Daten gesendet?
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST["field"])) {
// Zeitzone und das aktuelle Datum setzen
date_default_timezone_set("Europe/Berlin");
$datum = date("d.m.Y H:i");
// HTML-Tags entfernen
$_POST = array_map('strip_tags', $_POST);
// Inhalt der E-Mail setzen
$inhaltEmail = "Kontaktformular xxxx.de,
gesendet am: $datum Uhr
Nachfolgende Daten wurden angegeben:
Name, Vorname: " . $_POST["name_vorname"] . "
Ihr geplantes Projekt: " . $_POST["ihr_geplantes_projekt"] . "
Unternehmen: " . $_POST["unternehmen"] . "
Straße, Hausnummer: " . $_POST["strasse_hausnummer"] . "
PLZ, Ort: " . $_POST["plz_ort"] . "
Telefonnummer: " . $_POST["telefon"] . "
Telefaxnummer: " . $_POST["telefax"] . "
E-Mail: " . $_POST["email"] . "
Ihre Nachricht: " . $_POST["nachricht"] . "
Datenschutzhinweise akzeptiert: " . $_POST["datenschutz"] . "
";
// Instanz und Zeichenkodierung setzen
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
// Servereinstellungen
$mail->isSendmail();
// Absender und Empfänger
$mail->setFrom("info@xxxx.de"); // Absender
$mail->addAddress("info@xxxx.de"); // Empfänger
// Betreff und Body setzen
$mail->Subject = $betreffEmail;
$mail->Body = $inhaltEmail;
// E-Mail versenden
if ($mail->Send()) {
header("Location: " . $dankeSeite);
}
else {
header("Location: " . $fehlerSeite);
}
}
}
?>
Danke im Voraus und viele Grüße
Gersh