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-Funktion
[Bearbeiten]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-Framework
[Bearbeiten]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 PHPMailer
[Bearbeiten]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!';