ImapLibTest.php 4.2 KB

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