Bei Hotmail muss wohl der SMTP-Server und die Mailadresse, an die das Formular geschickt wird, dieselbe sein.
Dann bleib ich wohl bei Google.
Bei Hotmail muss wohl der SMTP-Server und die Mailadresse, an die das Formular geschickt wird, dieselbe sein.
Dann bleib ich wohl bei Google.
Achso, klingt logisch. Danke!
Das habe ich allerdings hier so nicht rausgelesen.
Warum ist das überhaupt nötig? Es stört doch eigentlich keinen.
Die Daten von Outlook findet man hier. Hat aber nicht geklappt. Die Authentifizierung klappt, aber es wird danach trotzdem angezeigt als wäre eine falsche Mailadresse eingegeben.
Erstmal ist alles gut und am Ende steht dann folgendes:
Zitat
2021-05-14 19:28:03 SERVER -> CLIENT: 554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 0.35250:0A002D67, 1.36674:0A000000, 1.61250:00000000, 1.45378:02000000, 1.44866:67020000, 1.36674:0E000000, 1.61250:00000000, 1.45378:6C020000, 1.44866:94010000, 16.55847:F8020000, 17.43559:0000000024020000000000000000000000000000, 20.52176:140F21901A004010F1030000, 20.50032:140F21908A174010F1030000, 0.35180:00000000, 255.23226:0
2021-05-14 19:28:03 SMTP ERROR: DATA END command failed: 554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 0.35250:0A002D67, 1.36674:0A000000, 1.61250:00000000, 1.45378:02000000, 1.44866:67020000, 1.36674:0E000000, 1.61250:00000000, 1.45378:6C020000, 1.44866:94010000, 16.55847:F8020000, 17.43559:0000000024020000000000000000000000000000, 20.52176:140F21901A004010F1030000, 20.50032:140F21908A174010F1030000, 0.35180:00000000, 255.23226:0
SMTP Error: data not accepted.
Ja, das schon. Weil ich das mit den Tipps von dir und von der Tutorial-Seite nicht rausbekommen habe. Und da es ja nur eine Notiz ist und die eine Seite ja schrieb, dass das auch gar nicht so wichtig sei, das wegzubekommen, habe ich mich erstmal drum gekümmert, dass das Ding sonst läuft.
Ich verstehe ja nicht, warum das Ding mit Gmail läuft, mit den Daten vom Hoster aber nicht. Der Hoster meinte, es sei alles richtig angegeben. Allerdings lande ich da in einem Timeout mit Server Error 503, jedenfalls mit TLS und Port 465 (so die Daten vom Hoster). Mit SMTPS und 465 passiert zumindest was, aber da schlägt dann die Authentifizierung fehl. Warum auch immer... Und mit Outlook wird mir die Seite nach dem Senden so angezeigt als hätte ich eine falsche Mailadresse angegeben. Das müsste doch auch mit anderen Adressen als nur mit Gmail laufen...
Ui, danke! Beim letzten Post tatsächlich vergessen! Aber zum Glück kann man sich mit App-Passwörtern nicht ins Konto einloggen.
Noch ein Problem tut sich auf. Wenn ich auf die Mails, die vom Formular gesendet wurden, antworte, dann kommt diese Antwort im Spamordner an. Wie kann man das verhindern?
Ich hatte da ja auch noch einen Thread darüber, bei dem ich einiges gesammelt hatte: Suche modernes Kontaktformular mit Spamschutz
Da ist im Ausgangspost auch unter anderem dieses Kontaktformular.com dabei, das man allerdings nur für private Zwecke verwenden darf - hat mir also nix genutzt.
Ich hab dann mit der mail-Funktion ein Script erstellt nach diversen Tutorials, das auch super funktioniert hat bis ich zu einem anderen Hoster gewechselt habe. Und ab da ging nix mehr. Leider ist es heutzutage tatsächlich so, dass die meisten Hoster Mails über SMTP verschickt haben wollen.
Nun hab ich mich mit dem PHPMailer zusammengerauft...kann man so sagen. Zumindest das Formular wie es vorher war geht jetzt auch mit dem PHPMailer.
Wenn du dir was vom CSS abkupfern willst, kannst du gern vorbeischauen. (zB Input anklicken mit rechter Maustaste - Element untersuchen - dann kannst du im Inspektor sehen, welche Styles angewendet wurden). Mit den Pseudoklassen :valid und :focus bzw. Pseudoelement ::placeholder lässt sich da einiges Hübsches draus machen.
Das Formular findest du im PHP-Bereich: Hilfe bei phpMailer.
Fertig.
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', true);
/**
* This example shows how to handle a simple contact form safely.
*/
//Import PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
$msg = '';
if(isset($_POST['firstname']) && $_POST['firstname'] != "" )
die();
if(isset($_POST['submit'])) {
//Don't run this unless we're handling a form submission
if (array_key_exists('email', $_POST)) {
date_default_timezone_set('Etc/UTC');
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
//Create a new PHPMailer instance
$mail = new PHPMailer();
//Send using SMTP to localhost (faster and safer than using mail()) – requires a local mail server
//See other examples for how to use a remote server such as gmail
// $mail->isSMTP();
// $mail->Host = 'localhost';
// $mail->Port = 25;
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_OFF; //Enable verbose debug output https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.gmail.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'xxx@gmail.com'; //SMTP username
$mail->Password = 'xxx'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Use a fixed address in your own domain as the from address
//**DO NOT** use the submitter's address here as it will be forgery
//and will cause your messages to fail SPF checks
$mail->setFrom('info@nf-fotogruppe-innsbruck.at', 'Naturfreunde Fotogruppe Innsbruck');
//Choose who the message should be sent to
//You don't have to use a <select> like in this example, you can simply use a fixed address
//the important thing is *not* to trust an email address submitted from the form directly,
//as an attacker can substitute their own and try to use your form to send spam
$addresses = [
'website' => 'info@nf-fotogruppe-innsbruck.at',
'alex' => 'nf-fotogruppe-ibk@hotmail.com',
'nf' => 'fotogruppe.innsbruck@naturfreunde.at',
];
//Validate address selection before trying to use it
if (array_key_exists('dept', $_POST) && array_key_exists($_POST['dept'], $addresses)) {
$mail->addAddress($addresses[$_POST['dept']]);
} else {
//Fall back to a fixed address if dept selection is invalid or missing
$mail->addAddress('info@nf-fotogruppe-innsbruck.at');
$mail->addCC('nf-fotogruppe-ibk@hotmail.com');
$mail->addCC('fotogruppe.innsbruck@naturfreunde.at');
$mail->addBCC('mariposa.designography@outlook.com');
}
//Put the submitter's address in a reply-to header
//This will fail if the address provided is invalid,
//in which case we should ignore the whole request
if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
$mail->Subject = 'NF Fotogruppe Website | Betreff: ' . $_POST['subject'];
//Keep it simple - don't use HTML
$mail->isHTML(false);
$mail->CharSet = 'UTF-8';
//Build a simple message body
$mail->Body = <<<EOT
{$_POST['name']} ({$_POST['email']}) hat dir eine Nachricht geschickt.\n\n
{$_POST['message']}
EOT;
//Send the message, check for errors
if (!$mail->send()) {
//The reason for failing to send will be in $mail->ErrorInfo
//but it's unsafe to display errors directly to users - process the error, log it on your server.
$msg = 'Sorry, something went wrong. Please try again later.';
$invalid_classname = "form-invalid";
} else {
$msg = 'Message sent! Thanks for contacting us.';
$message_sent = true;
}
} else {
$msg = 'Invalid email address, message ignored.';
$invalid_classname = "form-invalid";
}
}
}
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="msapplication-TileColor" content="#51AF2E">
<meta name="theme-color" content="#51AF2E">
<meta name="apple-mobile-web-app-status-bar-style" content="#51AF2E">
<?php require 'favicon.html'; ?>
<link rel="stylesheet" href="stylesheets/contact_form.css">
<link rel="stylesheet" href="stylesheets/styles.css">
<title>Fotogruppe der Naturfreunde Innsbruck | Kontakt</title>
</head>
<body>
<?php require 'nav.html'; ?>
<div class="background">
<main class="wrapper-main">
<div class="content">
<h1>Schreib uns oder komm vorbei!</h1>
<?php
if($message_sent):
?>
<br>
<br>
<h2>Vielen Dank! Deine Nachricht ist angekommen.</h2>
<?php
else:
?>
<h2 class="contact">Schick uns doch gleich eine Nachricht</h2>
<form action="kontakt_phpmailer2.php" method="POST">
<div>
<label for="name">Name</label>
<input class="form-control" id="name" name="name" type="text" placeholder="Name" value="<?php echo $_POST['name']; ?>" required>
</div>
<div class="firstname">
<label for="firstname">Vorname</label>
<input class="form-control" id="firstname" name="firstname" type="text" placeholder="Vorname">
</div>
<div>
<label for="email">E-Mail</label>
<input class="form-control <?= $invalid_classname ?? "" ?>" id="email" name="email" type="email" placeholder="E-Mail" value="<?php echo $_POST['email']; ?>" required>
</div>
<div>
<label for="subject">Betreff</label>
<input class="form-control" id="subject" name="subject" type="text" placeholder="Worum geht's?" value="<?php echo $_POST['subject']; ?>" required>
</div>
<div class="textarea">
<label for="message">Nachricht</label>
<textarea class="form-control" id="message" name="message" minlength="20" placeholder="Deine Nachricht an uns ..." required><?php echo $_POST['message']; ?></textarea>
</div>
<button name="submit" type="submit">Senden</button>
</form>
<?php
endif;
?>
</div>
</main>
</div>
<?php require 'footer.html'; ?>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script>
// NAVIGATION Toggle
$('.icon').click(function(){
$('#nav-btn').toggleClass("cancel");
});
// BEGIN OF Navigation Link active
const url = document.location.href;
document.querySelectorAll('nav ul li a').forEach(item => {
if (url.includes(item.href)) {
item.classList.add('active');
}
});
// END OF Navigation Link active
// BEGIN OF Contact Form Effect
$(function() {
$(".form-control").on('focus', function(){
$(this).parents("div").addClass('focused');
});
$(".form-control").on('blur', function(){
$(this).parents("div").removeClass('focused');
});
});
// END OF Contact Form Effect
</script>
</body>
</html>
Alles anzeigen
Naja, gestern war ich noch mehr als verzweifelt. Dieses Standard-Example verstehe ich heute auch noch nicht. Aus dem hätt ich nichts Vernünftiges rausgekriegt. Mit dem Contactform-Example ging's dann offensichtlich doch.
Mal ne Frage noch. Es steht ja in den Kommentaren drinnen, dass man aus Sicherheitsgründen nicht die Daten des Users als setFrom eintragen soll. Wäre das denn wirklich so tragisch? Ist doch irgendwie doof, wenn man sich quasi selbst Mails schickt. Immerhin gibt's das addReplyTo...
Juhu, ich hab's geschafft!
Danke, dazu muss man erstmal das Stichwort SMTP-Debugging kennen. Wenn man nicht weiß, wonach man suchen muss, wird's schwierig...
Hier nochmal der Code.
<?php
// error_reporting(E_ALL);
// ini_set('display_errors', true);
/**
* This example shows how to handle a simple contact form safely.
*/
//Import PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
$msg = '';
if(isset($_POST['firstname']) && $_POST['firstname'] != "" )
die();
if(isset($_POST['submit'])) {
//Don't run this unless we're handling a form submission
if (array_key_exists('email', $_POST)) {
date_default_timezone_set('Etc/UTC');
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
//Create a new PHPMailer instance
$mail = new PHPMailer();
//Send using SMTP to localhost (faster and safer than using mail()) – requires a local mail server
//See other examples for how to use a remote server such as gmail
// $mail->isSMTP();
// $mail->Host = 'localhost';
// $mail->Port = 25;
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.gmail.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'xxx'; //SMTP username
$mail->Password = 'xxx'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Use a fixed address in your own domain as the from address
//**DO NOT** use the submitter's address here as it will be forgery
//and will cause your messages to fail SPF checks
$mail->setFrom('info@nf-fotogruppe-innsbruck.at', 'Naturfreunde Fotogruppe Innsbruck');
//Choose who the message should be sent to
//You don't have to use a <select> like in this example, you can simply use a fixed address
//the important thing is *not* to trust an email address submitted from the form directly,
//as an attacker can substitute their own and try to use your form to send spam
$addresses = [
'website' => 'info@nf-fotogruppe-innsbruck.at',
'alex' => 'nf-fotogruppe-ibk@hotmail.com',
'nf' => 'fotogruppe.innsbruck@naturfreunde.at',
];
//Validate address selection before trying to use it
if (array_key_exists('dept', $_POST) && array_key_exists($_POST['dept'], $addresses)) {
$mail->addAddress($addresses[$_POST['dept']]);
} else {
//Fall back to a fixed address if dept selection is invalid or missing
$mail->addAddress('info@nf-fotogruppe-innsbruck.at');
// $mail->addCC('nf-fotogruppe-ibk@hotmail.com');
// $mail->addCC('fotogruppe.innsbruck@naturfreunde.at');
$mail->addBCC('mariposa.designography@outlook.com');
}
//Put the submitter's address in a reply-to header
//This will fail if the address provided is invalid,
//in which case we should ignore the whole request
if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
$mail->Subject = 'NF Fotogruppe Website | Betreff: ' . $_POST['subject'];
//Keep it simple - don't use HTML
$mail->isHTML(false);
//Build a simple message body
$mail->Body = <<<EOT
{$_POST['name']} ({$_POST['email']}) hat dir eine Nachricht geschickt.\n\n
{$_POST['message']}
EOT;
//Send the message, check for errors
if (!$mail->send()) {
//The reason for failing to send will be in $mail->ErrorInfo
//but it's unsafe to display errors directly to users - process the error, log it on your server.
$msg = 'Sorry, something went wrong. Please try again later.';
$invalid_classname = "form-invalid";
} else {
$msg = 'Message sent! Thanks for contacting us.';
$message_sent = true;
}
} else {
$msg = 'Invalid email address, message ignored.';
$invalid_classname = "form-invalid";
}
}
}
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="msapplication-TileColor" content="#51AF2E">
<meta name="theme-color" content="#51AF2E">
<meta name="apple-mobile-web-app-status-bar-style" content="#51AF2E">
<?php require 'favicon.html'; ?>
<link rel="stylesheet" href="stylesheets/contact_form.css">
<link rel="stylesheet" href="stylesheets/styles.css">
<title>Fotogruppe der Naturfreunde Innsbruck | Kontakt</title>
</head>
<body>
<?php require 'nav.html'; ?>
<div class="background">
<main class="wrapper-main">
<div class="content">
Anfangstext
<?php
if($message_sent):
?>
<br>
<br>
<h2>Vielen Dank! Deine Nachricht ist angekommen.</h2>
<?php
else:
?>
<h2 class="contact">Schick uns doch gleich eine Nachricht</h2>
<form action="kontakt_phpmailer2.php" method="POST">
<div>
<label for="name">Name</label>
<input class="form-control" id="name" name="name" type="text" placeholder="Name" value="<?php echo $_POST['name']; ?>" required>
</div>
<div class="firstname">
<label for="firstname">Vorname</label>
<input class="form-control" id="firstname" name="firstname" type="text" placeholder="Vorname">
</div>
<div>
<label for="email">E-Mail</label>
<input class="form-control <?= $invalid_classname ?? "" ?>" id="email" name="email" type="email" placeholder="E-Mail" value="<?php echo $_POST['email']; ?>" required>
</div>
<div>
<label for="subject">Betreff</label>
<input class="form-control" id="subject" name="subject" type="text" placeholder="Worum geht's?" value="<?php echo $_POST['subject']; ?>" required>
</div>
<div class="textarea">
<label for="message">Nachricht</label>
<textarea class="form-control" id="message" name="message" minlength="20" placeholder="Deine Nachricht an uns ..." required><?php echo $_POST['message']; ?></textarea>
</div>
<button name="submit" type="submit">Senden</button>
</form>
<?php
endif;
?>
</div>
</main>
</div>
<?php require 'footer.html'; ?>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script>
// NAVIGATION Toggle
$('.icon').click(function(){
$('#nav-btn').toggleClass("cancel");
});
// BEGIN OF Navigation Link active
const url = document.location.href;
document.querySelectorAll('nav ul li a').forEach(item => {
if (url.includes(item.href)) {
item.classList.add('active');
}
});
// END OF Navigation Link active
// BEGIN OF Contact Form Effect
$(function() {
$(".form-control").on('focus', function(){
$(this).parents("div").addClass('focused');
});
$(".form-control").on('blur', function(){
$(this).parents("div").removeClass('focused');
});
});
// END OF Contact Form Effect
</script>
</body>
</html>
Alles anzeigen
Das mit dem readfile änder ich später in allen Dateien.
Zitat<br /><b>Notice</b>: Undefined index: name in <b>/var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer2.php</b> on line <b>200</b><br />
Das ist die Fehlermeldung. Dasselbe mit allen Variablen der Inputs.
Das hier habe ich dann dazu gefunden und dann den oben zitierten Code draus gebastelt.
Gleich noch eine Frage. Wie schaff ich es, dass die Mails in UTF-8 versendet werden? Ich sehe in den Notizen (oder wie man das nennt), dass das ISO-8859-1 ist und Umlaute gehen dort nicht.
Meine Funktionen habe ich sogar richtig eingebaut, zumindest funktioniert alles. Bis eben auf UTF-8. Das Client-Server-Protokol nach dem Senden ist allerdings noch sichtbar. Wie krieg ich das weg? Hab schon das Error-Reporting abgestellt, es ist aber trotzdem da.
if (array_key_exists('email', $_POST)) { steht ja in meinem Formular schon drinnen. Kommt dein Code dann nochmal davor hin oder wo sollte der dann genau rein? Mit submit statt email geht's ja auch oder sollte man beides abfragen? In meinem alten Script hatte ich das mit submit ja drin, die Undefined Variables hatte ich trotzdem.
Ich wollte jetzt alle abfragen, das hilft aber der undefined variable auch nicht weiter.
if(isset($_POST['submit']) || isset($_POST['message']) || isset($_POST['subject']) || isset($_POST['email']) || isset($_POST['name'])) {
Dann hab ich jetzt noch wie hier beschrieben folgendes probiert, aber das undefined kommt trotzdem. Dort steht allerdings auch, dass es eig nicht nötig ist, das wegzubekommen.
$msg = '';
if(isset($_POST['firstname']) && $_POST['firstname'] != "" )
die();
if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['message'])) {
if(isset($_POST['submit'])) {
Rest...
}
}
Alles anzeigen
Es ist ja nicht weiter störend, es funktioniert ja.
Jetzt muss ich noch schauen, dass ich die anderen Sachen gereglet krieg, die ich eben im alten Script hatte.
Oh wow, wenn ich meine Gmail-Daten eingebe, kommt das Mail sogar an! Da muss dann zusätzlich noch was mit den Daten vom Hoster nicht stimmen...dann werd ich dort nochmal nachfragen.
So, nun wär's noch schön, wenn wir es schafften, die Funktionen meines alten Scripts einzubauen.
Ein Lichtblick ist schon mal da!
Danke fürs Denkenhelfen!
Wegen dem Error-Reporting. Ich dachte, du meinst einfach im Admin CP die Errors einzuschalten - das ist dort nämlich standardmäßig auf off und das hab ich natürlich auf on geschaltet. Aber ich hab jetzt noch deinen Code eingefügt.
Ich bin davon ausgegangen, dass - wenn ich ein Example von GitHub übernehme - das Grundlegende dort einfach stimmt. Folglich hätte - meiner Logik nach - das mit der Überprüfung auch passen müssen, also dass das nicht vor dem Senden überprüft wird.
Ich hab mir jetzt mal das andere Example geschnappt, mit dem komm ich auch besser klar. Das basiert zumindest auf Usereingaben in einem Kontaktformular. Da krieg ich diesen Fehler beim Aufruf jedenfalls nicht (//Don't run this unless we're handling a form submission). Allerdings lande ich in einer Endlosschleife mit Error 503, sobald ich das Formular absende. Die Meldungen mit undefined Variable (nach deinem Einfügen deines Codes) krieg ich hier auch, die kenne ich von meinem localhost. Die hatte ich auch beim alten Script mit der mail-Funktion, aber eben nur auf dem localhost und nicht am Server, daher habe ich das ignoriert.
Verstehe, eig logisch. Beim Aufruf will er das Echo laden, aber das ist natürlich nicht da. Er hat sich aber beschwert, dass die Mailadresse falsch ist und nicht dass name nicht existiert.
Hier jetzt mal das Kontaktformular-Beispiel von Github mit meinen Mailadressen und SMTP-Server. Den Code aus dem alten Formular hab ich jetzt mal noch nicht eingetragen.
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
/**
* This example shows how to handle a simple contact form safely.
*/
//Import PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
$msg = '';
//Don't run this unless we're handling a form submission
if (array_key_exists('email', $_POST)) {
date_default_timezone_set('Etc/UTC');
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
//Create a new PHPMailer instance
$mail = new PHPMailer();
//Send using SMTP to localhost (faster and safer than using mail()) – requires a local mail server
//See other examples for how to use a remote server such as gmail
// $mail->isSMTP();
// $mail->Host = 'localhost';
// $mail->Port = 25;
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'ara.ssl.hosttech.eu'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'info@nf-fotogruppe-innsbruck.at'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 465; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Use a fixed address in your own domain as the from address
//**DO NOT** use the submitter's address here as it will be forgery
//and will cause your messages to fail SPF checks
$mail->setFrom('info@nf-fotogruppe-innsbruck.at', 'Naturfreunde Fotogruppe Innsbruck');
//Choose who the message should be sent to
//You don't have to use a <select> like in this example, you can simply use a fixed address
//the important thing is *not* to trust an email address submitted from the form directly,
//as an attacker can substitute their own and try to use your form to send spam
$addresses = [
'website' => 'info@nf-fotogruppe-innsbruck.at',
'alex' => 'nf-fotogruppe-ibk@hotmail.com',
'nf' => 'fotogruppe.innsbruck@naturfreunde.at',
];
//Validate address selection before trying to use it
if (array_key_exists('dept', $_POST) && array_key_exists($_POST['dept'], $addresses)) {
$mail->addAddress($addresses[$_POST['dept']]);
} else {
//Fall back to a fixed address if dept selection is invalid or missing
$mail->addAddress('info@nf-fotogruppe-innsbruck.at'); // nf-fotogruppe-ibk@hotmail.com, fotogruppe.innsbruck@naturfreunde.at, info@nf-fotogruppe-innsbruck.at
}
//Put the submitter's address in a reply-to header
//This will fail if the address provided is invalid,
//in which case we should ignore the whole request
if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
$mail->Subject = 'Nachricht von NF Fotogruppe Website - Betreff: ' . $_POST['subject'];
//Keep it simple - don't use HTML
$mail->isHTML(false);
//Build a simple message body
$mail->Body = <<<EOT
// Email: {$_POST['email']}
// Name: {$_POST['name']}
// Message: {$_POST['message']}
{$_POST['name']} ({$_POST['email']}) hat dir eine Nachricht geschickt.\n\n\n
{$_POST['message']}
EOT;
//Send the message, check for errors
if (!$mail->send()) {
//The reason for failing to send will be in $mail->ErrorInfo
//but it's unsafe to display errors directly to users - process the error, log it on your server.
$msg = 'Sorry, something went wrong. Please try again later.
\n Mailer Error: {$mail->ErrorInfo}
';
} else {
$msg = 'Message sent! Thanks for contacting us.';
}
} else {
$msg = 'Invalid email address, message ignored.';
}
}
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="msapplication-TileColor" content="#51AF2E">
<meta name="theme-color" content="#51AF2E">
<meta name="apple-mobile-web-app-status-bar-style" content="#51AF2E">
<?php require 'favicon.html'; ?>
<link rel="stylesheet" href="stylesheets/contact_form.css">
<link rel="stylesheet" href="stylesheets/styles.css">
<title>Fotogruppe der Naturfreunde Innsbruck | Kontakt</title>
</head>
<body>
<?php require 'nav.html'; ?>
<div class="background">
<main class="wrapper-main">
<div class="content">
<?php
if($message_sent):
?>
<br>
<br>
<h2>Vielen Dank! Deine Nachricht ist angekommen.</h2>
<?php
else:
?>
<h2 class="contact">Schick uns doch gleich eine Nachricht</h2>
<form action="kontakt_phpmailer2.php" method="POST">
<div>
<label for="name">Name</label>
<input class="form-control" id="name" name="name" type="text" placeholder="Name" value="<?php echo $_POST['name']; ?>" required>
</div>
<div class="firstname">
<label for="firstname">Vorname</label>
<input class="form-control" id="firstname" name="firstname" type="text" placeholder="Vorname">
</div>
<div>
<label for="email">E-Mail</label>
<input class="form-control <?= $invalid_classname ?? "" ?>" id="email" name="email" type="email" placeholder="E-Mail" value="<?php echo $_POST['email']; ?>" required>
</div>
<div>
<label for="subject">Betreff</label>
<input class="form-control" id="subject" name="subject" type="text" placeholder="Worum geht's?" value="<?php echo $_POST['subject']; ?>" required>
</div>
<div class="textarea">
<label for="message">Nachricht</label>
<textarea class="form-control" id="message" name="message" minlength="20" placeholder="Deine Nachricht an uns ..." required><?php echo $_POST['message']; ?></textarea>
</div>
<button name="submit" type="submit">Senden</button>
</form>
<?php
endif;
?>
</div>
</main>
</div>
<?php require 'footer.html'; ?>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script>
// NAVIGATION Toggle
$('.icon').click(function(){
$('#nav-btn').toggleClass("cancel");
});
// BEGIN OF Navigation Link active
const url = document.location.href;
document.querySelectorAll('nav ul li a').forEach(item => {
if (url.includes(item.href)) {
item.classList.add('active');
}
});
// END OF Navigation Link active
// BEGIN OF Contact Form Effect
$(function() {
$(".form-control").on('focus', function(){
$(this).parents("div").addClass('focused');
});
$(".form-control").on('blur', function(){
$(this).parents("div").removeClass('focused');
});
});
// END OF Contact Form Effect
</script>
</body>
</html>
Alles anzeigen
Ich hab mich noch gewundert, warum hier Backslash steht. Bei use wird ja auch Backslash verwendet.
Kann mir einer den Pfad von use erklären? Ich hab da jedenfalls nichts liegen...
Jetzt hab ich das so stehen:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
Denselben Fehler gibt's zwar nicht mehr, aber nun findet er die SMTP-Klasse nicht. Warum? Die ist ja auch korrekt verlinkt. Das File findet er, die Klasse aber nicht... Ich versteh ja nicht, warum das nicht unter use gleich drinsteht - ich hab das ja direkt aus dem GitHub-Example.
Ich war mal eben so schlau und hab das noch hinzugefügt zu use. Nun wird die Seite wenigstens geladen, aber direkt mit einem Fehler. Ich hätte eine ungültige Mailadresse eingegeben. Ich habe noch gar nichts eingegeben, nur die Seite geladen. Da sollte eigentlich noch nichts überprüft werden, hab ja nicht auf Submit geklickt.
https://nf-fotogruppe-innsbruck.at/kontakt_phpmailer.php
Jetzt geht es halt wirklich darum, das Script korrekt umzucoden. Ich weiß wirklich nicht wie, denn mehr als grundlegende einfache PHP-Kenntnisse hab ich nicht. Wie gesagt, deswegen habe ich das damals auch mit der mail-Funktion gemacht, das hab ich wenigstens verstanden.
Ich hab mal das Formular ausgefüllt und abgeschickt, da kam dann
Hier noch ein anderes Beispiel von GitHub: https://github.com/PHPMailer/P…examples/contactform.phps
Vielleicht hilft es ja demjenigen, der mir damit helfen kann. Wie ich das sehe, wäre es wohl besser, gleich auf dem hier aufzubauen.
Danke, du machst mir ja Mut! Funktionieren tut hier trotzdem gar nix. Geht mit dem Aufruf der required files schon los...
ZitatWarning: require(phpmailer\src\Exception.php): failed to open stream: No such file or directory in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7
Warning: require(phpmailer\src\Exception.php): failed to open stream: No such file or directory in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7
Fatal error: require(): Failed opening required 'phpmailer\src\Exception.php' (include_path='.:/opt/plesk/php/7.2/share/pear') in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7
Mein localhost meldet übrigens was anderes:
Zitat
Fatal error: Uncaught Error: Class 'SMTP' not found in D:\Dokumente\Webdesign\XAMPP\htdocs\Fotoclub Naturfreunde Innsbruck\kontakt_phpmailer.php:20
Stack trace:
#0 {main} thrown in D:\Dokumente\Webdesign\XAMPP\htdocs\Fotoclub Naturfreunde Innsbruck\kontakt_phpmailer.php on line 20
Zur Info. Ich hab die kontakt_phpmailer.php im Hauptverzeichnis, darin den Order phpmailer (klein geschrieben) und dessen Inhalte so wie sie aus der ZIP-Datei kommen. Wieso also bitte schön sollen die Dateien nicht gefunden werden? Und warum findet der localhost sie schon...?
*******
Zu meinen allgemeinen Includes. Danke erst mal für den Tipp, aber kannst du mir auch erklären warum? Meinen Recherchen zufolge ist zwischen include und require die bessere Wahl dann require. Das readfile ist mir da gar nicht untergekommen. Was macht da den Unterschied bzw warum ist das für HTML-Dateien besser? Das sollte ich ja dann auch mit der Navigation und dem Footer machen, das sind auch HTML-Dateien.
Naja, ich hab das Script noch nicht wirklich fertig umgebaut, weil ich nichts davon verstehe. Das krieg ich allein nicht hin. Ist wie "schreib mal nen Aufsatz auf Chinesisch".
NEU mit phpMailer
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer\src\Exception.php';
require 'phpmailer\src\PHPMailer.php';
require 'phpmailer\src\SMTP.php';
// Honeypot
if(isset($_POST['firstname']) && $_POST['firstname'] != "" )
die();
//Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'ara.ssl.hosttech.eu'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'info@nf-fotogruppe-innsbruck.at'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 465; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Recipients
$mail->setFrom($_POST['email'], $_POST['name']);
$mail->addAddress('info@nf-fotogruppe-innsbruck.at'); //Add a recipient
$mail->addAddress('nf-fotogruppe-ibk@hotmail.com'); //Name is optional
$mail->addAddress('fotogruppe.innsbruck@naturfreunde.at'); //Name is optional
$mail->addReplyTo($_POST['email'], $_POST['name']);
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
//Attachments
// $mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
$message_sent = true;
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
$invalid_classname = "form-invalid";
}
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="msapplication-TileColor" content="#51AF2E">
<meta name="theme-color" content="#51AF2E">
<meta name="apple-mobile-web-app-status-bar-style" content="#51AF2E">
<?php require 'favicon.html'; ?>
<link rel="stylesheet" href="stylesheets/contact_form.css">
<link rel="stylesheet" href="stylesheets/styles.css">
<title>Fotogruppe der Naturfreunde Innsbruck | Kontakt</title>
</head>
<body>
<?php require 'nav.html'; ?>
<div class="background">
<main class="wrapper-main">
<div class="content">
<h1>Schreib uns oder komm vorbei!</h1>
<p>
Du interessierst dich für eine Mitgliedschaft oder hast allgemeine Fragen zu den Naturfreunden?
Dann besuch am besten das <em>Infobüro der Naturfreunde</em>.
</p>
<p>
Du möchtest dir die Fotogruppe anschauen und uns direkt besuchen? Normalerweise sehen wir uns dienstags um 19:30 Uhr
in unserem <em>Clubraum</em>. Auf Grund der momentanen Situation treffen wir uns jedoch online.
Nähere Infos dazu gibt's bei <a href="e-mail_handler.php">Alex</a>.
</p>
<p>
Du willst direkt mit unserem <em>Obmann Alexander Nedl</em> Kontakt aufnehmen? Du kannst ihm gern ein E-Mail schicken oder
ihn telefonisch erreichen. Du kannst aber auch gleich das Kontaktformular hier auf der Seite nutzen, so erreichst du
ihn ebenfalls direkt.
</p>
<div class="grid">
<div class="contact">
<h3>Alexander Nedl</h3>
<address>
Naturfreunde Fotogruppe Innsbruck<br>
Obmann Alexander Nedl<br>
<br>
</address>
<i class="fas fa-phone-alt"></i><a href="tel:+4369913856861">+43 699 13856861</a><br>
<i class="fas fa-envelope"></i><a href="e-mail_handler.php">nf<!--ie9fop49vke-->-fot<!--49fkrß40ß3oi-->ogruppe<!--edkdf994söfur49-->-ibk@ho<!--402p48gj-->tm<!--48rjfo9-->ail<!--38dkwi9ejsp-->.c<!--475ov0e3j-->om</a>
</div>
<div class="contact">
<h3>Unser Clubraum</h3>
<address>
Lederprokrastinationszentrum West<br>
Prämonstratenserweg 7<br>
6020 Innsbruck
</address>
<p><br>Treffpunkt: dienstags, 19:30 Uhr</p>
</div>
<div class="contact">
<h3>Infobüro der Naturfreunde</h3>
<address>
Naturfreunde Tirol<br>
Bürgerstraße 6<br>
6020 Innsbruck
</address>
<i class="fas fa-phone-alt"></i><a href="tel:+4351258414414">+43 512 584144-14</a><br>
<i class="fas fa-envelope"></i><a href="mailto:innsbruck@naturfreunde.at">innsbruck@naturfreunde.at</a>
</div>
</div>
<?php
if($message_sent):
?>
<br>
<br>
<h2>Vielen Dank! Deine Nachricht ist angekommen.</h2>
<?php
else:
?>
<h2 class="contact">Schick uns doch gleich eine Nachricht</h2>
<form action="kontakt.php" method="POST">
<div>
<label for="name">Name</label>
<input class="form-control" id="name" name="name" type="text" placeholder="Name" value="<?php echo $_POST['name']; ?>" required>
</div>
<div class="firstname">
<label for="firstname">Vorname</label>
<input class="form-control" id="firstname" name="firstname" type="text" placeholder="Vorname">
</div>
<div>
<label for="email">E-Mail</label>
<input class="form-control <?= $invalid_classname ?? "" ?>" id="email" name="email" type="email" placeholder="E-Mail" value="<?php echo $_POST['email']; ?>" required>
</div>
<div>
<label for="subject">Betreff</label>
<input class="form-control" id="subject" name="subject" type="text" placeholder="Worum geht's?" value="<?php echo $_POST['subject']; ?>" required>
</div>
<div class="textarea">
<label for="message">Nachricht</label>
<textarea class="form-control" id="message" name="message" minlength="20" placeholder="Deine Nachricht an uns ..." required><?php echo $_POST['message']; ?></textarea>
</div>
<button name="submit" type="submit">Senden</button>
</form>
<?php
endif;
?>
</div>
</main>
</div>
<?php require 'footer.html'; ?>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script>
// NAVIGATION Toggle
$('.icon').click(function(){
$('#nav-btn').toggleClass("cancel");
});
// BEGIN OF Navigation Link active
const url = document.location.href;
document.querySelectorAll('nav ul li a').forEach(item => {
if (url.includes(item.href)) {
item.classList.add('active');
}
});
// END OF Navigation Link active
// BEGIN OF Contact Form Effect
$(function() {
$(".form-control").on('focus', function(){
$(this).parents("div").addClass('focused');
});
$(".form-control").on('blur', function(){
$(this).parents("div").removeClass('focused');
});
});
// END OF Contact Form Effect
</script>
</body>
</html>
Alles anzeigen
So, hier mal die Codes.
ALT mit mail-Funktion
<?php
if(isset($_POST['firstname']) && $_POST['firstname'] != "" )
die();
if(isset($_POST['submit'])) {
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$name = $_POST['name'];
$from = $_POST['email'];
$subject_user = $_POST['subject'];
$message = $_POST['message'];
$to = "nf-fotogruppe-ibk@hotmail.com, fotogruppe.innsbruck@naturfreunde.at, info@nf-fotogruppe-innsbruck.at"; // 2 Mailadressen: "erste, zweite";
$subject = '=?utf-8?B?' . base64_encode('Nachricht von NF Fotogruppe Website - Betreff: ' .$subject_user) . '?=';
$body = $name . " hat dir eine Nachricht geschickt.\n\n\n" .$message;
$headers = "From: " .$from . "\r\n";
// $headers .= "Cc: Name <example@example.com>";
// $headers .= "Bcc: Name <example@example.com>";
$headers .= "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-Type: text/plain;charset=utf-8";
mail($to, $subject, $body, $headers);
// header("Location: contact_sent.php");
$message_sent = true;
}
else{
$invalid_classname = "form-invalid";
}
}
?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="msapplication-TileColor" content="#51AF2E">
<meta name="theme-color" content="#51AF2E">
<meta name="apple-mobile-web-app-status-bar-style" content="#51AF2E">
<?php require 'favicon.html'; ?>
<link rel="stylesheet" href="stylesheets/contact_form.css">
<link rel="stylesheet" href="stylesheets/styles.css">
<title>Fotogruppe der Naturfreunde Innsbruck | Kontakt</title>
</head>
<body>
<?php require 'nav.html'; ?>
<div class="background">
<main class="wrapper-main">
<div class="content">
<h1>Schreib uns oder komm vorbei!</h1>
<p>
Du interessierst dich für eine Mitgliedschaft oder hast allgemeine Fragen zu den Naturfreunden?
Dann besuch am besten das <em>Infobüro der Naturfreunde</em>.
</p>
<p>
Du möchtest dir die Fotogruppe anschauen und uns direkt besuchen? Normalerweise sehen wir uns dienstags um 19:30 Uhr
in unserem <em>Clubraum</em>. Auf Grund der momentanen Situation treffen wir uns jedoch online.
Nähere Infos dazu gibt's bei <a href="e-mail_handler.php">Alex</a>.
</p>
<p>
Du willst direkt mit unserem <em>Obmann Alexander Nedl</em> Kontakt aufnehmen? Du kannst ihm gern ein E-Mail schicken oder
ihn telefonisch erreichen. Du kannst aber auch gleich das Kontaktformular hier auf der Seite nutzen, so erreichst du
ihn ebenfalls direkt.
</p>
<div class="grid">
<div class="contact">
<h3>Alexander Nedl</h3>
<address>
Naturfreunde Fotogruppe Innsbruck<br>
Obmann Alexander Nedl<br>
<br>
</address>
<i class="fas fa-phone-alt"></i><a href="tel:+4369913856861">+43 699 13856861</a><br>
<i class="fas fa-envelope"></i><a href="e-mail_handler.php">nf<!--ie9fop49vke-->-fot<!--49fkrß40ß3oi-->ogruppe<!--edkdf994söfur49-->-ibk@ho<!--402p48gj-->tm<!--48rjfo9-->ail<!--38dkwi9ejsp-->.c<!--475ov0e3j-->om</a>
</div>
<div class="contact">
<h3>Unser Clubraum</h3>
<address>
Lederprokrastinationszentrum West<br>
Prämonstratenserweg 7<br>
6020 Innsbruck
</address>
<p><br>Treffpunkt: dienstags, 19:30 Uhr</p>
</div>
<div class="contact">
<h3>Infobüro der Naturfreunde</h3>
<address>
Naturfreunde Tirol<br>
Bürgerstraße 6<br>
6020 Innsbruck
</address>
<i class="fas fa-phone-alt"></i><a href="tel:+4351258414414">+43 512 584144-14</a><br>
<i class="fas fa-envelope"></i><a href="mailto:innsbruck@naturfreunde.at">innsbruck@naturfreunde.at</a>
</div>
</div>
<?php
if($message_sent):
?>
<br>
<br>
<h2>Vielen Dank! Deine Nachricht ist angekommen.</h2>
<?php
else:
?>
<h2 class="contact">Schick uns doch gleich eine Nachricht</h2>
<form action="kontakt.php" method="POST">
<div>
<label for="name">Name</label>
<input class="form-control" id="name" name="name" type="text" placeholder="Name" value="<?php echo $_POST['name']; ?>" required>
</div>
<div class="firstname">
<label for="firstname">Vorname</label>
<input class="form-control" id="firstname" name="firstname" type="text" placeholder="Vorname">
</div>
<div>
<label for="email">E-Mail</label>
<input class="form-control <?= $invalid_classname ?? "" ?>" id="email" name="email" type="email" placeholder="E-Mail" value="<?php echo $_POST['email']; ?>" required>
</div>
<div>
<label for="subject">Betreff</label>
<input class="form-control" id="subject" name="subject" type="text" placeholder="Worum geht's?" value="<?php echo $_POST['subject']; ?>" required>
</div>
<div class="textarea">
<label for="message">Nachricht</label>
<textarea class="form-control" id="message" name="message" minlength="20" placeholder="Deine Nachricht an uns ..." required><?php echo $_POST['message']; ?></textarea>
</div>
<button name="submit" type="submit">Senden</button>
</form>
<?php
endif;
?>
</div>
</main>
</div>
<?php require 'footer.html'; ?>
<script src="scripts/jquery-3.5.1.min.js"></script>
<script>
// NAVIGATION Toggle
$('.icon').click(function(){
$('#nav-btn').toggleClass("cancel");
});
// BEGIN OF Navigation Link active
const url = document.location.href;
document.querySelectorAll('nav ul li a').forEach(item => {
if (url.includes(item.href)) {
item.classList.add('active');
}
});
// END OF Navigation Link active
// BEGIN OF Contact Form Effect
$(function() {
$(".form-control").on('focus', function(){
$(this).parents("div").addClass('focused');
});
$(".form-control").on('blur', function(){
$(this).parents("div").removeClass('focused');
});
});
// END OF Contact Form Effect
</script>
</body>
</html>
Alles anzeigen
Theoretisch liegt da der Farbcode #RREEDD dahinter und da es den nicht gibt (im Hexadezimalsystem gibt es kein R), passiert auch nichts.
Da muss sich jmd einfach vertan haben.
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.