From 429796aee86096038a1b67857814499a660fba3c Mon Sep 17 00:00:00 2001 From: Ivan Diaz Date: Sun, 23 Dec 2018 21:44:59 -0300 Subject: [PATCH] Email feature - wip --- .../admin-panel-system-preferences.js | 6 +- .../app/install/install-step-5-settings.js | 4 +- client/src/data/fixtures/system-fixtures.js | 2 +- server/composer.json | 3 +- server/config.php | 0 server/controllers/system/edit-settings.php | 7 +- server/controllers/system/email-polling.php | 116 ++++++++++++++++++ .../system/get-mail-template-list.php | 0 server/controllers/system/init-settings.php | 9 +- server/controllers/system/test-imap.php | 44 +++++++ server/controllers/system/test-smtp.php | 4 +- server/data/ERRORS.php | 11 ++ server/libs/DataStoreList.php | 5 + server/libs/Email.php | 71 +++++++++++ server/libs/MailSender.php | 4 +- server/models/Response.php | 4 +- server/models/Session.php | 24 +++- tests/Gemfile | 1 + tests/init.rb | 103 ++++++++-------- tests/libs.rb | 55 +++++++++ tests/system/edit-settings.rb | 6 +- tests/system/init-settings.rb | 9 +- 22 files changed, 408 insertions(+), 80 deletions(-) mode change 100644 => 100755 client/src/app/admin/panel/settings/admin-panel-system-preferences.js mode change 100644 => 100755 client/src/app/install/install-step-5-settings.js mode change 100644 => 100755 client/src/data/fixtures/system-fixtures.js mode change 100644 => 100755 server/config.php create mode 100755 server/controllers/system/email-polling.php mode change 100644 => 100755 server/controllers/system/get-mail-template-list.php create mode 100755 server/controllers/system/test-imap.php mode change 100644 => 100755 server/controllers/system/test-smtp.php create mode 100755 server/libs/Email.php mode change 100644 => 100755 tests/system/edit-settings.rb mode change 100644 => 100755 tests/system/init-settings.rb diff --git a/client/src/app/admin/panel/settings/admin-panel-system-preferences.js b/client/src/app/admin/panel/settings/admin-panel-system-preferences.js old mode 100644 new mode 100755 index 14d4ad84..0476b189 --- a/client/src/app/admin/panel/settings/admin-panel-system-preferences.js +++ b/client/src/app/admin/panel/settings/admin-panel-system-preferences.js @@ -67,7 +67,7 @@ class AdminPanelSystemPreferences extends React.Component {
- +
@@ -173,7 +173,7 @@ class AdminPanelSystemPreferences extends React.Component { 'title': form['title'], 'layout': form['layout'] ? 'full-width' : 'boxed', 'time-zone': form['time-zone'], - 'no-reply-email': form['no-reply-email'], + 'server-email': form['server-email'], 'smtp-host': form['smtp-host'], 'smtp-port': form['smtp-port'], 'smtp-user': form['smtp-user'], @@ -219,7 +219,7 @@ class AdminPanelSystemPreferences extends React.Component { 'title': result.data['title'], 'layout': (result.data['layout'] == 'full-width') ? 1 : 0, 'time-zone': result.data['time-zone'], - 'no-reply-email': result.data['no-reply-email'], + 'server-email': result.data['server-email'], 'smtp-host': result.data['smtp-host'], 'smtp-port': result.data['smtp-port'], 'smtp-user': result.data['smtp-user'], diff --git a/client/src/app/install/install-step-5-settings.js b/client/src/app/install/install-step-5-settings.js old mode 100644 new mode 100755 index 3b614946..24b6d73a --- a/client/src/app/install/install-step-5-settings.js +++ b/client/src/app/install/install-step-5-settings.js @@ -31,7 +31,7 @@ class InstallStep5Settings extends React.Component {
this.setState({form})}> - +
@@ -132,4 +132,4 @@ export default connect((store) => { 'registration': store.config['registration'], language: store.config.language }; -})(InstallStep5Settings); \ No newline at end of file +})(InstallStep5Settings); diff --git a/client/src/data/fixtures/system-fixtures.js b/client/src/data/fixtures/system-fixtures.js old mode 100644 new mode 100755 index a60dfba5..d12d98b3 --- a/client/src/data/fixtures/system-fixtures.js +++ b/client/src/data/fixtures/system-fixtures.js @@ -14,7 +14,7 @@ module.exports = [ 'title': 'Support Center', 'layout': 'boxed', 'time-zone': 3, - 'no-reply-email': 'shitr@post.com', + 'server-email': 'shitr@post.com', 'smtp-host': 'localhost', 'smtp-port': '7070', 'smtp-user': 'Wesa', diff --git a/server/composer.json b/server/composer.json index 48bc8e7b..06136ce2 100755 --- a/server/composer.json +++ b/server/composer.json @@ -7,7 +7,8 @@ "gabordemooij/redbean": "^4.3", "ifsnop/mysqldump-php": "2.*", "ezyang/htmlpurifier": "^4.8", - "codeguy/upload": "^1.3" + "codeguy/upload": "^1.3", + "php-imap/php-imap": "^3.0" }, "require-dev": { "phpunit/phpunit": "^5.7" diff --git a/server/config.php b/server/config.php old mode 100644 new mode 100755 diff --git a/server/controllers/system/edit-settings.php b/server/controllers/system/edit-settings.php index c1bd9e1f..958e4082 100755 --- a/server/controllers/system/edit-settings.php +++ b/server/controllers/system/edit-settings.php @@ -14,7 +14,7 @@ * * @apiParam {String} allowedLanguages The list of languages allowed. * @apiParam {String} supportedLanguages The list of languages supported. - * @apiParam {Setting} setting A setting can be any of the following: language, recaptcha-public, recaptcha-private, no-reply-email, smtp-host, smtp-port, smtp-user, smtp-pass, time-zone, maintenance-mode, layout, allow-attachments, max-size, title, url. + * @apiParam {Setting} setting A setting can be any of the following: language, recaptcha-public, recaptcha-private, server-email, smtp-host, smtp-port, smtp-user, smtp-pass, time-zone, maintenance-mode, layout, allow-attachments, max-size, title, url. * * @apiUse NO_PERMISSION * @@ -38,7 +38,10 @@ class EditSettingsController extends Controller { 'language', 'recaptcha-public', 'recaptcha-private', - 'no-reply-email', + 'server-email', + 'imap-host', + 'imap-user', + 'imap-pass', 'smtp-host', 'smtp-port', 'smtp-user', diff --git a/server/controllers/system/email-polling.php b/server/controllers/system/email-polling.php new file mode 100755 index 00000000..d5da6d66 --- /dev/null +++ b/server/controllers/system/email-polling.php @@ -0,0 +1,116 @@ + 'any', + 'requestData' => [] + ]; + } + + public function handler() { + $commentController = new CommentController(); + $createController = new CreateController(); + $defaultLanguage = Setting::getSetting('language')->getValue(); + $defaultDepartmentId = Department::getAll()->first()->id; + + if(Controller::isUserSystemEnabled()) + throw new RequestException(ERRORS::USER_SYSTEM); + + $errors = []; + $emails = $this->getLastEmails(); + + $session = Session::getInstance(); + $oldSession = [ + 'userId' => $session->getUserId(), + 'staff' => $session->getToken(), + 'token' => $session->isStaffLogged(), + ]; + + foreach($emails as $email) { + Controller::setDataRequester(function ($key) use ($email, $defaultDepartmentId, $defaultLanguage) { + switch ($key) { + case 'ticketNumber': + return $email->getTicketNumber(); + case 'title': + return $email->getSubject(); + case 'content': + return $email->getContent(); + case 'departmentId': + return $defaultDepartmentId; + case 'language': + return $defaultLanguage; + case 'email': + return $email->getSender(); + case 'name': + return $email->getSenderName(); + } + + return null; + }); + + try { + if($email->isReply()) { + if($email->getTicket()->authorToArray()['email'] === $email->getSender()) { + $session->clearSessionData(); + $session->createTicketSession($email->getTicket()->ticketNumber); + + $commentController->handler(); + } + } else { + $createController->handler(); + } + } catch(\Exception $e) { + $errors[] = [ + 'author' => $email->getSender(), + 'ticketNumber' => $email->getTicketNumber(), + 'error' => $e->__toString(), + ]; + } + } + + $session->clearSessionData(); + $session->setSessionData($oldSession); + + $this->eraseAllEmails(); + + if(count($errors)) { + Response::respondError(ERRORS::EMAIL_POLLING, null, $errors); + } else { + Response::respondSuccess(); + } + } + + public function getLastEmails() { + $mailbox = new \PhpImap\Mailbox( + Setting::getSetting('imap-host')->getValue(), + Setting::getSetting('imap-user')->getValue(), + Setting::getSetting('imap-pass')->getValue(), + __DIR__ + ); + + $mailsIds = $mailbox->searchMailbox('ALL'); + $emails = []; + sort($mailsIds); + foreach($mailsIds as $mailId) { + $mail = $mailbox->getMail($mailId); + $mailHeader = $mailbox->getMailHeader($mailId); + $emails[] = new Email([ + 'fromAddress' => $mailHeader->fromAddress, + 'fromName' => $mailHeader->fromName, + 'subject' => $mailHeader->subject, + 'content' => $mail->textPlain, + 'file' => null, + ]); + } + + return $emails; + } + + public function eraseAllEmails() { + + } +} diff --git a/server/controllers/system/get-mail-template-list.php b/server/controllers/system/get-mail-template-list.php old mode 100644 new mode 100755 diff --git a/server/controllers/system/init-settings.php b/server/controllers/system/init-settings.php index 2f65fa91..404ee1e1 100755 --- a/server/controllers/system/init-settings.php +++ b/server/controllers/system/init-settings.php @@ -17,7 +17,7 @@ DataValidator::with('CustomValidations', true); * @apiParam {String} language Indicates the default language of the system. * @apiParam {String} user-system-enabled Indicates if the user system should be enabled. * @apiParam {String} registration Indicates if the registration should be enabled. - * @apiParam {String} no-reply-email Email from where automated emails will be sent. + * @apiParam {String} server-email Email from where automated emails will be sent. * @apiParam {String} smtp-host SMTP Server address. * @apiParam {String} smtp-port SMTP Server port. * @apiParam {String} smtp-user SMTP Authentication User. @@ -68,11 +68,14 @@ class InitSettingsController extends Controller { 'language' => Controller::request('language'), 'recaptcha-public' => '', 'recaptcha-private' => '', - 'no-reply-email' => Controller::request('no-reply-email'), + 'server-email' => Controller::request('email'), + 'imap-host' => Controller::request('imap-host'), + 'imap-user' => Controller::request('imap-user'), + 'imap-pass' => Controller::request('imap-pass'), 'smtp-host' => Controller::request('smtp-host'), 'smtp-port' => Controller::request('smtp-port'), 'smtp-user' => Controller::request('smtp-user'), - 'smtp-pass' => Controller::request('smtp-password'), + 'smtp-pass' => Controller::request('smtp-pass'), 'time-zone' => 0, 'maintenance-mode' => 0, 'layout' => 'boxed', diff --git a/server/controllers/system/test-imap.php b/server/controllers/system/test-imap.php new file mode 100755 index 00000000..0e949c67 --- /dev/null +++ b/server/controllers/system/test-imap.php @@ -0,0 +1,44 @@ + 'any', + 'requestData' => [] + ]; + } + + public function handler() { + if(imap_open(Controller::request('imap-host'), Controller::request('imap-user'), Controller::request('imap-pass'), OP_SECURE)) { + Response::respondSuccess(); + } else { + throw new RequestException(ERRORS::IMAP_CONNECTION); + } + } +} diff --git a/server/controllers/system/test-smtp.php b/server/controllers/system/test-smtp.php old mode 100644 new mode 100755 index a870db03..18abaf91 --- a/server/controllers/system/test-smtp.php +++ b/server/controllers/system/test-smtp.php @@ -41,8 +41,8 @@ class TestSMTPController extends Controller { Controller::request('smtp-host'), Controller::request('smtp-port'), Controller::request('smtp-user'), - Controller::request('smtp-password'), - Controller::request('no-reply-email') + Controller::request('smtp-pass'), + '' ); if($mailSender->isConnected()) { diff --git a/server/data/ERRORS.php b/server/data/ERRORS.php index 6d4343e0..241cd148 100755 --- a/server/data/ERRORS.php +++ b/server/data/ERRORS.php @@ -139,6 +139,10 @@ * @apiDefine INVALID_BODY * @apiError {String} INVALID_BODY The body is invalid. */ +/** + * @apiDefine USER_SYSTEM_ENABLED + * @apiError {String} USER_SYSTEM_ENABLED The user system is enabled. + */ /** * @apiDefine USER_SYSTEM_DISABLED * @apiError {String} USER_SYSTEM_DISABLED The user system is disabled. @@ -203,6 +207,10 @@ * @apiDefine DEPARTMENT_PRIVATE_TICKETS * @apiError {String} DEPARTMENT_PRIVATE_TICKETS There are tickets for in department created by non-staff and it can't be private */ +/** + * @apiDefine EMAIL_POLLING + * @apiError {String} EMAIL_POLLING Email polling + */ class ERRORS { const INVALID_CREDENTIALS = 'INVALID_CREDENTIALS'; @@ -241,6 +249,7 @@ class ERRORS { const INVALID_TEMPLATE = 'INVALID_TEMPLATE'; const INVALID_SUBJECT = 'INVALID_SUBJECT'; const INVALID_BODY = 'INVALID_BODY'; + const USER_SYSTEM_ENABLED = 'USER_SYSTEM_ENABLED'; const USER_SYSTEM_DISABLED = 'USER_SYSTEM_DISABLED'; const SYSTEM_USER_IS_ALREADY_DISABLED = 'SYSTEM_USER_IS_ALREADY_DISABLED'; const SYSTEM_USER_IS_ALREADY_ENABLED = 'SYSTEM_USER_IS_ALREADY_ENABLED'; @@ -250,6 +259,7 @@ class ERRORS { const DATABASE_CONNECTION = 'DATABASE_CONNECTION'; const DATABASE_CREATION = 'DATABASE_CREATION'; const SMTP_CONNECTION = 'SMTP_CONNECTION'; + const IMAP_CONNECTION = 'IMAP_CONNECTION'; const ALREADY_DISABLED = 'ALREADY_DISABLED'; const ALREADY_ENABLED = 'ALREADY_ENABLED'; const USER_DISABLED = 'USER_DISABLED'; @@ -257,4 +267,5 @@ class ERRORS { const INVALID_TEXT_2 = 'INVALID_TEXT_2'; const INVALID_TEXT_3 = 'INVALID_TEXT_3'; const DEPARTMENT_PRIVATE_TICKETS = 'DEPARTMENT_PRIVATE_TICKETS'; + const EMAIL_POLLING = 'EMAIL_POLLING'; } diff --git a/server/libs/DataStoreList.php b/server/libs/DataStoreList.php index 37e93687..38d429fc 100755 --- a/server/libs/DataStoreList.php +++ b/server/libs/DataStoreList.php @@ -16,6 +16,11 @@ class DataStoreList implements IteratorAggregate { return new ArrayIterator($this->list); } + public function first() { + if(count($this->list)) return $this->list[0]; + else return new NullDataStore(); + } + public function add(DataStore $dataStore) { $this->list[] = $dataStore; } diff --git a/server/libs/Email.php b/server/libs/Email.php new file mode 100755 index 00000000..028e4d29 --- /dev/null +++ b/server/libs/Email.php @@ -0,0 +1,71 @@ +sender = $this->parseSender($data); + $this->senderName = $this->parseSenderName($data); + $this->ticketNumber = $this->parseTicketNumber($data); + $this->ticket = $this->parseTicket($data); + $this->content = $this->parseContent($data); + $this->attachment = $this->parseAttachment($data); + $this->subject = $this->parseSubject($data); + } + + public function isReply() { return !$this->ticket->isNull(); } + + public function getSender() { return $this->sender; } + public function getTicket() { return $this->ticket; } + public function getSenderName() { return $this->senderName; } + public function getTicketNumber() { return $this->ticketNumber; } + public function getSubject() { return $this->subject; } + public function getContent() { return $this->content; } + public function getAttachment() { return $this->attachment; } + + private function parseSender($data) { + return $data['fromAddress']; + } + + private function parseSenderName($data) { + return $data['fromName']; + } + + private function parseTicketNumber($data) { + return $this->parseTicketNumberFromString($data['subject']); + } + + private function parseTicket() { + return Ticket::getByTicketNumber($this->ticketNumber); + } + + private function parseSubject($data) { + return $data['subject']; + } + + private function parseContent($data) { + return $data['content']; + } + + private function parseAttachment($data) { + return $data['file']; + } + + private function parseTicketNumberFromString($string) { + for($i=0; $igetValue(), Setting::getSetting('smtp-user')->getValue(), Setting::getSetting('smtp-pass')->getValue(), - Setting::getSetting('no-reply-email')->getValue() + Setting::getSetting('server-email')->getValue() ); } diff --git a/server/models/Response.php b/server/models/Response.php index 9015c07c..5ae4947d 100755 --- a/server/models/Response.php +++ b/server/models/Response.php @@ -3,11 +3,11 @@ class Response { private static $response; private static $responseException; - public static function respondError($errorMsg, $exception = null) { + public static function respondError($errorMsg, $exception = null, $data = null) { self::$response = array( 'status' => 'fail', 'message' => $errorMsg, - 'data' => null + 'data' => $data ); self::$responseException = $exception; diff --git a/server/models/Session.php b/server/models/Session.php index bf6d6531..b6bd3450 100755 --- a/server/models/Session.php +++ b/server/models/Session.php @@ -4,7 +4,7 @@ class Session { use SingletonTrait; private $sessionPrefix = ''; - + private function __construct() { $this->initSession(); } @@ -18,17 +18,29 @@ class Session { session_destroy(); } + public function clearSessionData() { + $this->store('userId', null); + $this->store('staff', null); + $this->store('token', null); + $this->store('ticketNumber', null); + } + + public function setSessionData($data) { + foreach($data as $key => $value) + $this->store($key, $value); + } + public function createSession($userId, $staff = false) { $this->store('userId', $userId); $this->store('staff', $staff); $this->store('token', Hashing::generateRandomToken()); } - + public function createTicketSession($ticketNumber) { $this->store('ticketNumber', $ticketNumber); $this->store('token', Hashing::generateRandomToken()); } - + public function getTicketNumber() { return $this->getStoredData('ticketNumber'); } @@ -52,7 +64,7 @@ class Session { public function checkAuthentication($data) { $userId = $this->getStoredData('userId'); $token = $this->getStoredData('token'); - + return $userId && $token && $userId === $data['userId'] && $token === $data['token']; @@ -71,7 +83,7 @@ class Session { return $storedValue; } - + public function isLoggedWithId($userId) { return ($this->getStoredData('userId') === $userId); } @@ -79,4 +91,4 @@ class Session { public function setSessionPrefix($prefix) { $this->sessionPrefix = $prefix; } -} \ No newline at end of file +} diff --git a/tests/Gemfile b/tests/Gemfile index 5e7043c7..3ca0c30d 100644 --- a/tests/Gemfile +++ b/tests/Gemfile @@ -2,3 +2,4 @@ source "https://rubygems.org" gem 'mysql' gem 'bacon' gem 'mechanize' +gem 'mailfactory' \ No newline at end of file diff --git a/tests/init.rb b/tests/init.rb index cd719892..a6501f31 100644 --- a/tests/init.rb +++ b/tests/init.rb @@ -5,58 +5,59 @@ require 'uri' require 'mysql' require 'json' require 'mechanize' +require 'mailfactory' require './libs.rb' require './scripts.rb' # TESTS -require './system/init-settings.rb' -require './system/get-settings.rb' -require './system/edit-settings.rb' -require './user/signup.rb' -require './user/login.rb' -require './user/send-recover-password.rb' -require './user/recover-password.rb' -require './user/edit-password.rb' -require './user/edit-email.rb' -require './user/get.rb' -require './user/enable-disable.rb' -require './ticket/create.rb' -require './ticket/comment.rb' -require './ticket/get.rb' -require './ticket/custom-response.rb' -require './ticket/change-department.rb' -require './ticket/close.rb' -require './ticket/re-open.rb' -require './ticket/delete.rb' -require './staff/add.rb' -require './staff/get.rb' -require './staff/edit.rb' -require './staff/delete.rb' -require './staff/assign-ticket.rb' -require './staff/un-assign-ticket.rb' -require './staff/get-tickets.rb' -require './ticket/change-priority.rb' -require './staff/get-new-tickets.rb' -require './staff/get-all-tickets.rb' -require './ticket/events.rb' -require './article/topic.rb' -require './article/article.rb' -require './user/get-user.rb' -require './user/ban.rb' -require './user/get-users-test.rb' -require './user/delete.rb' -require './staff/get-all.rb' -require './system/add-department.rb' -require './system/edit-department.rb' -require './system/delete-department.rb' -require './staff/last-events.rb' -require './system/mail-templates.rb' -require './system/disable-registration.rb' -require './system/enable-registration.rb' -require './system/add-api-key.rb' -require './system/delete-api-key.rb' -require './system/get-api-keys.rb' -require './system/file-upload-download.rb' -require './system/csv-import.rb' -require './system/disable-user-system.rb' -require './system/get-stats.rb' +# require './system/init-settings.rb' +# require './system/get-settings.rb' +# require './system/edit-settings.rb' +# require './user/signup.rb' +# require './user/login.rb' +# require './user/send-recover-password.rb' +# require './user/recover-password.rb' +# require './user/edit-password.rb' +# require './user/edit-email.rb' +# require './user/get.rb' +# require './user/enable-disable.rb' +# require './ticket/create.rb' +# require './ticket/comment.rb' +# require './ticket/get.rb' +# require './ticket/custom-response.rb' +# require './ticket/change-department.rb' +# require './ticket/close.rb' +# require './ticket/re-open.rb' +# require './ticket/delete.rb' +# require './staff/add.rb' +# require './staff/get.rb' +# require './staff/edit.rb' +# require './staff/delete.rb' +# require './staff/assign-ticket.rb' +# require './staff/un-assign-ticket.rb' +# require './staff/get-tickets.rb' +# require './ticket/change-priority.rb' +# require './staff/get-new-tickets.rb' +# require './staff/get-all-tickets.rb' +# require './ticket/events.rb' +# require './article/topic.rb' +# require './article/article.rb' +# require './user/get-user.rb' +# require './user/ban.rb' +# require './user/get-users-test.rb' +# require './user/delete.rb' +# require './staff/get-all.rb' +# require './system/add-department.rb' +# require './system/edit-department.rb' +# require './system/delete-department.rb' +# require './staff/last-events.rb' +# require './system/mail-templates.rb' +# require './system/disable-registration.rb' +# require './system/enable-registration.rb' +# require './system/add-api-key.rb' +# require './system/delete-api-key.rb' +# require './system/get-api-keys.rb' +# require './system/file-upload-download.rb' +# require './system/csv-import.rb' +# require './system/disable-user-system.rb' +# require './system/get-stats.rb' diff --git a/tests/libs.rb b/tests/libs.rb index 325438dc..5fcb1cc3 100644 --- a/tests/libs.rb +++ b/tests/libs.rb @@ -49,6 +49,61 @@ class Database end end +class MailServer + def initialize + @smtp_server = ENV['OPENSUPPORTS_SMTP_SERVER'] + @smtp_port = ENV['OPENSUPPORTS_SMTP_PORT'] + + @imap_server = ENV['OPENSUPPORTS_IMAP_SERVER'] + @imap_port = ENV['OPENSUPPORTS_IMAP_PORT'] + + @admin_user = ENV['OPENSUPPORTS_EMAIL_ADMIN_USERNAME'] + @admin_password = ENV['OPENSUPPORTS_EMAIL_ADMIN_PASSWORD'] + + @client_user = ENV['OPENSUPPORTS_EMAIL_CLIENT_USERNAME'] + @client_password = ENV['OPENSUPPORTS_EMAIL_CLIENT_PASSWORD'] + + @admin_imap = Net::IMAP.new(@imap_server, @imap_port, true) + @client_imap = Net::IMAP.new(@imap_server, @imap_port, true) + + @admin_imap.login(@admin_user, @admin_password) + @client_imap.login(@client_user, @client_password) + + @client_smtp = Net::SMTP.new(@smtp_server, @smtp_port).start(user=@client_user, secret=@client_password) + end + + def clear_mails + self.clear_admin_mails + self.clear_client_mails + end + + def clear_admin_mails + @admin_imap.delete('INBOX') + end + + def clear_client_mails + @client_imap.delete('INBOX') + end + + def send_mail(subject, text, file = nil) + message = MailFactory.new + message.to = @admin_user + message.from = @client_user + message.subject = subject + message.html = text + + unless file.nil? + message.attach(file) + end + + @client_smtp.send_message(message.to_s, @client_user, @admin_user) + Net::SMTP.start(@smtp_server, @smtp_port, @smtp_server, @client_user, @client_password) { |smtp| + smtp.send_message(message.to_s, @client_user, @admin_user) + } + end +end + +$mail_server = MailServer.new $database = Database.new $staff = { diff --git a/tests/system/edit-settings.rb b/tests/system/edit-settings.rb old mode 100644 new mode 100755 index 5923d364..efa14ba1 --- a/tests/system/edit-settings.rb +++ b/tests/system/edit-settings.rb @@ -3,7 +3,7 @@ describe'system/edit-settings' do Scripts.login($staff[:email], $staff[:password], true) it 'should edit settings' do - result= request('/system/edit-settings', { + result = request('/system/edit-settings', { "csrf_userid" => $csrf_userid, "csrf_token" => $csrf_token, "maintenance-mode" => 0, @@ -12,7 +12,7 @@ describe'system/edit-settings' do "allow-attachments" => 1, "max-size" => 2, "language" => 'en', - "no-reply-email" => 'testemail@hotmail.com' + "server-email" => 'testemail@hotmail.com' }) (result['status']).should.equal('success') @@ -32,7 +32,7 @@ describe'system/edit-settings' do row = $database.getRow('setting', 'language', 'name') (row['value']).should.equal('en') - row = $database.getRow('setting', 'no-reply-email', 'name') + row = $database.getRow('setting', 'server-email', 'name') (row['value']).should.equal('testemail@hotmail.com') request('/user/logout') diff --git a/tests/system/init-settings.rb b/tests/system/init-settings.rb old mode 100644 new mode 100755 index a6900d93..80ee5ae7 --- a/tests/system/init-settings.rb +++ b/tests/system/init-settings.rb @@ -17,11 +17,16 @@ describe '/system/init-settings' do 'user-system-enabled' => true, 'registration' => true, 'title' => 'Support Center', + 'imap-host' => '{imap.dreamhost.com:993/imap/ssl}INBOX', + 'imap-user' => "support@opensupports.com", + 'imap-pass' => "gotaxc22", + 'imap-user' => 'support@opensupports.com', + 'imap-pass' => '', 'smtp-host' => 'localhost', 'smtp-port' => 7070, - 'smtp-user' => 'noreply@opensupports.com', + 'smtp-user' => 'support@opensupports.com', 'smtp-password' => '', - 'no-reply-email' => 'noreply@opensupports.com', + 'server-email' => 'support@opensupports.com', 'language' => 'en' })