mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-12-26 00:51:24 +08:00
Added Autoconfig as extension
This commit is contained in:
parent
728286d16c
commit
a46484755b
2 changed files with 98 additions and 0 deletions
20
plugins/login-autoconfig/LICENSE
Normal file
20
plugins/login-autoconfig/LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2024 SnappyMail
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
78
plugins/login-autoconfig/index.php
Normal file
78
plugins/login-autoconfig/index.php
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
/**
|
||||
* https://datatracker.ietf.org/doc/draft-bucksch-autoconfig/
|
||||
*/
|
||||
|
||||
use MailSo\Net\Enumerations\ConnectionSecurityType;
|
||||
|
||||
class LoginAutoconfigPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||
{
|
||||
const
|
||||
NAME = 'Login Autoconfig',
|
||||
AUTHOR = 'SnappyMail',
|
||||
URL = 'https://snappymail.eu/',
|
||||
VERSION = '1.0',
|
||||
RELEASE = '2024-02-05',
|
||||
REQUIRED = '2.34.0',
|
||||
CATEGORY = 'Login',
|
||||
LICENSE = 'MIT',
|
||||
DESCRIPTION = 'Tries to login using the domain autoconfig';
|
||||
|
||||
public function Init() : void
|
||||
{
|
||||
$this->addHook('login.credentials.step-1', 'detect');
|
||||
}
|
||||
|
||||
public function detect(string $sEmail) : void
|
||||
{
|
||||
if (\str_contains($sEmail, '@')) {
|
||||
$oProvider = $this->Manager()->Actions()->DomainProvider();
|
||||
$sDomain = \MailSo\Base\Utils::GetDomainFromEmail($sEmail);
|
||||
$oDomain = $oProvider->Load($sDomain, false);
|
||||
if (!$oDomain) {
|
||||
$result = \RainLoop\Providers\Domain\Autoconfig::discover($sEmail);
|
||||
if ($result) {
|
||||
$typeIMAP = ConnectionSecurityType::AUTO_DETECT;
|
||||
if ('STARTTLS' === $result['incomingServer'][0]['socketType']) {
|
||||
$typeIMAP = ConnectionSecurityType::STARTTLS;
|
||||
} else if ('SSL' === $result['incomingServer'][0]['socketType']) {
|
||||
$typeIMAP = ConnectionSecurityType::SSL;
|
||||
}
|
||||
$typeSMTP = ConnectionSecurityType::AUTO_DETECT;
|
||||
if ('STARTTLS' === $result['outgoingServer'][0]['socketType']) {
|
||||
$typeSMTP = ConnectionSecurityType::STARTTLS;
|
||||
} else if ('SSL' === $result['outgoingServer'][0]['socketType']) {
|
||||
$typeSMTP = ConnectionSecurityType::SSL;
|
||||
}
|
||||
$oDomain = \RainLoop\Model\Domain::fromArray($sDomain, [
|
||||
'IMAP' => [
|
||||
'host' => $result['incomingServer'][0]['hostname'],
|
||||
'port' => $result['incomingServer'][0]['port'],
|
||||
'type' => $typeIMAP,
|
||||
'shortLogin' => '%EMAILADDRESS%' !== $result['incomingServer'][0]['username'],
|
||||
// 'ssl' => []
|
||||
],
|
||||
'SMTP' => [
|
||||
'host' => $result['outgoingServer'][0]['hostname'],
|
||||
'port' => $result['outgoingServer'][0]['port'],
|
||||
'type' => $typeSMTP,
|
||||
'shortLogin' => '%EMAILADDRESS%' !== $result['outgoingServer'][0]['username'],
|
||||
// 'useAuth' => !empty($result['authentication']),
|
||||
],
|
||||
'Sieve' => [
|
||||
'host' => $result['incomingServer'][0]['hostname'],
|
||||
'port' => $result['incomingServer'][0]['port'],
|
||||
'type' => $typeIMAP,
|
||||
'shortLogin' => '%EMAILADDRESS%' !== $result['incomingServer'][0]['username'],
|
||||
'enabled' => false
|
||||
],
|
||||
'whiteList' => ''
|
||||
]);
|
||||
$oProvider->Save($oDomain);
|
||||
\SnappyMail\Log::notice("Domain setup for '{$sDomain}' is created and active");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue