Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?
2
	// $Id: mail.php 24 2007-07-03 10:41:26Z tiefland $
3
 
4
	//Variablen initialisieren
5
	$encoding=iconv_get_encoding();
6
	$headers=array();
7
	$email=(isset($_POST["email"]))?$_POST["email"]:"info@weban.de";
8
	$_from=(isset($_POST["_from"]))?$_POST["_from"]:$email;
9
	$_to=(isset($_POST["_to"]))?$_POST["_to"]:$email;
10
	$recipient=(isset($_POST["recipient"]))?$_POST["recipient"]:$email;
11
	$_subject=(isset($_POST["_subject"]))?$_POST["_subject"]:"";
12
	$subject=(isset($_POST["subject"]))?$_POST["subject"]:"";
13
	$_target=(isset($_POST["_target"]))?$_POST["_target"]:"";
14
	$redirect=(isset($_POST["redirect"]))?$_POST["redirect"]:"";
15
	$submit=false;
16
	$cc=false;
17
	$bcc=false;
18
	$sub=false;
19
	$ref=$_SERVER["HTTP_REFERER"];
20
	$start = strpos ($ref, "//");
21
 
22
	// Referrer überprüfen
23
	if ($start < 0)
24
	{
25
		$start = 0;
26
	}
27
	else
28
	{
29
		$start = $start + 2;
30
	}
31
	$stop = strpos ($ref, "/", $start);
32
 
33
	// Variable $_POST auf "submit" als Array-Key überprüfen
34
	// falls nicht gefunden ==> ENDE
35
 
36
/*	foreach ($_POST as $key => $value)
37
	{
38
		if (strtolower($key)=="submit")
39
		{
40
			$submit=true;
41
		}
42
	}
43
 
44
	if (substr ($ref, $start, $stop-$start) != $_SERVER["SERVER_NAME"]||!$submit) */
45
	if (substr ($ref, $start, $stop-$start) != $_SERVER["SERVER_NAME"])
46
	{
47
		exit;
48
	}
49
 
50
	//Body zusammenbauen
51
	foreach(array_keys($_POST) as $elem)
52
	{
53
		if ($elem[0] == "_")
54
		{
55
			unset($_POST[$elem]);
56
		}
57
		else
58
		{
59
			if (is_array($_POST[$elem]))
60
			{
61
				$_POST[$elem] = implode($_POST[$elem],", ");
62
			}
63
			$_POST[$elem] = $elem.": ".$_POST[$elem];
64
		}
65
	}
66
	$body=iconv("UTF-8","ISO-8859-15",implode($_POST,"\n"));
67
 
68
	// TO Adresse ermitteln
69
	if (!$_to)
70
	{
71
		$_to = $recipient;
72
	}
73
	if (!$_subject)
74
	{
75
		$_subject  = iconv("UTF-8","ISO-8859-15",$subject);
76
	}
77
	else
78
	{
79
		$_subject  = iconv("UTF-8","ISO-8859-15",$_subject);
80
	}
81
 
82
	// FROM Adresse ermitteln
83
	if (!$_from)
84
	{
85
		if ($email)
86
		{
87
			$_from = $email;
88
		}
89
		else
90
		{
91
			$_from = $_to;
92
		}
93
	}
94
 
95
	// Weiterleitungsziel ermitteln
96
	if (!$_target)
97
	{
98
		if ($redirect)
99
		{
100
			$_target = $redirect;
101
		}
102
		else
103
		{
104
			$_target = "danke.htm?ref=".urlencode($ref);
105
		}
106
	}
107
	else
108
	{
109
		$_target = dirname($ref)."/".$_target;
110
	}
111
 
112
	// Header überprüfen (muß leer sein)
113
	if(count($headers))
114
	{
115
		//Header wurde manipuliert!
116
		$keys=array("cc","cC","Cc","CC");
117
		foreach($keys as $key)
118
		{
119
			if (isset($headers[$key]))
120
			{
121
				unset($headers[$key]);
122
				$cc=true;
123
			}
124
			if (isset($headers["b".$key]))
125
			{
126
				unset($headers["b".$key]);
127
				$bcc=true;
128
			}
129
			if (isset($headers["B".$key]))
130
			{
131
				unset($headers["B".$key]);
132
				$bcc=true;
133
			}
134
		}
135
	}
136
 
137
	// Verschiedene Variablen überprüfen, ob "TO: BCC: CC: oder FROM: Einträge vorkommen
138
	$ereg1 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $_to);
139
	$ereg2 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $body);
140
	$ereg3 = eregi("/(from\:)|(to\:)|(cc\:)|(bcc\:)/", $_subject);
141
 
142
	// Eventuell vorhandenes "SUBJECT"-Feld im Header löschen
143
	foreach($headers as $header => $value)
144
	{
145
		if (strtolower($headers)=="subject")
146
		{
147
			unset($headers[$header]);
148
			$sub=true;
149
		}
150
	}
151
 
152
	//Body erweitern, falls manipulierte Werte gefunden wurden!
153
	$body.=($ereg1)?"To enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
154
	$body.=($ereg2)?"Body enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
155
	$body.=($ereg3)?"Subject enthielt zusätzliche Angaben ('FROM:', 'TO:', 'CC:', 'BCC:')!\n":"";
156
	$body.=($sub)?"Header enthielt zusätzliche Subject-Angabe!\n":"";
157
	$body.=($bcc)?"Header enthielt BCC-Angabe!\n":"";
158
	$body.=($cc)?"Header enthielt CC-Angabe!\n":"";
159
 
160
	//Prüfen, ob kein HTML in Nachricht vorkommt
161
	$no_html=($body==strip_tags($body));
162
 
163
	// Header-Array zusammenbauen
164
	$headers["From"]=$_from;
165
	$headers["Subject"]=$_subject;
166
	// PEAR-Klasse "Mail" einbinden und "mail"-Objekt erstellen
167
	require_once("Mail.php");
168
	$mail=Mail::factory("mail");
169
 
170
	// Prüfen, ob kein Fehler aufgetreten ist
171
	if(!PEAR::isError($mail))
172
	{
173
		// Wenn alles OK ist
174
		if(!$ereg1 && !$ereg2 && !$ereg3 && !$bcc && !$cc && !$sub && $no_html)
175
		{
176
			//Mail verschicken
177
			$mail->send($_to, $headers, $body);
178
			$headers["Subject"]="Nachrichtenkopie auf $SERVER_NAME: ".$headers["Subject"];
179
		}
180
		else
181
		{
182
			$headers["Subject"]="Nachrichtenkopie auf $SERVER_NAME: ".$headers["Subject"]." - Spam-Nachricht";
183
		}
184
		// Nachricht erweitern
185
		$body=implode("\n",$headers)."\n$_to\n$body";
186
 
187
		// Nachrichtenkopie verschicken
188
		$mail->send("tiefland@weban.de", $headers, $body);
189
		$mail->send("niewerth@weban.de", $headers, $body);
190
	}
191
 
192
	// Auf Danke-Seite weiterleiten
193
	header("Location: $_target");
194
?>