ImapLibTest.php 4.2 KB

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