5 ** This implements all functions that do general imap functions.
8 /******************************************************************************
9 ** Reads the output from the IMAP stream. If handle_errors is set to true,
10 ** this will also handle all errors that are received. If it is not set,
11 ** the errors will be sent back through $response and $message
12 ******************************************************************************/
13 function sqimap_read_data ($imap_stream, $pre, $handle_errors, $response, $message) {
16 $read = fgets ($imap_stream, 1024);
17 // echo "<small><tt><font color=cc0000>$read</font></tt></small><br>";
19 while ((substr($read, 0, strlen("$pre OK")) != "$pre OK") &&
20 (substr($read, 0, strlen("$pre BAD")) != "$pre BAD") &&
21 (substr($read, 0, strlen("$pre NO")) != "$pre NO")) {
22 $data[$counter] = $read;
23 $read = fgets ($imap_stream, 1024);
24 // echo "<small><tt><font color=cc0000>$read</font></tt></small><br>";
28 if (substr($read, 0, strlen("$pre OK")) == "$pre OK") {
30 $message = trim(substr($read, strlen("$pre OK"), strlen($read)));
32 else if (substr($read, 0, strlen("$pre BAD")) == "$pre BAD") {
34 $message = trim(substr($read, strlen("$pre BAD"), strlen($read)));
38 $message = trim(substr($read, strlen("$pre NO"), strlen($read)));
41 if ($handle_errors == true) {
42 if ($response == "NO") {
43 echo "<br><b><font color=$color[2]>";
44 echo _("ERROR : Could not complete request.");
46 echo _("Reason Given: ");
47 echo "$message</font><br>";
49 } else if ($response == "BAD") {
50 echo "<br><b><font color=$color[2]>";
51 echo _("ERROR : Bad or malformed request.");
53 echo _("Server responded: ");
54 echo "$message</font><br>";
65 /******************************************************************************
66 ** Logs the user into the imap server. If $hide is set, no error messages
67 ** will be displayed. This function returns the imap connection handle.
68 ******************************************************************************/
69 function sqimap_login ($username, $password, $imap_server_address, $imap_port, $hide) {
70 global $color, $squirrelmail_language, $HTTP_ACCEPT_LANGUAGE;
72 $imap_stream = fsockopen ($imap_server_address, $imap_port, &$error_number, &$error_string);
73 $server_info = fgets ($imap_stream, 1024);
75 // This function can sometimes be called before the check for
77 if (!function_exists("_")) {
83 /** Do some error correction **/
86 printf (_("Error connecting to IMAP server: %s.")."<br>\r\n", $imap_server_address);
87 echo "$error_number : $error_string<br>\r\n";
92 fputs ($imap_stream, "a001 LOGIN \"$username\" \"$password\"\r\n");
93 $read = fgets ($imap_stream, 1024);
95 /** If the connection was not successful, lets see why **/
96 if (substr($read, 0, 7) != "a001 OK") {
98 if (substr($read, 0, 8) == "a001 BAD") {
99 printf (_("Bad request: %s")."<br>\r\n", $read);
101 } else if (substr($read, 0, 7) == "a001 NO") {
102 // If the user does not log in with the correct
103 // username and password it is not possible to get the
104 // correct locale from the user's preferences.
105 // Therefore, apply the same hack as on the login
108 // $squirrelmail_language is set by a cookie when
109 // the user selects language and logs out
111 // Use HTTP content language negotiation if cookie
113 if (!isset($squirrelmail_language) && isset($HTTP_ACCEPT_LANGUAGE)) {
114 $squirrelmail_language = substr($HTTP_ACCEPT_LANGUAGE, 0, 2);
117 if (isset($squirrelmail_language)) {
118 if ($squirrelmail_language != "en" && $squirrelmail_language != "") {
119 putenv("LC_ALL=".$squirrelmail_language);
120 bindtextdomain("squirrelmail", "../locale/");
121 textdomain("squirrelmail");
122 header ("Content-Type: text/html; charset=".$languages[$squirrelmail_language]["CHARSET"]);
128 <body bgcolor
=ffffff
>
131 <table width
=70% noborder bgcolor
=ffffff align
=center
>
136 <?php
echo _("ERROR") ?
>
144 <?php
echo _("Unknown user or password incorrect.") ?
><br
>
145 <a href
="login.php"><?php
echo _("Click here to try again") ?
></a
>
157 printf (_("Unknown error: %s")."<br>", $read);
171 /******************************************************************************
172 ** Simply logs out the imap session
173 ******************************************************************************/
174 function sqimap_logout ($imap_stream) {
175 fputs ($imap_stream, "a001 LOGOUT\r\n");
180 /******************************************************************************
181 ** Returns the delimeter between mailboxes: INBOX/Test, or INBOX.Test...
182 ******************************************************************************/
183 function sqimap_get_delimiter ($imap_stream) {
184 fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n");
185 $read = sqimap_read_data($imap_stream, ".", true, $a, $b);
186 $quote_position = strpos ($read[0], "\"");
187 $delim = substr ($read[0], $quote_position+
1, 1);
195 /******************************************************************************
196 ** Gets the number of messages in the current mailbox.
197 ******************************************************************************/
198 function sqimap_get_num_messages ($imap_stream, $mailbox) {
199 fputs ($imap_stream, "a001 EXAMINE \"$mailbox\"\r\n");
200 $read_ary = sqimap_read_data ($imap_stream, "a001", true, $result, $message);
201 for ($i = 0; $i < count($read_ary); $i++
) {
202 if (substr(trim($read_ary[$i]), -6) == EXISTS
) {
203 $array = explode (" ", $read_ary[$i]);
211 /******************************************************************************
212 ** Returns a displayable email address
213 ******************************************************************************/
214 function sqimap_find_email ($string) {
215 /** Luke Ehresman <lehresma@css.tayloru.edu>
216 ** <lehresma@css.tayloru.edu>
217 ** lehresma@css.tayloru.edu
220 if (strpos($string, "<") && strpos($string, ">")) {
221 $string = substr($string, strpos($string, "<")+
1);
222 $string = substr($string, 0, strpos($string, ">"));
224 return trim($string);
228 /******************************************************************************
229 ** Takes the From: field, and creates a displayable name.
230 ** Luke Ehresman <lkehresman@yahoo.com>
231 ** becomes: Luke Ehresman
232 ** <lkehresman@yahoo.com>
233 ** becomes: lkehresman@yahoo.com
234 ******************************************************************************/
235 function sqimap_find_displayable_name ($string) {
236 $string = " ".trim($string);
237 if (strpos($string, "<") && strpos($string, ">")) {
238 if (strpos($string, "<") == 1) {
239 $string = sqimap_find_email($string);
241 $string = trim($string);
242 $string = substr($string, 0, strpos($string, "<"));
243 $string = ereg_replace ("\"", "", $string);
251 /******************************************************************************
252 ** Returns the number of unseen messages in this folder
253 ******************************************************************************/
254 function sqimap_unseen_messages ($imap_stream, &$num_unseen, $mailbox) {
255 //fputs ($imap_stream, "a001 SEARCH UNSEEN NOT DELETED\r\n");
256 fputs ($imap_stream, "a001 STATUS \"$mailbox\" (UNSEEN)\r\n");
257 $read_ary = sqimap_read_data ($imap_stream, "a001", true, $result, $message);
260 $read_ary[0] = trim($read_ary[0]);
261 return substr($read_ary[0], strrpos($read_ary[0], " ")+
1, (strlen($read_ary[0]) - strrpos($read_ary[0], " ") - 2));
265 /******************************************************************************
266 ** Saves a message to a given folder -- used for saving sent messages
267 ******************************************************************************/
268 function sqimap_append ($imap_stream, $sent_folder, $length) {
269 fputs ($imap_stream, "a001 APPEND \"$sent_folder\" (\\Seen) \{$length}\r\n");
270 $tmp = fgets ($imap_stream, 1024);
273 function sqimap_append_done ($imap_stream) {
274 fputs ($imap_stream, "\r\n");
275 $tmp = fgets ($imap_stream, 1024);