Overview

Packages

  • IMP

Classes

  • IMP
  • IMP_Ajax_Addresses
  • IMP_Ajax_Application
  • IMP_Ajax_Application_Compose
  • IMP_Ajax_Application_Handler_Common
  • IMP_Ajax_Application_Handler_ComposeAttach
  • IMP_Ajax_Application_Handler_Draft
  • IMP_Ajax_Application_Handler_Dynamic
  • IMP_Ajax_Application_Handler_ImageUnblock
  • IMP_Ajax_Application_Handler_Mboxtoggle
  • IMP_Ajax_Application_Handler_Passphrase
  • IMP_Ajax_Application_Handler_Remote
  • IMP_Ajax_Application_Handler_RemotePrefs
  • IMP_Ajax_Application_Handler_Search
  • IMP_Ajax_Application_Handler_Smartmobile
  • IMP_Ajax_Application_ListMessages
  • IMP_Ajax_Application_ShowMessage
  • IMP_Ajax_Application_Viewport
  • IMP_Ajax_Application_Viewport_Error
  • IMP_Ajax_Imple_ImportEncryptKey
  • IMP_Ajax_Imple_ItipRequest
  • IMP_Ajax_Imple_PassphraseDialog
  • IMP_Ajax_Imple_VcardImport
  • IMP_Ajax_Queue
  • IMP_Api
  • IMP_Application
  • IMP_Auth
  • IMP_Basic_Base
  • IMP_Basic_Compose
  • IMP_Basic_Contacts
  • IMP_Basic_Error
  • IMP_Basic_Folders
  • IMP_Basic_Listinfo
  • IMP_Basic_Mailbox
  • IMP_Basic_Message
  • IMP_Basic_Pgp
  • IMP_Basic_Saveimage
  • IMP_Basic_Search
  • IMP_Basic_Searchbasic
  • IMP_Basic_Smime
  • IMP_Basic_Thread
  • IMP_Block_Newmail
  • IMP_Block_Summary
  • IMP_Compose
  • IMP_Compose_Attachment
  • IMP_Compose_Attachment_Linked_Metadata
  • IMP_Compose_Attachment_Metadata
  • IMP_Compose_Attachment_Storage
  • IMP_Compose_Attachment_Storage_AutoDetermine
  • IMP_Compose_Attachment_Storage_Temp
  • IMP_Compose_Attachment_Storage_VfsLinked
  • IMP_Compose_Exception
  • IMP_Compose_Exception_Address
  • IMP_Compose_HtmlSignature
  • IMP_Compose_Link
  • IMP_Compose_LinkedAttachment
  • IMP_Compose_Ui
  • IMP_Compose_View
  • IMP_Contacts
  • IMP_Contacts_Avatar_Addressbook
  • IMP_Contacts_Avatar_Gravatar
  • IMP_Contacts_Avatar_Unknown
  • IMP_Contacts_Flag_Host
  • IMP_Contacts_Image
  • IMP_Contents
  • IMP_Contents_InlineOutput
  • IMP_Contents_View
  • IMP_Crypt_Pgp
  • IMP_Crypt_Smime
  • IMP_Dynamic_AddressList
  • IMP_Dynamic_Base
  • IMP_Dynamic_Compose
  • IMP_Dynamic_Compose_Common
  • IMP_Dynamic_Helper_Base
  • IMP_Dynamic_Mailbox
  • IMP_Dynamic_Message
  • IMP_Exception
  • IMP_Factory_AuthImap
  • IMP_Factory_Compose
  • IMP_Factory_ComposeAtc
  • IMP_Factory_Contacts
  • IMP_Factory_Contents
  • IMP_Factory_Flags
  • IMP_Factory_Ftree
  • IMP_Factory_Identity
  • IMP_Factory_Imap
  • IMP_Factory_Mail
  • IMP_Factory_MailAutoconfig
  • IMP_Factory_Mailbox
  • IMP_Factory_MailboxCache
  • IMP_Factory_MailboxList
  • IMP_Factory_Maillog
  • IMP_Factory_MimeViewer
  • IMP_Factory_Pgp
  • IMP_Factory_PrefsSort
  • IMP_Factory_Quota
  • IMP_Factory_Search
  • IMP_Factory_Sentmail
  • IMP_Factory_Smime
  • IMP_Factory_Spam
  • IMP_Filter
  • IMP_Flag_Base
  • IMP_Flag_Imap
  • IMP_Flag_Imap_Answered
  • IMP_Flag_Imap_Deleted
  • IMP_Flag_Imap_Draft
  • IMP_Flag_Imap_Flagged
  • IMP_Flag_Imap_Forwarded
  • IMP_Flag_Imap_Junk
  • IMP_Flag_Imap_NotJunk
  • IMP_Flag_Imap_Seen
  • IMP_Flag_System_Attachment
  • IMP_Flag_System_Encrypted
  • IMP_Flag_System_HighPriority
  • IMP_Flag_System_List
  • IMP_Flag_System_LowPriority
  • IMP_Flag_System_Match_Address
  • IMP_Flag_System_Match_Flag
  • IMP_Flag_System_Match_Header
  • IMP_Flag_System_Personal
  • IMP_Flag_System_Signed
  • IMP_Flag_System_Unseen
  • IMP_Flag_User
  • IMP_Flags
  • IMP_Ftree
  • IMP_Ftree_Account
  • IMP_Ftree_Account_Imap
  • IMP_Ftree_Account_Inboxonly
  • IMP_Ftree_Account_Remote
  • IMP_Ftree_Account_Vfolder
  • IMP_Ftree_Element
  • IMP_Ftree_Eltdiff
  • IMP_Ftree_Iterator
  • IMP_Ftree_Iterator_Ancestors
  • IMP_Ftree_IteratorFilter
  • IMP_Ftree_IteratorFilter_Children
  • IMP_Ftree_IteratorFilter_Containers
  • IMP_Ftree_IteratorFilter_Expanded
  • IMP_Ftree_IteratorFilter_Invisible
  • IMP_Ftree_IteratorFilter_Mailboxes
  • IMP_Ftree_IteratorFilter_Nonimap
  • IMP_Ftree_IteratorFilter_Polled
  • IMP_Ftree_IteratorFilter_Remote
  • IMP_Ftree_IteratorFilter_Special
  • IMP_Ftree_IteratorFilter_Subscribed
  • IMP_Ftree_IteratorFilter_Vfolder
  • IMP_Ftree_Prefs
  • IMP_Ftree_Prefs_Expanded
  • IMP_Ftree_Prefs_Poll
  • IMP_Ftree_Select
  • IMP_Images
  • IMP_Imap
  • IMP_Imap_Acl
  • IMP_Imap_Cache_Wrapper
  • IMP_Imap_Config
  • IMP_Imap_Exception
  • IMP_Imap_Password
  • IMP_Imap_PermanentFlags
  • IMP_Imap_Remote
  • IMP_Indices
  • IMP_Indices_Mailbox
  • IMP_LoginTasks_SystemTask_GarbageCollection
  • IMP_LoginTasks_SystemTask_Upgrade
  • IMP_LoginTasks_SystemTask_UpgradeAuth
  • IMP_LoginTasks_Task_Autocreate
  • IMP_LoginTasks_Task_DeleteAttachmentsMonthly
  • IMP_LoginTasks_Task_DeleteSentmailMonthly
  • IMP_LoginTasks_Task_FilterOnLogin
  • IMP_LoginTasks_Task_PurgeSentmail
  • IMP_LoginTasks_Task_PurgeSpam
  • IMP_LoginTasks_Task_PurgeTrash
  • IMP_LoginTasks_Task_RecoverDraft
  • IMP_LoginTasks_Task_RenameSentmailMonthly
  • IMP_Mailbox
  • IMP_Mailbox_List
  • IMP_Mailbox_List_Pop3
  • IMP_Mailbox_List_Thread
  • IMP_Mailbox_List_Virtual
  • IMP_Mailbox_SessionCache
  • IMP_Mailbox_Ui
  • IMP_Maillog
  • IMP_Maillog_Log_Base
  • IMP_Maillog_Log_Forward
  • IMP_Maillog_Log_Mdn
  • IMP_Maillog_Log_Redirect
  • IMP_Maillog_Log_Reply
  • IMP_Maillog_Log_Replyall
  • IMP_Maillog_Log_Replylist
  • IMP_Maillog_Message
  • IMP_Maillog_Storage_Base
  • IMP_Maillog_Storage_Composite
  • IMP_Maillog_Storage_History
  • IMP_Maillog_Storage_Mdnsent
  • IMP_Maillog_Storage_Null
  • IMP_Mbox_Generate
  • IMP_Mbox_Import
  • IMP_Mbox_Size
  • IMP_Message
  • IMP_Message_Date
  • IMP_Message_Ui
  • IMP_Mime_Headers
  • IMP_Mime_Status
  • IMP_Mime_Status_RenderIssue
  • IMP_Mime_Status_RenderIssue_Display
  • IMP_Mime_Viewer_Alternative
  • IMP_Mime_Viewer_Appledouble
  • IMP_Mime_Viewer_Audio
  • IMP_Mime_Viewer_Enriched
  • IMP_Mime_Viewer_Externalbody
  • IMP_Mime_Viewer_Html
  • IMP_Mime_Viewer_Images
  • IMP_Mime_Viewer_Itip
  • IMP_Mime_Viewer_Mdn
  • IMP_Mime_Viewer_Partial
  • IMP_Mime_Viewer_Pdf
  • IMP_Mime_Viewer_Pgp
  • IMP_Mime_Viewer_Plain
  • IMP_Mime_Viewer_Related
  • IMP_Mime_Viewer_Rfc822
  • IMP_Mime_Viewer_Smil
  • IMP_Mime_Viewer_Smime
  • IMP_Mime_Viewer_Status
  • IMP_Mime_Viewer_Vcard
  • IMP_Mime_Viewer_Video
  • IMP_Mime_Viewer_Zip
  • IMP_Minimal_Base
  • IMP_Minimal_Compose
  • IMP_Minimal_Error
  • IMP_Minimal_Folders
  • IMP_Minimal_Mailbox
  • IMP_Minimal_Message
  • IMP_Minimal_Messagepart
  • IMP_Minimal_Search
  • IMP_Notification_Event_Status
  • IMP_Notification_Handler_Decorator_ImapAlerts
  • IMP_Notification_Handler_Decorator_NewmailNotify
  • IMP_Perms
  • IMP_Prefs_AttribText
  • IMP_Prefs_Identity
  • IMP_Prefs_Sort
  • IMP_Prefs_Sort_FixedDate
  • IMP_Prefs_Sort_None
  • IMP_Prefs_Sort_Sortpref
  • IMP_Prefs_Sort_Sortpref_Locked
  • IMP_Prefs_Special_Acl
  • IMP_Prefs_Special_ComposeTemplates
  • IMP_Prefs_Special_Drafts
  • IMP_Prefs_Special_Encrypt
  • IMP_Prefs_Special_Flag
  • IMP_Prefs_Special_HtmlSignature
  • IMP_Prefs_Special_ImageReplacement
  • IMP_Prefs_Special_InitialPage
  • IMP_Prefs_Special_Mailto
  • IMP_Prefs_Special_NewmailSound
  • IMP_Prefs_Special_PgpPrivateKey
  • IMP_Prefs_Special_PgpPublicKey
  • IMP_Prefs_Special_Remote
  • IMP_Prefs_Special_Searches
  • IMP_Prefs_Special_Sentmail
  • IMP_Prefs_Special_SmimePrivateKey
  • IMP_Prefs_Special_SmimePublicKey
  • IMP_Prefs_Special_Sourceselect
  • IMP_Prefs_Special_Spam
  • IMP_Prefs_Special_SpecialMboxes
  • IMP_Prefs_Special_Trash
  • IMP_Quota
  • IMP_Quota_Hook
  • IMP_Quota_Imap
  • IMP_Quota_Null
  • IMP_Quota_Ui
  • IMP_Remote
  • IMP_Remote_Account
  • IMP_Script_Package_Autocomplete
  • IMP_Script_Package_ComposeBase
  • IMP_Script_Package_DynamicBase
  • IMP_Script_Package_Editor
  • IMP_Script_Package_Imp
  • IMP_Search
  • IMP_Search_Element
  • IMP_Search_Element_Attachment
  • IMP_Search_Element_Autogenerated
  • IMP_Search_Element_Bulk
  • IMP_Search_Element_Contacts
  • IMP_Search_Element_Daterange
  • IMP_Search_Element_Flag
  • IMP_Search_Element_Header
  • IMP_Search_Element_Mailinglist
  • IMP_Search_Element_Or
  • IMP_Search_Element_Personal
  • IMP_Search_Element_Recipient
  • IMP_Search_Element_Size
  • IMP_Search_Element_Text
  • IMP_Search_Element_Within
  • IMP_Search_Filter
  • IMP_Search_Filter_Attachment
  • IMP_Search_Filter_Autogenerated
  • IMP_Search_Filter_Builtin
  • IMP_Search_Filter_Bulk
  • IMP_Search_Filter_Contacts
  • IMP_Search_Filter_Mailinglist
  • IMP_Search_Filter_Personal
  • IMP_Search_IteratorFilter
  • IMP_Search_Query
  • IMP_Search_Ui
  • IMP_Search_Vfolder
  • IMP_Search_Vfolder_Builtin
  • IMP_Search_Vfolder_Vinbox
  • IMP_Search_Vfolder_Vtrash
  • IMP_Sentmail
  • IMP_Sentmail_Mongo
  • IMP_Sentmail_Null
  • IMP_Sentmail_Sql
  • IMP_Smartmobile
  • IMP_Spam
  • IMP_Spam_Email
  • IMP_Spam_Null
  • IMP_Spam_Program
  • IMP_Test
  • IMP_Tree_Flist
  • IMP_Tree_Jquerymobile
  • IMP_Tree_Simplehtml
  • IMP_View_Subinfo

Interfaces

  • IMP_Compose_Attachment_Linked
  • IMP_Contacts_Avatar_Backend
  • IMP_Contacts_Flag_Backend
  • IMP_Spam_Base
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Copyright 2004-2014 Horde LLC (http://www.horde.org/)
  4:  *
  5:  * See the enclosed file COPYING for license information (GPL). If you
  6:  * did not receive this file, see http://www.horde.org/licenses/gpl.
  7:  *
  8:  * @category  Horde
  9:  * @copyright 2004-2014 Horde LLC
 10:  * @license   http://www.horde.org/licenses/gpl GPL
 11:  * @package   IMP
 12:  */
 13: 
 14: /**
 15:  * Handles spam/innocent reporting within IMP.
 16:  *
 17:  * Copyright 2004-2014 Horde LLC (http://www.horde.org/)
 18:  *
 19:  * See the enclosed file COPYING for license information (GPL). If you
 20:  * did not receive this file, see http://www.horde.org/licenses/gpl.
 21:  *
 22:  * @author    Michael Slusarz <slusarz@horde.org>
 23:  * @category  Horde
 24:  * @copyright 2004-2014 Horde LLC
 25:  * @license   http://www.horde.org/licenses/gpl GPL
 26:  * @package   IMP
 27:  */
 28: class IMP_Spam
 29: {
 30:     /* Action constants. */
 31:     const INNOCENT = 1;
 32:     const SPAM = 2;
 33: 
 34:     /**
 35:      * Action.
 36:      *
 37:      * @var integer
 38:      */
 39:     protected $_action;
 40: 
 41:     /**
 42:      * Driver list.
 43:      *
 44:      * @var array
 45:      */
 46:     protected $_drivers;
 47: 
 48:     /**
 49:      * Constructor.
 50:      *
 51:      * @param integer $action  Either IMP_Spam::SPAM or IMP_Spam::INNOCENT.
 52:      * @param array $drivers   List of reporting drivers.
 53:      */
 54:     public function __construct($action, array $drivers = array())
 55:     {
 56:         $this->_action = $action;
 57:         $this->_drivers = $drivers;
 58:     }
 59: 
 60:     /**
 61:      * Reports a list of messages as innocent/spam.
 62:      *
 63:      * @param IMP_Indices $indices  An indices object.
 64:      * @param array $opts           Additional options:
 65:      *   - mailboxob: (IMP_Mailbox_List) Update this mailbox list object.
 66:      *                DEFAULT: No update.
 67:      *
 68:      * @return integer  1 if messages have been deleted, 2 if messages have
 69:      *                  been moved.
 70:      */
 71:     public function report(IMP_Indices $indices, array $opts = array())
 72:     {
 73:         global $injector, $notification, $prefs;
 74: 
 75:         /* Abort immediately if spam reporting has not been enabled, or if
 76:          * there are no messages. */
 77:         if (empty($this->_drivers) || !count($indices)) {
 78:             return 0;
 79:         }
 80: 
 81:         $imp_contents = $injector->getInstance('IMP_Factory_Contents');
 82:         $report_count = 0;
 83: 
 84:         foreach ($indices as $ob) {
 85:             try {
 86:                 $ob->mbox->uidvalid;
 87:             } catch (IMP_Exception $e) {
 88:                 continue;
 89:             }
 90: 
 91:             foreach ($ob->uids as $idx) {
 92:                 try {
 93:                     $contents = $imp_contents->create($ob->mbox->getIndicesOb($idx));
 94:                 } catch (IMP_Exception $e) {
 95:                     continue;
 96:                 }
 97: 
 98:                 $report_flag = false;
 99: 
100:                 foreach ($this->_drivers as $val) {
101:                     if ($val->report($contents, $this->_action)) {
102:                         $report_flag = true;
103:                     }
104:                 }
105: 
106:                 if ($report_flag) {
107:                     ++$report_count;
108:                 }
109:             }
110:         }
111: 
112:         if (!$report_count) {
113:             return 0;
114:         }
115: 
116:         /* Report what we've done. */
117:         if ($report_count == 1) {
118:             $hdrs = $contents->getHeader();
119:             if ($subject = $hdrs->getValue('subject')) {
120:                 $subject = Horde_String::truncate($subject, 30);
121:             } elseif ($from = $hdrs->getValue('from')) {
122:                 $from = Horde_String::truncate($from, 30);
123:             } else {
124:                 $subject = '[' . _("No Subject") . ']';
125:             }
126: 
127:             switch ($this->_action) {
128:             case self::INNOCENT:
129:                 $msg = $subject
130:                     ? sprintf(_("The message \"%s\" has been reported as innocent."), $subject)
131:                     : sprintf(_("The message from \"%s\" has been reported as innocent."), $from);
132:                 break;
133: 
134:             case self::SPAM:
135:                 $msg = $subject
136:                     ? sprintf(_("The message \"%s\" has been reported as spam."), $subject)
137:                     : sprintf(_("The message from \"%s\" has been reported as spam."), $from);
138:                 break;
139:             }
140:         } else {
141:             switch ($this->_action) {
142:             case self::INNOCENT:
143:                 $msg = sprintf(_("%d messages have been reported as innocent."), $report_count);
144:                 break;
145: 
146:             case self::SPAM:
147:                 $msg = sprintf(_("%d messages have been reported as spam."), $report_count);
148:                 break;
149:             }
150:         }
151:         $notification->push($msg, 'horde.message');
152: 
153:         $mbox_args = array();
154:         if (isset($opts['mailboxob'])) {
155:             $mbox_args['mailboxob'] = $opts['mailboxob'];
156:         }
157: 
158:         /* Run post-reporting hook. */
159:         try {
160:             $injector->getInstance('Horde_Core_Hooks')->callHook(
161:                 'post_spam',
162:                 'imp',
163:                 array(
164:                     ($this->_action == self::SPAM) ? 'spam' : 'innocent',
165:                     $indices
166:                 )
167:             );
168:         } catch (Horde_Exception_HookNotSet $e) {}
169: 
170:         /* Delete/move message after report. */
171:         switch ($this->_action) {
172:         case self::INNOCENT:
173:             /* Always flag messages as NotJunk. */
174:             $imp_message = $injector->getInstance('IMP_Message');
175:             $imp_message->flag(array(
176:                 'add' => array(Horde_Imap_Client::FLAG_NOTJUNK),
177:                 'remove' => array(Horde_Imap_Client::FLAG_JUNK)
178:             ), $indices);
179: 
180:             if (($result = $prefs->getValue('move_innocent_after_report')) &&
181:                 !$imp_message->copy('INBOX', 'move', $indices, $mbox_args)) {
182:                 $result = 0;
183:             }
184:             break;
185: 
186:         case self::SPAM:
187:             /* Always flag messages as Junk. */
188:             $imp_message = $injector->getInstance('IMP_Message');
189:             $imp_message->flag(array(
190:                 'add' => array(Horde_Imap_Client::FLAG_JUNK),
191:                 'remove' => array(Horde_Imap_Client::FLAG_NOTJUNK)
192:             ), $indices);
193: 
194:             switch ($result = $prefs->getValue('delete_spam_after_report')) {
195:             case 1:
196:                 $msg_count = $imp_message->delete($indices, $mbox_args);
197:                 if ($msg_count === false) {
198:                     $result = 0;
199:                 } else {
200:                     if ($msg_count == 1) {
201:                         $notification->push(_("The message has been deleted."), 'horde.message');
202:                     } else {
203:                         $notification->push(sprintf(_("%d messages have been deleted."), $msg_count), 'horde.message');
204:                     }
205:                 }
206:                 break;
207: 
208:             case 2:
209:                 if ($targetMbox = IMP_Mailbox::getPref(IMP_Mailbox::MBOX_SPAM)) {
210:                     if (!$imp_message->copy($targetMbox, 'move', $indices, array_merge($mbox_args, array('create' => true)))) {
211:                         $result = 0;
212:                     }
213:                 } else {
214:                     $notification->push(_("Could not move message to spam mailbox - no spam mailbox defined in preferences."), 'horde.error');
215:                     $result = 0;
216:                 }
217:                 break;
218:             }
219:             break;
220:         }
221: 
222:         return $result;
223:     }
224: 
225: }
226: 
API documentation generated by ApiGen