PHP-Mailer E-Mails versenden mit PHP Listenfeld mit Mehrfachauswahl Import von CSV-Daten in eine DB Einbindung des TinyMCE Aufgabenstellung:.................................................................................................................. 2 Anlegen der Datenbank-Datei ............................................................................................... 3 Struktur der Tabelle in der Datenbank anlegen .............................................................. 3 Tabelle: schueler ............................................................................................................ 3 Daten importieren ........................................................................................................... 3 Mail Formular erzeugen......................................................................................................... 4 Datei: mailform.php ............................................................................................................ 5 TinyMCE einbinden ............................................................................................................... 6 Datei zum Verschicken von Mails erstellen............................................................................ 7 Datei: mailsenden.php ....................................................................................................... 7 Formatierung des Formulars ................................................................................................. 8 Datei: mail.css ................................................................................................................... 8 Anhang: Quellcode ................................................................................................................ 9 Datensicherung: schueler.sql ..................................................................................... 9 © Mag. Erwin Mayer, Nov 2012 VBS Akademiestraße Aufgabenstellung: Erstellen Sie ein Mailformular mit folgenden Anforderungen (Pflichtenheft): Die Benutzer dieser Seite sollen HTML-Mails an die MMWD-Gruppe versenden können Erzeugte Schülerdaten aus Excel bzw. aus einer CSV-Datei importieren Auswahl der Empfänger mit Listenfeld (Mehrfachauswahl) Bequemes Eingeben von HTML-Text mit einem Editor: TinyMCE Vorschlag für die Reihenfolge der Erstellung: Anlegen der Tabelle schueler in der Datenbank mail_mmwd mit Hilfe von phpMyAdmin Importieren der Testdaten aus einer CSV-Datei Erstellung Mailformular (mailform.php) Erstellen PHP-Skript zum Versenden des Mails (mailsenden.php) Formatierung mit CSS (mail.css) Einbindung des TinyMCE Mögliche Ergänzungen. Notwendigen Zugangsschutz für diese Seite einrichten Erweiterung: Mails mit Attachement verschicken können: Upload der Attachement-Dateien einrichten MMWD-Mailer Dieses Programm kann Mails an die MMWD-Gruppe versenden mailform.php Mail-Formular mit TinyMCE und Empfängerauswahl aus Listenfeld mailsenden.php Versenden von HTML-Mails Datenbank: mail_mmwd Tabelle: schueler Abb.: Sitemap Hinweis: Diese Sitemap wurde mit Excel erstellt (Eine Sitemap sollte Bestandteil jeder Softwaredokumentation sein) Über die verwendeten Sitemap-Elemente lesen Sie nach bei: www.benutzerfreun.de/konzepter-infos/vorlagen_sitemaps.html bzw. direkter Download: http://www.benutzerfreun.de/wp-content/uploads/2008/12/sitemapelemente.pdf?9d7bd4 © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 2/9 Anlegen der Datenbank-Datei Struktur der Tabelle in der Datenbank anlegen Tabelle: schueler Feldname Feldtype Feldlänge Zusätze ID int 3 not_null primary_key unsigned auto_increment klasse string 3 not_null vorname string 255 not_null nachname string 255 not_null email string 255 not_null gebdat date 10 not_null binary Daten importieren Abb.: Im Editor geöffnete CSV-Datei (Daten getrennt durch “;“) Abb.: Datenimport im phpMyAdmin © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 3/9 Mail Formular erzeugen Abb.: Mailformular (fertig) Mailformular erstellen, dabei die Empfänger-Liste mit empf[] bezeichnen. Dadurch wird es möglich die Mehrfachauswahl als Array-Variable zu übergeben. Datensatzgruppe anlegen Dynamische Liste erzeugen: Abb.: Eigenschaften empf[]-Liste Abb.: Dialog: Dynamische Liste © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 4/9 Datei: mailform.php [01] <?php require_once('Connections/vb_mail_mmwd.php'); ?> [02] <?php [03] mysql_select_db($database_vb_mail_mmwd, $vb_mail_mmwd); [04] $query_rs_schueler = "SELECT * FROM schueler"; [05] $rs_schueler = mysql_query($query_rs_schueler, $vb_mail_mmwd) or die(mysql_error()); [06] $row_rs_schueler = mysql_fetch_assoc($rs_schueler); [07] $totalRows_rs_schueler = mysql_num_rows($rs_schueler); [08] ?> [09] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [10] <html> [11] <head> [12] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [13] <title>Unbenanntes Dokument</title> [14] <!-- TinyMCE --> [15] <script type="text/javascript" src="tinymce/jscripts/tiny_mce/tiny_mce.js"></script> [16] <script type="text/javascript"> [17] tinyMCE.init({ [18] language : "de", [19] mode : "textareas", [20] theme : "simple" [21] }); [22] </script> [23] <!-- /TinyMCE --> [24] [25] [26] <link href="mail.css" rel="stylesheet" type="text/css"> [27] </head> [28] [29] <body> [30] <h2>Mail-Formular</h2> [31] <form name="form1" method="post" action="mailsenden.php"> [32] <table width="80%" border="1" cellpadding="2"> [33] <tr> [34] <td width="22%">Absender:</td> [35] <td width="78%"><input name="abs" type="text" id="abs" size="50"></td> [36] </tr> [37] <tr> [38] <td>Empf&auml;nger:</td> [39] <td><select name="empf[]" size="5" multiple id="empf[]"> [40] <?php [41] do { [42] ?> [43] <option value="<?php echo $row_rs_schueler['email']?>"><?php echo $row_rs_schueler['nachname']?></option> [44] <?php [45] } while ($row_rs_schueler = mysql_fetch_assoc($rs_schueler)); [46] $rows = mysql_num_rows($rs_schueler); [47] if($rows > 0) { [48] mysql_data_seek($rs_schueler, 0); [49] $row_rs_schueler = mysql_fetch_assoc($rs_schueler); [50] } [51] ?> [52] </select></td> [53] </tr> [54] <tr> [55] <td>CC:</td> [56] <td><input name="cc" type="text" id="cc" size="50"></td> [57] </tr> [58] <tr> [59] <td>BCC:</td> [60] <td><input name="bcc" type="text" id="bcc" size="50"></td> [61] </tr> [62] <tr> [63] <td>Betreff:</td> [64] <td><input name="betreff" type="text" id="betreff" size="50"></td> [65] </tr> [66] <tr> [67] <td>Meldung:</td> © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 5/9 [68] <td><textarea name="meldung" cols="50" rows="5" id="meldung"></textarea></td> [69] </tr> [70] <tr> [71] <td colspan="2"><div align="right"> [72] <input type="submit" name="Submit" value="Absenden"> [73] <input type="reset" name="Submit2" value="Zurücksetzen"> [74] </div></td> [75] </tr> [76] </table> [77] <div align="right"> </div> [78] </form> [79] <h2>&nbsp; </h2> [80] </body> [81] </html> [82] <?php [83] mysql_free_result($rs_schueler); [84] ?> TinyMCE einbinden TinyMCE (Tiny Moxiecode Content Editor) ist ein auf JavaScript basierter freier WYSIWYGEditor für Webanwendungen. Je nach Konfiguration und Plugins kann TinyMCE Texte unterstreichen, Bilder einbinden oder ganze Tabellen erstellen. Der Funktionsumfang kann individuell konfiguriert werden, da es möglich ist, Funktionen einzeln zu aktivieren. (Siehe Wikipädia) Quelle: http://www.tinymce.com/ Wir haben ihn in der einfachsten Form auf Deutsch eingebunden. [17] [18] [19] [20] [21] tinyMCE.init({ language : "de", mode : "textareas", theme : "simple" }); Ich verweise auf meine (ältere) Dokumentation: http://www.erwin-mayer.at/mmwd_beispiele/WEd_TinyMCE_6.pdf © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 6/9 Datei zum Verschicken von Mails erstellen Datei: mailsenden.php [01] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [02] <html><head> [03] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [04] <title>Mail-Sendung</title> [05] </head><body> [06] <?php [07] /* Empfänger befinden sich in einem Array*/ [08] $empfaenger = implode(",",$_POST['empf']); [09] /* Empfänger CC */ [10] $empfaengerCC = $_POST['cc']; [11] /* Empfänger BCC */ [12] $empfaengerBCC = $_POST['bcc']; [13] /* Absender */ [14] $absender = $_POST['abs']; [15] /* Rueckantwort hier anders, könnte auch der Absender sein*/ [16] $reply = '[email protected]'; [17] /* Betreff */ [18] $subject = $_POST['betreff'];; [19] /* Nachricht */ [20] $message = $_POST['meldung'];; [21] [22] /* Baut Header der Mail zusammen */ [23] $headers = 'From:' . $absender . "\r\n"; [24] $headers .= 'Reply-To:' . $reply . "\r\n"; [25] $headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n"; [26] $headers .= 'X-Sender-IP: ' . $_SERVER["REMOTE_ADDR"] . "\r\n"; [27] $headers .= "MIME-Version: 1.0" . "\r\n"; [28] $headers .= "Content-type: text/html; charset=iso-8859-1". "\r\n"; [29] [30] [31] if ($empfaengerCC != "") [32] $headers .= 'Cc: ' . $empfaengerCC . "\n"; [33] if ($empfaengerBCC != "") [34] $headers .= 'Bcc: ' . $empfaengerBCC . "\n"; [35] [36] /* Verschicken der Mail */ [37] $emeldung = mail($empfaenger, $subject, $message, $headers); [38] if ($emeldung == 1)# Prüfung, ob Mail versandt [39] { [40] echo "Mail an " . $empfaengerString . " versandt!"; [41] } [42] else [43] { [44] # Fehler [45] echo "Mail konnte nicht versendet werden!"; [46] } [47] ?> [48] </body> [49] </html> Abb.: Code der Datei mailsenden.php Erklärung zum Code In Zeile 8 wird ein Array zum String zusammengefügt: [email protected],[email protected],[email protected] Dieser wird dann als Empfänger im Mail benutzt! © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 7/9 In den Zeilen 23-28 wird der Header zusammengebaut: From Reply-To Return-Path MIME-Version Content-Type Content-TransferEncoding Message-ID X-Mailer Das ist die Absenderadresse und der dazugehörige Name. Es ist üblich diesen in der Form Name anzugeben. Das ist die absolute Minimumangabe für einen Mailheader. Fehlt das From, wird der Versand der Mail fehlschlagen. Das Format kann entweder nur eine Email Adresse sein, oder man wählt das Format wir bei From. Dieses Feld ist die Antwortadresse an die die Mail geschickt wird, wenn wir im Mail Client auf antworten klicken. Konnte die Mail nicht zugestellt werden, wird dies an diese Adresse gemeldet. MIME (Multipurpose Internet Mail Extensions ) Entspricht dem MIME Typ der Mail. Das ist die Information die dem Mail Client mitteilt, um welche Art Mail es sich handelt und welcher Zeichensatz zur Darstellung benutzt werden soll. Dies beschreibt die Art der Übertragung und wie sowohl Mailserver, als auch Email Clients diese Mail interpretieren. 7bit ist die kleinste Form, die maximal mögliche Kompatibilität ermöglicht. Beim 7bit ASCII Zeichensatz können die ersten 128 zeichen der ASCII Tabelle dargestellt werden. Zeichen wie deutsche Umlaute sind darin nicht vorgesehen. Bei der 8bit Übertragung können bis zu 256 zeichen dargestellt werden. Die Message ID ist einmalig, bzw. sollte es sein, wodurch die Mail eindeutig zugeordnet werden kann. Beschreibt den Client der die Mail versendet hat. In unserem Fall geben wir die PHP Version an, damit Mailserver auf der Route wissen, dass diese Mail mit PHP verschickt wurde. In Zeile 37 wird das Mail versandt Formatierung des Formulars Datei: mail.css [01] [02] [03] [04] [05] [06] [07] body { font-family: Arial, Helvetica, sans-serif; background: #FFFF80; } table { background: #80FF80; } © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 8/9 Anhang: Quellcode Datensicherung: schueler.sql --------- phpMyAdmin SQL Dump version 3.5.2 http://www.phpmyadmin.net Host: localhost Erstellungszeit: 30. Okt 2012 um 19:55 Server Version: 5.5.25a PHP-Version: 5.4.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 /*!40101 /*!40101 /*!40101 SET SET SET SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; NAMES utf8 */; --- Datenbank: `mail_mmwd` --- ---------------------------------------------------------- Tabellenstruktur für Tabelle `schueler` -CREATE TABLE IF NOT EXISTS `schueler` ( `ID` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `klasse` varchar(3) NOT NULL, `vorname` varchar(255) NOT NULL, `nachname` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `gebdat` date NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ; --- Daten für Tabelle `schueler` -INSERT INTO `schueler` (`ID`, `klasse`, `vorname`, `nachname`, `email`, `gebdat`) VALUES (1, '4BK', 'Leila', 'Babic', '[email protected]', '1995-03-24'), (2, '4BK', 'Valentina', 'Baumgartner', '[email protected]', '1995-02-24'), (3, '4BK', 'Julian', 'Bohrnhofer', '[email protected]', '1994-03-04'), (4, '4BK', 'Onur', 'Boyraz', '[email protected]', '1994-06-01'), (5, '4BK', 'Markus', 'Brisker', '[email protected]', '1995-05-28'), (6, '4BK', 'Michael', 'Czech', '[email protected]', '1995-02-09'), (7, '4BK', 'Moritz', 'Ehlmaier', '[email protected]', '1995-05-24'), (8, '4BK', 'Thomas', 'Kliesspiess', '[email protected]', '1993-10-08'), (9, '4BK', 'Julian', 'Partsch', '[email protected]', '1993-12-25'), (10, '4BK', 'Patrick', 'Rasztovics', '[email protected]', '1995-08-29'), (11, '4BK', 'Romana', 'Rechensteiner', '[email protected]', '1995-03-05'), (12, '4CK', 'Michael ', 'Berger ', 'm.berger @vbs.ac.at', '1992-12-28'), (13, '4CK', 'Ernes ', 'Halilovic ', 'e.halilovic @vbs.ac.at', '1992-12-25'), (14, '4CK', 'Fabian ', 'Hippmann ', 'f.hippmann @vbs.ac.at', '1993-09-23'), (15, '4CK', 'Isidora ', 'Nestorovic ', 'i.nestorovic @vbs.ac.at', '1994-08-26'), (16, '4CK', 'Marina ', 'Schneeberger ', 'm.schneeberger @vbs.ac.at', '1994-06-08'), (17, '4CK', 'Natascha ', 'Schulz ', 'n.schulz @vbs.ac.at', '1995-07-21'), (18, '4DK', 'Carla ', 'Gau ', 'c.gau @vbs.ac.at', '1994-09-21'), © Mag. Erwin Mayer Beispiel: PHP-Mailer Seite 9/9