Jede Webseite benötigt eine Möglichkeit, Mails zu versenden, meist nach einer Interaktion mit einem Besucher in einem Kontaktformular, in einem Gästebuch, bei einer Anmeldung oder bei einem Voting. Wie man das mit ASPX lösen kann, zeigte der Beitrag „Klassisches Mailformular„. ASPX benutzt die im DotNet-Framework enthaltenen Bibliotheken zur Kommunikation mit einem Mailserver.
Wenn nun aber eine Anwendung überwiegend in PHP programmiert ist, wirkt diese ASPX-Datei wie ein Fremdkörper und außerdem würde sie – im Gegensatz zum restlichen PHP-Kode – nur auf einem Windows-Server laufen. Was kann man daher für ein Web tun, das auf PHP aufbaut?
PHP ist mit einer Funktion mail()
augestattet, die aber auf Windows-Servern nicht bedient wird. Außerdem ist diese Funktion nur eine sehr rudimentäre Version von dem, was wir heute als Mail kennen (man kann keine HTML-Emails und keine Anhänge versenden). Man verwendet daher statt mail()
die am weitesten verbreitete Bibliothek für diesen Zweck, den „PHP-Mailer“.
Wir haben dieses Programmpaket mit zwei Testdateien in Betrieb genommen. Man kann es über den Link weiter hinten downloaden.
Installation
Man holt sich die Datei mail.zip
, lädt sie mit dem Datei-Manager des WebsitePanel in das gewünschte Verzeichnis und entpackt es dort. Es entsteht ein Verzeichnis mail
, das einerseits das unveränderte Verzeichnis PHPMailer-master
enthält und zwei Testdateien, die demonstrieren, wie man den PHPMailer anwendet. Darüber hinaus gibt es im Verzeichnis examples
viele weiter gehende Beispiele.
Sollte eine neue Version des Programms erscheinen, muss man lediglich diesen Ordner PHPMailer-master
löschen und durch die neue Version ersetzen. Die zwei Testdateien sind im Ordner mail
enthalten. mail.php
sendet eine Mail, die durch Übergabe von Parametern über POST vom Formular formular_simple_php.htm
übernommen wurden.
mail (Ordner) + mail.php + formular_simple_php.htm + PHPMailer-master (Ordner)
Formular formular_simple_php.htm
Dieses Beispiel-Formular enthält einige Felder <input type="text"...,
die in einem Tag form eingeschlossen sind (vorname, nachname, email
und telefon
). Klickt man auf den Submit-Button, sendet das Formular alle Eingaben an die Datei mail.php
, die sich – weil ohne zusätzliche Pfadangabe – im selben Verzeichnis befinden muss. mail.php
verarbeitet diese Eingaben und sendet eine Mail.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Anmeldeformular</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="Description" content="Anmeldeformular" /> </head> <body> <h2>Anmeldeformular</h2> <form action="mail.php" method="post"> <input type="hidden" name="subject" value="Worum geht es hier" /> <input type="hidden" name="debug" value="0" /> <input type="text" name="vorname" /><label>Vorname</label><br /> <input type="text" name="nachname" /><label>Nachname</label><br /> <input type="text" name="email" /><label>E-Mail Adresse</label><br /> <input type="text" name="telefon" /><label>Telefonnummer</label><br /> <input type="submit" value="Formular senden" /> </form> </body> </html>
Wesentlich bei diesem Formular ist eigentlich nur das versteckte Feld subject
, das angibt, welches (von mehreren möglichen) Formularen etwas schickt. Alle anderen Felder werden mit Namen und jeweiligem Wert vom Programm mail.php
zusammengefasst und als Feld body
der versendeten Mail abgeschickt. Mit dem versteckten Feld debug
kann man das Debuggen aktivieren ohne die Datei mail.php
verändern zu müssen.
mail.php
Dieser kurze PHP-Kode benötigt die Datei PHPMailerAutoload.php
und findet diese im Ordner PHPMailer-master.
Debuggen kann man aktivieren, indem man $DEBUG=1;
einsetzt. Es werden dann verschiedene Variablen ausgegeben, die zu Fehlersuche verwendet werden können.
<?php require 'PHPMailer-master/PHPMailerAutoload.php'; $DEBUG = isset($_POST["debug"]) ? $_POST["debug"] : "0"; if ($DEBUG==1) { error_reporting(-1); ini_set('display_errors', 'On'); } $Host = "mail.ccc.at"; $Username = "--E-Mail--"; $Password = "--Passwort--"; $From = "--E-Mail des Absenders--"; $FromName = '--Name des Absenders--'; $To = "--E-Mail des Empfängers--"; $Subject = isset($_POST["subject"]) ? $_POST["subject"] : "Formulardaten"; $Headers = isset($_POST["headers"]) ? $_POST["headers"] : ""; $Body = ""; // alle Formularfelder if ($DEBUG==1) echo "<pre>"; foreach ($_POST as $param_name => $param_val) { if ($param_name=='subject') continue; if ($DEBUG==1) echo "$param_name:$param_val\n"; $Body = $Body."$param_name:$param_val\n"; } if ($DEBUG==1) echo "</pre>"; // date_default_timezone_set('Etc/UTC'); $mail = new PHPMailer; $mail->isSMTP(); //Enable SMTP debugging // 0 = off (for production use) // 1 = client messages // 2 = client and server messages $mail->SMTPDebug = 0; $mail->Debugoutput = 'html'; $mail->Host = $Host; $mail->Port = 25; $mail->SMTPAuth = true; $mail->Username = $Username; $mail->Password = $Password; $mail->setFrom($From); $mail->FromName = $FromName; $mail->addAddress($To); $mail->Subject = $Subject; // $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); $mail->Body = $Body; // $mail->AltBody = ''; // $mail->addAttachment('images/phpmailer_mini.png'); // before sending something to client: $Headers_parts = explode("\r\n",$Headers); if ($DEBUG==1) { echo "<pre>"; echo "\r\nHeaders:\r\n"; print_r($Headers_parts); } foreach($Headers_parts as $Header) { header($Header."\r\n"); } $Error = $mail->send(); if ($DEBUG==1) { echo "\r\nMail:\r\n"; print_r($mail); if ($Error==1) echo "Erfolg!"; else echo "Fehler:".$Error; echo "</pre>"; } ?>
Konfiguration mail.php
Bevor man Mails über Formulare versenden kann, muss man die Datei mail.php
konfigurieren. Einzusetzen sind die Werte für $Host, $Username, $Password, $From, $FromName:
$Host = "mail.ccc.at"; $Username = "--E-Mail--"; $Password = "--Passwort--"; $From = "--E-Mail des Absenders--"; $FromName = '--Name des Absenders--'; $To = "--E-Mail des Empfängers--";
Für eine Mailbox am Mailenable-Server von ClubComputer ist $Host="mail.ccc.at"
; $Username
ist die vollständige Adresse der verwendeten Mailbox, also name@domain.at
und $Password
das zugehörige Passwort. $From
ist identisch mit $Username
und $FromName="Dein Name"
. Das Feld $To
kann dieselbe Adresse enthalten wie $From
, wenn man dieselbe Mailbox auch zum Lesen der Mails benutzt.
Links
- Homepage des PHPMailers bei Github
- Tutorium (worxware)
- Beispiele (worxware)
- Mailformular in ASPX (Artikel in diesem Web)
- Download des PHPMailers und der beiden Testdateien (in
mail.php
müssen fünf Variablen konfiguriert werden.)
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare