1: <?php
2:
3: App::uses('AdminNotify', 'Lib');
4: App::uses('ItauMailParser', 'Lib');
5: App::uses('ImapClient', 'Email.Lib');
6:
7: class ImapParserShell extends AppShell {
8:
9: public function main() {
10: $mailBox = ImapClient::createFromEmailConfig()->createMailBox('INBOX');
11: $ids = $mailBox->queryUnseenIds();
12: $this->out('<info>Mensagens encontradas:</info> ' . count($ids));
13: $this->hr();
14: foreach ($ids as $id) {
15: $this->_parseMail($mailBox, $id);
16: }
17: }
18:
19: private function _parseMail(ImapMailBox $mailBox, $messageId) {
20: $this->out('Fetching message with ID = ' . $messageId . ' ...');
21: try {
22: $mailData = $mailBox->fetchMessage($messageId);
23: $this->out('Subject: ' . $mailData['subject']);
24: $this->out('From: ' . $mailData['from'][0]);
25: $this->_parseMailData($mailBox, $messageId, $mailData);
26: } catch (Exception $ex) {
27: $this->out("<error>Error parsing mail: {$ex->getMessage()}</error>");
28: }
29: $this->hr();
30: }
31:
32: private function _parseMailData(ImapMailBox $mailBox, $messageId, $mailData) {
33: if (($parser = $this->_getParser($mailData))) {
34: $this->out('Parser found: ' . get_class($parser));
35: $parser->parse($mailData);
36: $mailBox->setAsSeen($messageId, true);
37: } else {
38: $this->out('<error>Parser not found</error>');
39: }
40: }
41:
42: private function _getParser($mailData) {
43: foreach (ClassSearcher::findInstances('Lib/EmailParser') as $parser) {
44: if ($parser->accept($mailData)) {
45: return $parser;
46: }
47: }
48: return false;
49: }
50:
51: }
52: