ImapLibTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. App::uses('ImapLib', 'Tools.Lib');
  3. App::uses('EmailLib', 'Tools.Lib');
  4. App::uses('MyCakeTestCase', 'Tools.TestSuite');
  5. /**
  6. * Testing IMAP send/receive
  7. *
  8. * The following config is needed:
  9. * Configure::write('Mailbox.DEVTEST.address', 'devtest@host');
  10. * Configure::write('Mailbox.DEVTEST.password', 'devtest');
  11. * Configure::write('Mailbox.DEVTEST.host', 'host');
  12. *
  13. * The following files are needed in /APP/Test/test_files/:
  14. * Sample_Email_PDF.pdf
  15. * Sample_Email_PDF_UTF8.pdf
  16. *
  17. * 2012-11-27 ms
  18. */
  19. class ImapLibTest extends MyCakeTestCase {
  20. public $Imap;
  21. public function setUp() {
  22. $this->skipIf(!function_exists('imap_open'), 'No Imap class installed');
  23. $this->skipIf(!Configure::read('Mailbox.DEVTEST'), 'No test account `DEVTEST` available');
  24. $this->Imap = new ImapLib();
  25. $this->testFilePath = APP . 'Test' . DS . 'test_files' . DS;
  26. }
  27. public function tearDown() {
  28. unset($this->Imap);
  29. }
  30. public function testObject() {
  31. $this->assertTrue(is_a($this->Imap, 'ImapLib'));
  32. }
  33. public function testCount() {
  34. $count = $this->_count();
  35. debug($count); ob_flush();
  36. $this->assertSame(0, $count);
  37. }
  38. public function testReceive() {
  39. $file = $this->testFilePath . 'Sample_Email_PDF.pdf';
  40. $this->_send($file);
  41. sleep(2);
  42. $messages = $this->_read();
  43. debug($messages); ob_flush();
  44. $this->assertTrue(!empty($messages));
  45. $message = array_shift($messages);
  46. $this->assertTrue(!empty($message['subject']));
  47. }
  48. public function testReceiveUtf8() {
  49. $file = $this->testFilePath . 'Sample_Email_PDF_UTF8.pdf';
  50. $this->_send($file);
  51. sleep(2);
  52. $messages = $this->_read();
  53. debug($messages); ob_flush();
  54. $this->assertTrue(!empty($messages));
  55. $message = array_shift($messages);
  56. $this->assertTrue(!empty($message['subject']));
  57. }
  58. protected function _send($file, $contentDisposition = false) {
  59. Configure::write('debug', 0);
  60. $this->Email = new EmailLib();
  61. $this->Email->to(Configure::read('Mailbox.DEVTEST.address'));
  62. $this->Email->subject('UTF8 ÄÖÜ Test Mail '.date(FORMAT_DB_DATETIME));
  63. $this->Email->layout('blank');
  64. $this->Email->template('simple_email');
  65. $this->Email->addAttachment($file, 'test.php', array('contentDisposition' => $contentDisposition));
  66. $text = '';
  67. $this->Email->viewVars(compact('text'));
  68. if ($this->Email->send()) {
  69. Configure::write('debug', 2);
  70. return true;
  71. }
  72. Configure::write('debug', 2);
  73. trigger_error($this->Email->getError());
  74. return false;
  75. }
  76. protected function _count($code = 'DEVTEST') {
  77. $account = Configure::read('Mailbox.'.$code);
  78. if (!isset($account['host'])) {
  79. $account['host'] = Configure::read('Mailbox.host');
  80. }
  81. $Imap = new ImapLib();
  82. $Imap->set(ImapLib::S_SERVICE, 'imap');
  83. $Imap->set(ImapLib::S_NORSH, true);
  84. $res = $Imap->connect($account['address'], $account['password'], $account['host']);
  85. if (!$res) {
  86. throw new InternalErrorException('Error connecting: '.$account['address'].' - '.$account['host'].' ('.$account['password'].')');
  87. }
  88. $count = $Imap->msgCount();
  89. $Imap->close();
  90. return $count;
  91. }
  92. protected function _read($code = 'DEVTEST', $delete = true) {
  93. $account = Configure::read('Mailbox.'.$code);
  94. if (!isset($account['host'])) {
  95. $account['host'] = Configure::read('Mailbox.host');
  96. }
  97. $Imap = new ImapLib();
  98. $Imap->set(ImapLib::S_SERVICE, 'imap');
  99. $Imap->set(ImapLib::S_NORSH, true);
  100. //$Imap->set(ImapLib::S_NOTLS, true);
  101. //$Imap->set(ImapLib::S_TLS, true);
  102. /*
  103. if (($pos = strpos($account['address'], '@')) !== false) {
  104. $account['address'] = substr($account['address'], 0, $pos);
  105. }
  106. */
  107. $res = $Imap->connect($account['address'], $account['password'], $account['host']);
  108. if (!$res) {
  109. //trigger_error($account['address'].' - '.Configure::read('Mailbox.host').' ('.$account['password'].')');
  110. throw new InternalErrorException('Error connecting: '.$account['address'].' - '.$account['host'].' ('.$account['password'].')');
  111. //return array();
  112. }
  113. //$count = $Imap->msgCount();
  114. $messages = $Imap->msgList();
  115. if ($delete) {
  116. $messageNumbers = Set::extract('/Msgno', $messages);
  117. //TODO: FIX Delete
  118. $res = $Imap->delete($messageNumbers, true);
  119. }
  120. $Imap->close();
  121. if (!is_array($messages)) {
  122. return array();
  123. }
  124. return $messages;
  125. }
  126. }