IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - Mailen aus dem Browser heraus



Mailen aus dem Browser heraus

Mit diesem einfach PHP3/PHP4-Script (UNIX empfohlen, müsste aber auch auf Windows funktionieren), lassen sich E-Mails von überall auf der Welt mit dem Browser versenden


Autor: Michael Jurisch (Clyde)
Datum: 22-07-2002, 19:15:15
Referenzen: keine
Schwierigkeit: Anfänger
Ansichten: 6006x
Rating: 9.6 (5x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung:
Dieses Script benötigt einen (UNIX)-Server mit installiertem PHP3/PHP4. Das Verschicken der Mails wird über die mail()-Funktion geregelt - außerdem wird überprüft, ob die Mail erfolgreich verschickt wurde oder nicht. Das Script ist noch recht einfach und wird von mir in einem zweiten Teil weiter ausgebaut werden.

Schritt für Schritt:
Wir werden uns nun die einzelnen Teile des Scripts separat ansehen. Die Zahlen am Anfang sind die Zeilenzahlen, auf die ich mich im Text der Einfachheit halber beziehe. Diese dürfen natürlich nicht mit abgetippt werden. Das komplette Script - ohne Zeilenzahlen - ist noch einmal am Ende des Artikels gelistet.

Wir beginnen mit den typischen HTML-Header-Angaben, damit der Browser den Inhalt auch ordentlich ausgeben kann:

01: <html>
02: <head>
03: 		<title>Kleines Mailprogramm</title>
04: </head>
05: <body>
06: <h2 align="center">Kleines Mailprogramm</h2>
Den Seitentitel, eventuelle body- bzw. CSS-Angaben und Überschriften kann man natürlich frei definieren und den eigenen Gegebenheiten anpassen.

Nun folgt das Formular, über das wir alle benötigten Daten wie Empfängeradresse und Mitteilung eingeben können:

07: <form action="<?php echo $PHP_SELF; ?>" method="post">
08: <table border=0 width=600>
09:	<tr>
10:	<td width=200>Empfänger-Mail-Adresse:</td>
11:	<td width=400><input type="text" name="empfang" size="30"></td>
12:	</tr>
13:	<tr>
14:	<td width=200>Betreff:</td>
15:	<td width=400><input type="text" name="betreff" size="30"></td>
16:	</tr>
17:	<tr>
18:	<td width=200>Absender-Mail-Adresse:</td>
19:	<td width=400><input type="text" name="absender" size="30"></td>
20:	</tr>
21:	<tr>
22:	<td width=200 valign="top">Mitteilung:</td>
23:	<td width=400><textarea cols="50" rows="5" name="mitteilung"></textarea></td>
24:	</tr>
25:	<tr>
26:	<td width=200> </td>
27:	<td width=400>
28:	<input type="submit" name="send" value="Mail abschicken">
29:	<input type="Reset" value="Eingaben löschen">
30:	</td>
31:	</tr>
32: </table>
33: </form>
Die in Zeile 7 verwendete Variable $PHP_SELF bewirkt, dass die Daten beim Abschicken des Formulars an sich selbst geschickt werden. Das macht Sinn, da wir nur eine Datei benutzen. So braucht man nicht zu wissen, unter welchem Namen man das Script gespeichert hat - diese Variable "weiß" es von allein.
Des weiteren sind natürlich die name-Einträge wichtig aller Formularfelder. Diese sollten so übernommen werden, da genau diese Namen im PHP-Teil abgefragt werden.
Die (Form der) Tabelle an sich kann natürlich wieder nach eigenem Ermessen an die persönlichen Bedürfnisse angepasst werden.

Jetzt wird es interessant, denn nun folgt der entscheidende PHP-Code:

34:
35: <?php
36: if (isset($send)) {
37: 	function mailme($empfang, $betreff, $mitteilung, $absender) {
38:	$post = mail($empfang, $betreff, $mitteilung,"From: $absender");
39:	return $post;
40:	}
41:
42:	$post = mailme($empfang, $betreff, $mitteilung, $absender);
Zeile 36 überprüft, ob auf den Abschicken-Button des Formulars geklickt wurde, ansonsten (z.B. wenn das Script zum ersten Mal aufgerufen wird) wird dieser Code nicht ausgeführt (und damit - logischerweise - noch keine Mail verschickt).
In Zeile 37 definieren wir eine eigene Funktion mit den Variablen, die wir durch den Funktionsaufruf aus Zeile 42 übergeben. Diese Variablen enthalten die Werte aus dem abgeschickten Formular!
Zeile 38 verarbeitet nun die Variablen in der PHP-mail()-Funktion und ist für das Versenden der Mail zuständig. Der erste Parameter der Funktion ist immer die Empfänger-E-Mail-Adresse, der zweite ist der Betreff, der dritte die eigentliche Mitteilung (erst mal nur im reinen Text-Format) und der vierte Parameter kann wiederum mehrere Parameter in sich vereinen. In unserem Beispiel ist das nur die Absender-E-Mail-Adresse. Die einzelnen Parameter der Funktionen werden immer durch ein Komma getrennt.

Das Ergebnis des Mail-Versands (erfolgreich oder nicht) wird in der Variable $post zurückgegeben.

43:
44:	if ($post == TRUE) {
45:	echo "<b>Mail wurde erfolgreich verschickt!</b>";
46:	} else {
47:	echo "<b>Mail konnte leider nicht verschickt werden!</b>";
48:	}
49: }
50: ?>
Wurde die Mail erfolgreich versandt, dann gibt die mail()-Funktion den Wert TRUE zurück, ansonsten FALSE. In Zeile 33 wird dieser Zustand nun abgeprüft und eine entsprechende Meldung unterhalb des Formulars ausgegeben. Nun kann eine weitere Mail verschickt werden.

Zu einem Fehler im Mail-Versand kommt es z.B., wenn keine Empfänger-E-Mail-Adresse eingegeben wurde. Klar, woher soll der Server auch wissen, wohin die Mail verschickt werden soll? Alle anderen Felder können ausgelassen werden - ob das Sinn macht, ist natürlich eine andere Frage.

Abschließend beenden wir natürlich unser Dokument mit den entsprechenden HTML-Angaben:

51:
52: </body>
53: </html>
Das komplette Listing:

<html>
<head>
	<title>Kleines Mailprogramm</title>
</head>
<body>
<h2 align="center">Kleines Mailprogramm</h2>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table border=0 width=600>
<tr>
	<td width=200>Empfänger-Mail-Adresse:</td>
	<td width=400><input type="text" name="empfang" size="30"></td>
</tr>
<tr>
	<td width=200>Betreff:</td>
	<td width=400><input type="text" name="betreff" size="30"></td>
</tr>
<tr>
	<td width=200>Absender-Mail-Adresse:</td>
	<td width=400><input type="text" name="absender" size="30"></td>
</tr>
<tr>
	<td width=200 valign="top">Mitteilung:</td>
	<td width=400><textarea cols="50" rows="5" name="mitteilung">
	</textarea></td>
</tr>
<tr>
	<td width=200> </td>
	<td width=400>
	<input type="submit" name="send" value="Mail abschicken">
	<input type="Reset" value="Eingaben löschen">
	</td>
</tr>
</table>
</form>

<?php
if (isset($send)) {
	function mailme($empfang, $betreff, $mitteilung, $absender) {
	$post = mail($empfang, $betreff, $mitteilung,"From: $absender");
	return $post;
	}

	$post = mailme($empfang, $betreff, $mitteilung, $absender);
		
	if ($post == TRUE) {
	echo "<b>Mail wurde erfolgreich verschickt!</b>";
	} else {
	echo "<b>Mail konnte leider nicht verschickt werden!</b>";
	}
}
?>

</body>
</html>


fmarco
Rookie
Beitrag vom:
13-01-2004, 08:12:51

SMTP?

Wie stehts mit dem Senden per SMTP? Ich meine, dass man z.B. einen fremden SMTP-Server angeben kann.

-----------------------------------------------------
gruss Marco F.


dreamer
Expert
Beitrag vom:
28-12-2003, 16:02:38

Und noch etwas...

Wenn der Server im ini regester_globals auf off stehen hat, sollte man die Variablen so schreiben: $_POST[]

-----------------------------------------------------


dreamer
Expert
Beitrag vom:
26-12-2003, 12:15:03

<

Ich würde noch folgendes am Code ändern: <tr><td><input type="text" name="Name"></td></tr> <tr><td><input type="text" name="Email_Adresse"></td></tr> $absender = $Name.' <'.$Email_Adresse.'>';

-----------------------------------------------------


picard
Professonial
Beitrag vom:
15-11-2003, 11:09:54

Sehr guter Vorschlag!

Ich werde es mal anregen!

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


Clyde
Junior-Member
Beitrag vom:
26-07-2002, 13:06:33

@Cpt. Picard

Da wäre es doch - um Deine Fragestellung zukünfig zu erübrigen (das wirst Du ja sicher jeden fragen, der was kleines ändert) - sinnvoll, auf der "Artikel editieren"-Seite noch ein Textfeld reinzusetzen, in das der Autor/Editor einträgt, WAS genau er geändert hat ...

-----------------------------------------------------
Science Fiction wie Star Trek ist nicht nur Unterhaltung, sondern erfüllt auch einen ernsten Zweck: Sie erweitert die menschliche Vorstellungskraft. - S. Hawking


picard
Professonial
Beitrag vom:
26-07-2002, 13:01:53

Danke!

Das wollte ich nur wissen!

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


Clyde
Junior-Member
Beitrag vom:
25-07-2002, 07:17:01

@Cpt. Picard

Hier ist Nummer 1. Habe nur die Überschrift "Das komplette Listing" mit dem bold-Tag versehen, mehr habe ich nicht geändert.

-----------------------------------------------------
Science Fiction wie Star Trek ist nicht nur Unterhaltung, sondern erfüllt auch einen ernsten Zweck: Sie erweitert die menschliche Vorstellungskraft. - S. Hawking


picard
Professonial
Beitrag vom:
24-07-2002, 17:48:20

Frage:

Du hast diesen Artikel nachträglich bearbeit - hast Du da den gesamten Code neu reinkopiert, oder nur einzelne Stellen ausgebessert?

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


Clyde
Junior-Member
Beitrag vom:
23-07-2002, 09:46:14

Schwer oder nicht?

War mir nicht ganz sicher, wie ich den Schwierigkeitsgrad bewerten soll, vermutlich ist es ein "Zwischending" zwichen Anfänger und Fortgeschrittener (wegen der Arbeit mit einer eigenen Funktion). SO schwer ist es aber gar nicht, und will darum keinem Anfänger den Mut nehmen, es nicht doch zu probieren.

-----------------------------------------------------
Science Fiction wie Star Trek ist nicht nur Unterhaltung, sondern erfüllt auch einen ernsten Zweck: Sie erweitert die menschliche Vorstellungskraft. - S. Hawking


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0