mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-11-09 23:01:51 +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…
Add table
Reference in a new issue