E-Mails mit dem phpMailer und SMTP versenden Voraussetzungen Code-Snippets

[Bildschirmfoto] E-Mail mit dem phpMailer und SMTP versenden

phpMailer ist eine Code-Bibliothek und wird verwendet, um E-Mails sicher und einfach über PHP-Code von einem Webserver zu senden. Das direkte Senden von E-Mails über PHP-Code erfordert eine hohe Vertrautheit mit dem SMTP-Standardprotokoll und den damit verbundenen Problemen und Schwachstellen. phpMailer vereinfacht den Prozess des Sendens von E-Mails und ist sehr einfach zu bedienen.

Manchmal möchte man die Nachricht vom Kontaktformular über dem phpMailer und SMTP (Simple Mail Transfer Protocol) versenden. Oder der Provider bietet den Versandt der E-Mails nur über SMTP an. Weil das aber nicht so einfach ist und bestimmte Einstellungen beachtet werden müssen, stelle ich hier beispielhaft ein solches PHP-Skript vor.

[Bildschirmfoto] Kontaktformular
Kontaktformular

Dieses Skript wurde erfolgreich beim Provider IONOS (1&1) und dem phpMailer (Version 6.7.1) getestet.
Siehe auch: IONOS E-Mail: Serverdaten für IMAP, POP3 und SMTP

Quelltext:  kontakt.php AusblendenKopierenLinkZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/*
  Kontaktformular -
  E-Mail mit phpMailer und SMTP
 */


// PHP-Fehlermeldungen anzeigen
error_reporting(0); // E_ALL / 0
ini_set("display_errors"false); // true / false

// phpMailer-Klassen in den globalen Namespace importieren
use PHPMailer\PHPMailer\PHPMailer;
use 
PHPMailer\PHPMailer\SMTP;
use 
PHPMailer\PHPMailer\Exception;

// phpMailer einbinden
require __DIR__ "/PHPMailer-master/src/Exception.php";
require 
__DIR__ "/PHPMailer-master/src/PHPMailer.php";
require 
__DIR__ "/PHPMailer-master/src/SMTP.php";

if (
$_SERVER["REQUEST_METHOD"] == "POST") {

    
$dankeSeite "danke.php"// Danke - Seite, die Mail wurde erfolgreich Versandt.
    
$fehlerSeite "fehler.php"// Fehler - Seite, falls die Mail nicht Versandt werden konnte.

    // Instanz und Zeichenkodierung setzen
    
$mail = new PHPMailer(true);
    
$mail->CharSet "UTF-8";

    
// SMTP - Servereinstellungen
    
$mail->isSMTP(); // Senden mit SMTP
    // $mail->SMTPDebug = true; // Ausführliche Debugausgabe aktivieren
    
$mail->Host "smtp.ionos.de"// Postausgangsserver (SMTP)
    
$mail->SMTPAuth true// SMTP-Authentifizierung aktivieren
    
$mail->Username "mail@example.com"// SMTP Benutzername
    
$mail->Password "**********"// SMTP Passwort
    
$mail->SMTPSecure PHPMailer::ENCRYPTION_SMTPS// Implizite TLS-Verschlüsselung aktivieren
    
$mail->Port 465// Port - Postausgangsserver (SMTP)

    // Absender
    // Hier muss beim Provider eine bekannte E-Mail-Adresse eingetragen sein, weil "externe" 
    // E-Mail-Adressen vom Provider gesperrt werden (SPF) und dies zu einer Ablehnung führt.
    
$mail->setFrom("mail@example.com""John Doe");

    
// Empfänger
    
$mail->addAddress("mail@example.com""John Doe");

    
// Antwort an
    
$mail->addReplyTo($_POST["mail"], $_POST["name"]);

    
// Betreff
    
$mail->Subject $_POST["betreff"];

    
// Zeitzone und das aktuelle Datum setzen
    
$jetzt date_create("now"timezone_open("Europe/Berlin"));
    
$datum date_format($jetzt"d.m.Y \u\m H:i");


    
// Inhalt der E-Mail
    
$Inhalt "Gesendet am: " $datum " Uhr
 Name: " $_POST["name"] . "
 Betreff: " $_POST["betreff"] . "
 E-Mail: " $_POST["mail"] . "

 Nachricht: " $_POST["nachricht"] . "
";

    
// Inhalt der E-Mail setzen
    
$mail->Body $Inhalt;

    
// Senden
    
if ($mail->send()) {

        
// Weiterleitung an die Seite: danke.php
        
header("Location: " $dankeSeite);
        exit;
    } else {

        
// Wenn die E-Mail nicht versendet werden konnte.
        // Weiterleitung an die Seite: fehler.php
        
header("Location: " $fehlerSeite);
        exit;
    }
}
?>
<!DOCTYPE html>
<html lang="de">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>Kontaktformular</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>

    <form method="post">

        <fieldset>
            <legend>Kontakt</legend>

            <!-- Name -->
            <p><label>Name:<br>
                    <input type="text" name="name" minlength="5" required></label>
                <span class="hilfetext">Geben Sie hier Ihre Vor- und Nachnamen ein.</span>
            </p>

            <!-- E-Mail -->
            <p><label>E-Mail:<br>
                    <input type="email" name="mail" required></label>
                <span class="hilfetext">Geben Sie hier Ihre E-Mail-Adresse ein.</span>
            </p>

            <!-- Betreff -->
            <p><label>Betreff:<br>
                    <input type="text" name="betreff" minlength="10" required></label>
                <span class="hilfetext">Aus welchem Grund möchten Sie mit uns in Kontakt treten?</span>
            </p>

            <!-- Nachricht -->
            <p><label>Nachricht:<br>
                    <textarea name="nachricht" minlength="25" required></textarea></label>
                <span class="hilfetext">Hier haben Sie Platz für die Nachricht.</span>
            </p>

            <!-- Nachricht senden -->
            <p><button type="submit">Nachricht senden</button></p>

        </fieldset>

    </form>

</body>

</html>

Sollte der Versandt mal nicht über SMTP funktionieren, so können die Zeilen 31 bis 39 gelöscht werden, der Mail versant läuft dann trotzdem über dem PHPMailer.

Voraussetzungen

Webserver mit PHP 8.0 (oder höher) und Kenntnisse in HTML, CSS und PHP um die Skripte den eigenen Wünschen (siehe: Code-Snippets) anpassen zu können.

Die E-Mail-Adressen, "SMTP Host", "SMTP Benutzername", "SMTP Passwort" und , "SMTP Port", müssen angepasst werden. Außerdem die Dateien: "danke.php" und "fehler.php".

kontaktformular_phpmailer_smtp.zip

Viel Spaß damit!

Code-Snippets

Einige Code-Snippets, zum individuellen einfügen in das Kontaktformular. Die Snippets müssen an der "richtigen Stelle" eingefügt werden. Teilweise sind Zeilennumern hervorgehoben 1 was da besonders wichtig ist.

Quelltext:  Kopie der Nachricht an den Benutzer senden EinblendenKopierenLinkZeilen

Quelltext:  Anlagen an die E-Mail, über das Formular anhängen EinblendenKopierenLinkZeilen

Quelltext:  Anlagen an die E-Mail anhängen EinblendenKopierenLinkZeilen

 

Quelltext:  HTML - E-Mail senden EinblendenKopierenLinkZeilen

Quelltext:  HTML - Eingebettete Bilder senden EinblendenKopierenLinkZeilen

Quelltext:  HTML-Vorlage senden EinblendenKopierenLinkZeilen

 

Quelltext:  Automatische Weiterleitung (danke.php) EinblendenKopierenLinkZeilen

Quelltext:  Nachrichten persönlicher machen EinblendenKopierenLinkZeilen

Quelltext:  Diverse Formularfelder EinblendenKopierenLinkZeilen

 

Quelltext:  E-Mails an mehrere Empfänger EinblendenKopierenLinkZeilen

Quelltext:  phpMailer - Liste der Anweisungen EinblendenKopierenLinkZeilen