Erste Version des vmail-Modul
bernd authored 16 years ago
|
1) <?php
2) require_once('inc/base.php');
3) require_once('inc/debug.php');
4)
|
Bugfix: Funktion-Dopplung v...
bernd authored 16 years ago
|
5) require_once('hasdomain.php');
|
Erste Version des vmail-Modul
bernd authored 16 years ago
|
6)
7) function empty_account()
8) {
9) $account = array(
10) 'id' => NULL,
11) 'local' => '',
12) 'domain' => NULL,
13) 'type' => 'mailbox',
14) 'data' => NULL,
|
Spam- und viren nur noch ei...
bernd authored 16 years ago
|
15) 'spamfilter' => 'folder',
|
Erste Version des vmail-Modul
bernd authored 16 years ago
|
16) 'virusfilter' => NULL,
17) 'spamexpire' => 7,
18) 'virusexpire' => 7
19) );
20) return $account;
21)
22) }
23)
24) function get_account_details($id)
25) {
26) $id = (int) $id;
27) $uid = (int) $_SESSION['userinfo']['uid'];
28) $result = db_query("SELECT id, local, domainid as domain, type, data, spamfilter, virusfilter from mail.v_virtual_mail WHERE useraccount='{$uid}' AND id={$id} LIMIT 1");
29) if (mysql_num_rows($result) == 0)
30) system_failure('Ungültige ID oder kein eigener Account');
31) return mysql_fetch_assoc($result);;
32)
33) }
34)
35) function get_vmail_accounts()
36) {
37) $uid = (int) $_SESSION['userinfo']['uid'];
38) $result = db_query("SELECT * from mail.v_virtual_mail WHERE useraccount='{$uid}'");
39) $ret = array();
40) while ($line = mysql_fetch_assoc($result))
41) {
42) array_push($ret, $line);
43) }
44) DEBUG($ret);
45) return $ret;
46) }
47)
48)
49)
50) function get_vmail_domains()
51) {
52) $uid = (int) $_SESSION['userinfo']['uid'];
53) $result = db_query("SELECT id, domainname FROM mail.v_vmail_domains WHERE useraccount='{$uid}'");
54) if (mysql_num_rows($result) == 0)
55) system_failure('Sie haben keine Domains für virtuelle Mail-Verarbeitung');
56) $ret = array();
57) while ($tmp = mysql_fetch_object($result))
58) array_push($ret, $tmp);
59) return $ret;
60) }
61)
62)
63)
64) function domainselect($selected = NULL, $selectattribute = '')
65) {
|
Bugfix: Funktion-Dopplung v...
bernd authored 16 years ago
|
66) $domainlist = get_vmail_domains();
|
Erste Version des vmail-Modul
bernd authored 16 years ago
|
67) $selected = (int) $selected;
68)
69) $ret = '<select id="domain" name="domain" size="1" '.$selectattribute.' >';
70) foreach ($domainlist as $dom)
71) {
72) $s = ($selected == $dom->id) ? ' selected="selected" ': '';
73) $ret .= "<option value=\"{$dom->id}\"{$s}>{$dom->domainname}</option>\n";
74) }
75) $ret .= '</select>';
76) return $ret;
77) }
78)
79)
80) function encrypt_mail_password($pw)
81) {
82) DEBUG("unencrypted PW: ".$pw);
83) require_once('inc/base.php');
84) $salt = random_string(8);
85) $encpw = crypt($pw, "\$1\${$salt}\$");
86) DEBUG("encrypted PW: ".$encpw);
87) return chop($encpw);
88)
89) }
90)
91)
92)
93) function save_vmail_account($account)
94) {
95) $uid = (int) $_SESSION['userinfo']['uid'];
96) $id = $account['id'];
97) if ($id != NULL)
98) {
99) $id = (int) $id;
100) $oldaccount = get_account_details($id);
101) // Erzeugt einen system_error() wenn ID ungültig
102) }
103) // Ab hier ist $id sicher, entweder NULL oder eine gültige ID des aktuellen users
104)
105) $account['local'] = filter_input_username($account['local']);
106) if ($account['local'] == '')
107) {
108) input_error('Die E-Mail-Adresse braucht eine Angabe vor dem »@«!');
109) return false;
110) }
111) $account['domain'] = (int) $account['domain'];
112) $domainlist = get_vmail_domains();
113) $valid_domain = false;
114) foreach ($domainlist as $dom)
115) {
116) if ($dom->id == $account['domain'])
117) {
118) $valid_domain = true;
119) break;
120) }
121) }
122) if (($account['domain'] == 0) || (! $valid_domain))
123) {
124) input_error('Bitte wählen Sie eine Ihrer Domains aus!');
125) return false;
126) }
127) $type = NULL;
128) switch ($account['type'])
129) {
130) case 'forward':
|
mehrere Adressen erlauben
bernd authored 16 years ago
|
131) $forward_to = preg_split("/[\s,]+/", $account['data']);
132) foreach ($forward_to as $addr)
133) {
134) $addr = filter_input_general($addr);
135) if (! check_emailaddr($addr))
|
Fehlerhafte Adresse in die...
bernd authored 16 years ago
|
136) system_failure('Das Weiterleitungs-Ziel »'.$addr.'« ist keine E-Mail-Adresse!');
|
mehrere Adressen erlauben
bernd authored 16 years ago
|
137) }
138) $account['data'] = implode(' ', $forward_to);
|
Erste Version des vmail-Modul
bernd authored 16 years ago
|
139) $type = 'forward';
140) break;
141) case 'mailbox':
142) $account['data'] = stripslashes($account['data']);
143) if ($account['data'] != '')
144) {
145) $crack = strong_password($account['data']);
146) if ($crack !== true)
147) {
148) input_error('Ihr Passwort ist zu einfach. bitte wählen Sie ein sicheres Passwort!'."\nDie Fehlermeldung lautet: »{$crack}«");
149) return false;
150) }
151) $account['data'] = encrypt_mail_password($account['data']);
152) }
153) $type = 'mailbox';
154) break;
155) }
156) if ($type == NULL)
157) {
158) input_error('Problem mit der »type«-Variable!');
159) return false;
160) }
161)
162) $spam = 'NULL';
163) switch ($account['spamfilter'])
164) {
165) case 'folder':
166) if ($type == 'forward')
167) {
168) input_error('Sie können nicht in einen IMAP-Unterordner zustellen lassen, wenn Sie gar kein IMAP-Konto anlegen!');
169) return false;
170) }
171) $spam = "'folder'";
172) break;
173) case 'tag':
174) $spam = "'tag'";
175) break;
176) case 'delete':
177) $spam = "'delete'";
178) break;
179) }
180)
181) $virus = 'NULL';
182) switch ($account['virusfilter'])
183) {
184) case 'folder':
185) if ($type == 'forward')
186) {
187) input_error('Sie können nicht in einen IMAP-Unterordner zustellen lassen, wenn Sie gar kein IMAP-Konto anlegen!');
188) return false;
189) }
190) $virus = "'folder'";
191) break;
192) case 'tag':
193) $virus = "'tag'";
194) break;
195) case 'delete':
196) $virus = "'delete'";
197) break;
198) }
199)
200) $account['local'] = mysql_real_escape_string($account['local']);
201) $account['data'] = mysql_real_escape_string($account['data']);
202) $account['spamexpire'] = (int) $account['spamexpire'];
203) $account['virusexpire'] = (int) $account['virusexpire'];
204)
205) $query = '';
206) if ($id == NULL)
207) {
208) $query = "INSERT INTO mail.virtual_mail (local, domain, type, data, spamfilter, virusfilter, spamexpire, virusexpire) VALUES ";
209) $query .= "('{$account['local']}', {$account['domain']}, '{$type}', '{$account['data']}', {$spam}, {$virus}, {$account['spamexpire']}, {$account['virusexpire']});";
210) }
211) else
212) {
213) $password = ", data='{$account['data']}'";
214) if ($account['data'] == '')
215) $password = '';
216) $query = "UPDATE mail.virtual_mail SET local='{$account['local']}', domain={$account['domain']}, type='{$type}'{$password}, ";
217) $query .= "spamfilter={$spam}, virusfilter={$virus}, spamexpire={$account['spamexpire']}, virusexpire={$account['virusexpire']} ";
218) $query .= "WHERE id={$id} LIMIT 1;";
219) }
220) db_query($query);
221) }
222)
223)
224)
|
Löschen geht jetzt auch
bernd authored 16 years ago
|
225) function delete_account($id)
226) {
227) $account = get_account_details($id);
228) db_query("DELETE FROM mail.virtual_mail WHERE id={$account['id']};");
229) }
230)
|