diff --git a/app/Http/Controllers/MailboxesController.php b/app/Http/Controllers/MailboxesController.php index 70ed6c1c5..633fe8e1c 100755 --- a/app/Http/Controllers/MailboxesController.php +++ b/app/Http/Controllers/MailboxesController.php @@ -622,17 +622,22 @@ public function ajax(Request $request) } if (!$response['msg']) { - $test_result = false; + $test_result = [ + 'status' => 'error' + ]; try { - $test_result = \App\Misc\Mail::sendTestMail($request->to, $mailbox); + $test_result = \MailHelper::sendTestMail($request->to, $mailbox); } catch (\Exception $e) { - $response['msg'] = $e->getMessage(); + $test_result['msg'] = $e->getMessage(); } - if (!$test_result && !$response['msg']) { - $response['msg'] = __('Error occurred sending email. Please check your mail server logs for more details.'); + if ($test_result['status'] == 'error') { + $response['msg'] = $test_result['msg'] + ?: __('Error occurred sending email. Please check your mail server logs for more details.'); } + + $response['log'] = $test_result['log'] ?? ''; } if (!$response['msg']) { diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 2ebcb22d2..770afb1a5 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -394,17 +394,22 @@ public function ajax(Request $request) } if (!$response['msg']) { - $test_result = false; + $test_result = [ + 'status' => 'error' + ]; try { $test_result = \MailHelper::sendTestMail($request->to); } catch (\Exception $e) { - $response['msg'] = $e->getMessage(); + $test_result['msg'] = $e->getMessage(); } - if (!$test_result && !$response['msg']) { - $response['msg'] = __('Error occurred sending email. Please check your mail server logs for more details.'); + if ($test_result['status'] == 'error') { + $response['msg'] = $test_result['msg'] + ?: __('Error occurred sending email. Please check your mail server logs for more details.'); } + + $response['log'] = $test_result['log'] ?? ''; } if (!$response['msg']) { diff --git a/app/Misc/Mail.php b/app/Misc/Mail.php index 56b05a653..8b48aedd0 100644 --- a/app/Misc/Mail.php +++ b/app/Misc/Mail.php @@ -282,14 +282,29 @@ public static function getSystemMailDriver() return Option::get('mail_driver', 'mail'); } + public static function registerSmtpLogger() + { + $logger = new \Swift_Plugins_Loggers_ArrayLogger(); + \Mail::getSwiftMailer()->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger)); + + return $logger; + } + /** * Send test email from mailbox. */ public static function sendTestMail($to, $mailbox = null) { + $result = [ + 'status' => 'success', + 'msg' => '', + 'log' => '', + ]; + if ($mailbox) { // Configure mail driver according to Mailbox settings \MailHelper::setMailDriver($mailbox); + $smtp_logger = self::registerSmtpLogger(); $status_message = ''; @@ -302,6 +317,7 @@ public static function sendTestMail($to, $mailbox = null) } else { // System email \MailHelper::setSystemMailDriver(); + $smtp_logger = self::registerSmtpLogger(); $status_message = ''; @@ -317,15 +333,17 @@ public static function sendTestMail($to, $mailbox = null) if (\Mail::failures() || $status_message) { SendLog::log(null, null, $to, SendLog::MAIL_TYPE_TEST, SendLog::STATUS_SEND_ERROR, null, null, $status_message); if ($status_message) { - throw new \Exception($status_message, 1); - } else { - return false; + $result['msg'] = $status_message; } + $result['status'] = 'error'; + $result['log'] = $smtp_logger->dump(); } else { SendLog::log(null, null, $to, SendLog::MAIL_TYPE_TEST, SendLog::STATUS_ACCEPTED); - return true; + $result['status'] = 'success'; } + + return $result; } /** diff --git a/public/css/style.css b/public/css/style.css index 840d242b5..6af0fcdb2 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -4387,6 +4387,9 @@ a.disabled:focus { padding: 4px 6px 4px 6px; vertical-align: inherit; } +#send_test_log { + max-height: 200px; +} .glyphicon-spin { -webkit-animation: spin 1000ms infinite linear; animation: spin 1000ms infinite linear; diff --git a/public/js/main.js b/public/js/main.js index 825d20d1b..2ce244a1a 100755 --- a/public/js/main.js +++ b/public/js/main.js @@ -656,6 +656,7 @@ function mailboxConnectionInit(out_method_smtp) $('#send-test-trigger').click(function(event) { var button = $(this); button.button('loading'); + $('#send_test_log').addClass('hidden'); fsAjax( { action: 'send_test', @@ -668,6 +669,9 @@ function mailboxConnectionInit(out_method_smtp) showFloatingAlert('success', Lang.get("messages.email_sent")); } else { showAjaxError(response, true); + if (typeof(response.log) != "undefined" && response.log) { + $('#send_test_log').removeClass('hidden').text(response.log); + } } button.button('reset'); }, @@ -786,6 +790,7 @@ function mailSettingsInit() $('#send-test-trigger').click(function(event) { var button = $(this); button.button('loading'); + $('#send_test_log').addClass('hidden'); fsAjax( { action: 'send_test', @@ -797,6 +802,9 @@ function mailSettingsInit() showFloatingAlert('success', Lang.get("messages.email_sent")); } else { showAjaxError(response); + if (typeof(response.log) != "undefined" && response.log) { + $('#send_test_log').removeClass('hidden').text(response.log); + } } button.button('reset'); }, diff --git a/resources/views/mailboxes/connection.blade.php b/resources/views/mailboxes/connection.blade.php index ca17e00f9..3f60c9f93 100644 --- a/resources/views/mailboxes/connection.blade.php +++ b/resources/views/mailboxes/connection.blade.php @@ -130,6 +130,7 @@
{!! __("Make sure to save settings before testing.") !!}
+
diff --git a/resources/views/settings/emails.blade.php b/resources/views/settings/emails.blade.php index b4b734012..86d76a7f0 100644 --- a/resources/views/settings/emails.blade.php +++ b/resources/views/settings/emails.blade.php @@ -104,6 +104,7 @@
{!! __("Make sure to save settings before testing.") !!}
+