4 ** mail_fetch/fetch.php
6 ** Copyright (c) 1999-2002 The SquirrelMail Project Team
7 ** Licensed under the GNU GPL. For full terms see the file COPYING.
15 require_once('../src/validate.php');
16 require_once('../functions/page_header.php');
17 require_once('../functions/imap.php');
18 require_once('../src/load_prefs.php');
19 require_once('../plugins/mail_fetch/class.POP3.php');
20 require_once('../functions/i18n.php');
21 require_once( '../plugins/mail_fetch/functions.php' );
24 function Mail_Fetch_Status($msg) {
25 echo '<table width="90%"><tr><td>' .
26 htmlspecialchars( $msg ) .
31 displayPageHeader($color, 'None');
33 $mailfetch_server_number = getPref($data_dir, $username, "mailfetch_server_number");
34 if (!isset($mailfetch_server_number)) $mailfetch_server_number=0;
35 $mailfetch_cypher = getPref($data_dir, $username, "mailfetch_cypher");
36 if ($mailfetch_server_number<1) $mailfetch_server_number=0;
37 for ($i=0;$i<$mailfetch_server_number;$i++
) {
38 $mailfetch_server_[$i] = getPref($data_dir, $username, "mailfetch_server_$i");
39 $mailfetch_alias_[$i] = getPref($data_dir, $username, "mailfetch_alias_$i");
40 $mailfetch_user_[$i] = getPref($data_dir, $username, "mailfetch_user_$i");
41 $mailfetch_pass_[$i] = getPref($data_dir, $username, "mailfetch_pass_$i");
42 $mailfetch_lmos_[$i] = getPref($data_dir, $username, "mailfetch_lmos_$i");
43 $mailfetch_login_[$i] = getPref($data_dir, $username, "mailfetch_login_$i");
44 $mailfetch_uidl_[$i] = getPref($data_dir, $username, "mailfetch_uidl_$i");
45 $mailfetch_subfolder_[$i] = getPref($data_dir, $username, "mailfetch_subfolder_$i");
46 if( $mailfetch_cypher == 'on' ) {
47 $mailfetch_pass_[$i] = decrypt( $mailfetch_pass_[$i] );
53 echo '<TABLE WIDTH=95% COLS=1 ALIGN=CENTER>' .
54 "<TR><TD BGCOLOR=\"$color[0]\" ALIGN=CENTER><b>" . _("Remote POP server Fetching Mail") . '</b></TD></TR>' .
57 if (!isset( $server_to_fetch ) ) {
59 echo '<font size=-5><BR></font>' .
60 "<form action=\"$PHP_SELF\" METHOD=POST TARGET=_self>" .
61 '<TABLE WIDTH=70% COLS=2 ALIGN=CENTER>' .
63 '<TD ALIGN=RIGHT>' . _("Select Server:") . ' </TD>' .
64 '<TD><SELECT NAME=server_to_fetch SIZE=1>' .
65 '<OPTION VALUE="all" SELECTED>..' . _("All") . "...\n";
66 for ($i=0;$i<$mailfetch_server_number;$i++
) {
67 echo "<OPTION VALUE=\"$i\">" .
68 (($mailfetch_alias_[$i]=='')?
$mailfetch_server_[$i]:$mailfetch_alias_[$i]);
74 //if password not set, ask for it
75 for ($i=0;$i<$mailfetch_server_number;$i++
) {
76 if ($mailfetch_pass_[$i]=='') {
78 '<TD ALIGN=RIGHT>' . _("Password for") . ' <B>' . (($mailfetch_alias_[$i]=='')?
$mailfetch_server_[$i]:$mailfetch_alias_[$i]) . '</B>: </TD>' .
79 "<TD><INPUT TYPE=PASSWORD NAME=pass_$i></TD>" .
85 '<TD><input type=submit name=submit_mailfetch value="' . _("Fetch Mail"). '"></TD>'.
91 if ( $server_to_fetch == 'all' ) {
93 $i_stop = $mailfetch_server_number;
95 $i_start = $server_to_fetch;
99 for ($i_loop=$i_start;$i_loop<$i_stop;$i_loop++
) {
100 $mailfetch_server=$mailfetch_server_[$i_loop];
101 $mailfetch_user=$mailfetch_user_[$i_loop];
102 if ($mailfetch_pass_[$i_loop]=="") {
104 $mailfetch_pass=$
$tmp;
106 $mailfetch_pass=$mailfetch_pass_[$i_loop];
108 $mailfetch_lmos=$mailfetch_lmos_[$i_loop];
109 $mailfetch_login=$mailfetch_login_[$i_loop];
110 $mailfetch_uidl=$mailfetch_uidl_[$i_loop];
111 $mailfetch_subfolder=$mailfetch_subfolder_[$i_loop];
114 $pop3 = new POP3($mailfetch_server, 60);
116 echo "<br><table width=\"90%\"><tr bgcolor=\"$color[9]\"><td><b>" .
117 _("Fetching from ") .
118 (($mailfetch_alias_[$i_loop] == '')?
$mailfetch_server:$mailfetch_alias_[$i_loop]) .
119 "</b></td></tr></table>";
123 if (!$pop3->connect($mailfetch_server)) {
124 Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR
);
128 Mail_Fetch_Status(_("Opening IMAP server"));
129 $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 10);
131 Mail_Fetch_Status(_("Opening POP server"));
132 $Count = $pop3->login($mailfetch_user, $mailfetch_pass);
133 if (($Count == false ||
$Count == -1) && $pop3->ERROR
!= '') {
134 Mail_Fetch_Status(_("Login Failed:") . ' ' . $pop3->ERROR
);
138 // register_shutdown_function($pop3->quit());
140 $msglist = $pop3->uidl();
143 for ($j = 1; $j < sizeof($msglist); $j++
) {
144 if ($msglist["$j"] == $mailfetch_uidl) {
151 Mail_Fetch_Status(_("Login OK: No new messages"));
156 Mail_Fetch_Status(_("Login OK: Inbox EMPTY"));
160 $newmsgcount = $Count - $i +
1;
161 Mail_Fetch_Status(_("Login OK: Inbox contains [") . $newmsgcount . _("] messages"));
164 Mail_Fetch_Status(_("Fetching UIDL..."));
165 // Faster to get them all at once
166 $mailfetch_uidl = $pop3->uidl();
168 if (! is_array($mailfetch_uidl) && $mailfetch_lmos == 'on')
169 Mail_Fetch_Status(_("Server does not support UIDL."));
171 if ($mailfetch_lmos == 'on') {
172 Mail_Fetch_Status(_("Leaving Mail on Server..."));
174 Mail_Fetch_Status(_("Deleting messages from server..."));
177 for (; $i <= $Count; $i++
) {
178 Mail_Fetch_Status(_("Fetching message ") . "$i" );
179 set_time_limit(20); // 20 seconds per message max
181 $MessArray = $pop3->get($i);
183 if ( (!$MessArray) or (gettype($MessArray) != "array")) {
184 Mail_Fetch_Status(_("Oops, ") . $pop3->ERROR
);
188 while (list($lineNum, $line) = each ($MessArray)) {
192 if ($mailfetch_subfolder=="") {
193 fputs($imap_stream, "A3$i APPEND INBOX {" . (strlen($Message) - 1) . "}\r\n");
195 fputs($imap_stream, "A3$i APPEND \"$mailfetch_subfolder\" {" . (strlen($Message) - 1) . "}\r\n");
197 $Line = fgets($imap_stream, 1024);
198 if (substr($Line, 0, 1) == '+') {
199 fputs($imap_stream, $Message);
200 sqimap_read_data($imap_stream, "A3$i", false, $response, $message);
201 Mail_Fetch_Status(_("Message appended to mailbox"));
203 if ($mailfetch_lmos != 'on') {
204 if( $pop3->delete($i) ) {
205 Mail_Fetch_Status(_("Message ") . $i . _(" deleted from Remote Server!"));
207 Mail_Fetch_Status(_("Delete failed:") . $pop3->ERROR
);
212 Mail_Fetch_Status(_("Error Appending Message!"));
216 Mail_Fetch_Status(_("Closing POP"));
218 Mail_Fetch_Status(_("Logging out from IMAP"));
219 sqimap_logout($imap_stream);
220 if (is_array($mailfetch_uidl)) {
221 Mail_Fetch_Status(_("Saving UIDL"));
222 setPref($data_dir,$username,"mailfetch_uidl_$i_loop", array_pop($mailfetch_uidl));
225 Mail_Fetch_Status(_("Done"));