PHP-Mailer

Werbung
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ä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>  </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
Herunterladen