- if (preg_match("/(.*)(BAD|NO)(.*)$/", $tmp, $regs)) {
- set_up_language($squirrelmail_language);
- require_once(SM_PATH . 'functions/display_messages.php');
- $reason = $regs[3];
- if ($regs[2] == 'NO') {
- $string = "<b><font color=$color[2]>\n" .
- _("ERROR : Could not append message to") ." $folder." .
- "</b><br>\n" .
- _("Server responded: ") .
- $reason . "<br>\n";
- if (preg_match("/(.*)(quota)(.*)$/i", $reason, $regs)) {
- $string .= _("Solution: ") .
- _("Remove unneccessary messages from your folder and start with your Trash folder.")
- ."<br>\n";
- }
- $string .= "</font>\n";
- error_box($string,$color);
- } else {
- $string = "<b><font color=$color[2]>\n" .
- _("ERROR : Bad or malformed request.") .
- "</b><br>\n" .
- _("Server responded: ") .
- $tmp . "</font><br>\n";
- error_box($string,$color);
- exit;
+ while (!sqimap_append_checkresponse($tmp, $sMailbox)) {
+ $tmp = fgets ($imap_stream, 1024);
+ }
+}
+
+/**
+ * Displays error messages, if there are errors in responses to
+ * commands issues by sqimap_append() and sqimap_append_done() functions.
+ * @param string $response
+ * @param string $sMailbox
+ * @return bool $bDone
+ * @since 1.5.1 and 1.4.5
+ */
+function sqimap_append_checkresponse($response, $sMailbox, $sid='', $query='') {
+ // static vars to keep them available when sqimap_append_done calls this function.
+ static $imapquery, $imapsid;
+
+ $bDone = false;
+
+ if ($query) {
+ $imapquery = $query;
+ }
+ if ($sid) {
+ $imapsid = $sid;
+ }
+ if ($response{0} == '+') {
+ // continuation request triggerd by sqimap_append()
+ $bDone = true;
+ } else {
+ $i = strpos($response, ' ');
+ $sRsp = substr($response,0,$i);
+ $sMsg = substr($response,$i+1);
+ $aExtra = array('MAILBOX' => $sMailbox);
+ switch ($sRsp) {
+ case '*': //untagged response
+ $i = strpos($sMsg, ' ');
+ $sRsp = strtoupper(substr($sMsg,0,$i));
+ $sMsg = substr($sMsg,$i+1);
+ if ($sRsp == 'NO' || $sRsp == 'BAD') {
+ // for the moment disabled. Enable after 1.5.1 release.
+ // Notices could give valueable information about the mailbox
+ // Update: seems this was forgotten, but now it is finally enabled
+ sqm_trigger_imap_error('SQM_IMAP_APPEND_NOTICE',$imapquery,$sRsp,$sMsg);
+ }
+ $bDone = false;
+ case $imapsid:
+ // A001 OK message
+ // $imapsid<space>$sRsp<space>$sMsg
+ $bDone = true;
+ $i = strpos($sMsg, ' ');
+ $sRsp = strtoupper(substr($sMsg,0,$i));
+ $sMsg = substr($sMsg,$i+1);
+ switch ($sRsp) {
+ case 'NO':
+ if (preg_match("/(.*)(quota)(.*)$/i", $sMsg, $aMatch)) {
+ sqm_trigger_imap_error('SQM_IMAP_APPEND_QUOTA_ERROR',$imapquery,$sRsp,$sMsg,$aExtra);
+ } else {
+ sqm_trigger_imap_error('SQM_IMAP_APPEND_ERROR',$imapquery,$sRsp,$sMsg,$aExtra);
+ }
+ break;
+ case 'BAD':
+ sqm_trigger_imap_error('SQM_IMAP_ERROR',$imapquery,$sRsp,$sMsg,$aExtra);
+ break;
+ case 'BYE':
+ sqm_trigger_imap_error('SQM_IMAP_BYE',$imapquery,$sRsp,$sMsg,$aExtra);
+ break;
+ case 'OK':
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ // should be false because of the unexpected response but i'm not sure if
+ // that will cause an endless loop in sqimap_append_done
+ $bDone = true;