Websiteentwicklung: PHP: Mails

PHP allein kann keine E-Mails verschicken, benötigt wird ein auf dem Webserver laufender Mailserver, der den Versand übernimmt.

Mails versenden mit der mail-FunktionBearbeiten

Die Mail-Funktion kann genutzt werden, um automatisch E-Mails zu verschicken.

<?php
    mail('mustermann@beispiel.de', 'Betreff', 'Nachricht');
?>

Hiermit wird eine E-Mail an mustermann@beispiel.de mit dem Betreff "Betreff" und der Nachricht "Nachricht" versandt.

<?php
    mail(
        'mustermann@beispiel.de',
        'Betreff',
        'Nachricht',
        'From: ich@beispiel.de\r\nReply-To: ich@beispiel.de'
    );
?>

Dies versendet die gleiche E-Mail wie im ersten Beispiel, allerdings werden auch die Befehle "From:" und "Reply-To" benutzt. Mit diesen Befehlen machst du es der angeschriebenen Person möglich, dir zu antworten. Außerdem erkennen manche Provider E-Mails ohne "From:" und "Reply-To" als Spam und sie werden automatisch gelöscht.

Mails versenden mit einem Mail-FrameworkBearbeiten

In der Praxis kann die Benutzung von mail() sehr mühsam und fehleranfällig sein. Ohne vorherige Authentifizierung werden Mails zudem oft abgelehnt (dank unzähliger Spammer). Daher empfiehlt es sich, auf ein vorhandenes Mail-Framework zurückzugreifen.

Verwendung von PHPMailerBearbeiten

PHPMailer kann auf Github heruntergeladen werden. Auf dieser Seite ist auch eine kurze Erklärung zur Verwendung von PHPMailer.

Um PHPMailer verwenden zu können, müssen Sie die Dateien "class.phpmailer.php", "class.pop3.php" und "class.smtp.php" in einen Ordner Ihrer Wahl auf den Server legen.

Hier ist nun ein kleines Beipiel wie PHPMailer verwendet werden kann:

<?php

require 'pfadzurphpmailerklasse/class.phpmailer.php'; // Einfügen der PHPMailer-Klasse

$mail = new PHPMailer;                                // PHPMailer Objekt erstellen

$mail->IsSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup server
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'jswan';                            // SMTP Username
$mail->Password = 'secret';                           // SMTP Passwort
$mail->SMTPSecure = 'tls';                            // Enable encryption, 'ssl' also accepted

$mail->From = 'from@example.com';                     // Absendeadresse
$mail->FromName = 'Mailer';                           // Absendename
$mail->AddAddress('josh@example.net', 'Josh Adams');  // Add a recipient
$mail->AddAddress('ellen@example.com');               // Name is optional
$mail->AddReplyTo('info@example.com', 'Information');
$mail->AddCC('cc@example.com');
$mail->AddBCC('bcc@example.com');

$mail->WordWrap = 50;                                 // Setzt Zeilenumbruch auf 50 Zeichen
$mail->AddAttachment('/var/tmp/file.tar.gz');         // Fügt Anhang hinzu
$mail->AddAttachment('/tmp/image.jpg', 'new.jpg');    // Fügt Anhang mit optionalem Namen hinzu
$mail->IsHTML(true);                                  // Email wird im HTML-Format versendet

$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';

if(!$mail->Send()) {
   echo 'Message could not be sent.';
   echo 'Mailer Error: ' . $mail->ErrorInfo;
   exit;
}

echo 'Nachricht wurde versendet!';

Verwendung von Zend MailBearbeiten

Verwendung von SwiftmailerBearbeiten

Verwendung von PEAR MailBearbeiten