test smtp connection before set up

This commit is contained in:
Čarodej
2022-04-01 17:18:51 +02:00
parent d4199a796d
commit 2d4c7241ef
11 changed files with 222 additions and 106 deletions

View File

@@ -1,9 +1,13 @@
<?php
namespace Domain\Settings\Controllers;
use Mail;
use Artisan;
use Illuminate\Http\Response;
use Domain\Settings\Mail\TestMail;
use Symfony\Component\Mailer\Exception\LogicException;
use Domain\Settings\Requests\StoreEmailCredentialsRequest;
use Symfony\Component\Mailer\Exception\TransportException;
class StoreEmailCredentialsController
{
@@ -16,6 +20,39 @@ class StoreEmailCredentialsController
abort_if(is_demo(), 204, 'Done.');
if (! app()->runningUnitTests()) {
// Test smtp server
if ($request->input('mailDriver') === 'smtp') {
try {
// Get credentials
$credentials = [
'smtp' => [
'driver' => 'smtp',
'host' => $request->input('smtp.host'),
'port' => $request->input('smtp.port'),
'username' => $request->input('smtp.username'),
'password' => $request->input('smtp.password'),
'encryption' => $request->input('smtp.encryption') ?? '',
'from.address' => $request->input('smtp.email') ?? $request->input('smtp.username'),
'from.name' => $request->input('smtp.email') ?? $request->input('smtp.username'),
],
];
// Set temporary mail connection
config(['mail' => $credentials['smtp']]);
$sender = $request->input('smtp.email') ?? $request->input('smtp.username');
// Send test email
Mail::to('test@hi5ve.digital')->send(new TestMail($sender));
} catch (TransportException|LogicException $error) {
return response([
'type' => 'mailer-connection-error',
'title' => 'Mail Connection Error',
'message' => $error->getMessage(),
], 401);
}
}
$mail = [
'log' => [
'MAIL_DRIVER' => 'log',

View File

@@ -0,0 +1,29 @@
<?php
namespace Domain\Settings\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class TestMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*/
public function __construct(
public string $emailFrom
) {
}
/**
* Build the message.
*/
public function build(): static
{
return $this->from($this->emailFrom, 'Test')
->subject('Test Mail')
->view('mails.test-mail');
}
}

View File

@@ -1,13 +1,17 @@
<?php
namespace Domain\SetupWizard\Controllers;
use Mail;
use Artisan;
use Illuminate\Http\Response;
use Aws\S3\Exception\S3Exception;
use Domain\Settings\Mail\TestMail;
use App\Http\Controllers\Controller;
use League\Flysystem\UnableToWriteFile;
use Domain\Settings\DTO\S3CredentialsData;
use Domain\Settings\Actions\TestS3ConnectionAction;
use Symfony\Component\Mailer\Exception\LogicException;
use Symfony\Component\Mailer\Exception\TransportException;
use Domain\SetupWizard\Requests\StoreEnvironmentSetupRequest;
class StoreEnvironmentSettingsController extends Controller
@@ -38,6 +42,39 @@ class StoreEnvironmentSettingsController extends Controller
}
}
// Test smtp server
if ($request->input('mailDriver') === 'smtp') {
try {
// Get credentials
$credentials = [
'smtp' => [
'driver' => 'smtp',
'host' => $request->input('smtp.host'),
'port' => $request->input('smtp.port'),
'username' => $request->input('smtp.username'),
'password' => $request->input('smtp.password'),
'encryption' => $request->input('smtp.encryption') ?? '',
'from.address' => $request->input('smtp.email') ?? $request->input('smtp.username'),
'from.name' => $request->input('smtp.email') ?? $request->input('smtp.username'),
],
];
// Set temporary mail connection
config(['mail' => $credentials['smtp']]);
$sender = $request->input('smtp.email') ?? $request->input('smtp.username');
// Send test email
Mail::to('test@hi5ve.digital')->send(new TestMail($sender));
} catch (TransportException|LogicException $error) {
return response([
'type' => 'mailer-connection-error',
'title' => 'Mail Connection Error',
'message' => $error->getMessage(),
], 401);
}
}
$setup = [
'broadcasting' => [
'pusher' => [