$this->addField('spam_whitelist', Table::class, __('Liste blanche SPAM'), ['tab' => __('Listes blanches'), 'entity_singular' => __('un e-mail'), 'columns' => ['email' => __('E-mail')], 'translatable' => false, 'hint' => __('Les e-mails provenant de ces expéditeurs ne sont jamais considérés comme des spam (expressions régulières possibles)')]);
$this->addField('auth_whitelist', Table::class, __('Liste blanche DMARC/DKIM'), ['tab' => __('Listes blanches'), 'entity_singular' => __('un domaine'), 'columns' => ['domain' => __('Domaine')], 'translatable' => false, 'hint' => __('Les e-mails provenant de ces domaines ne sont pas vérifiés par DMARC et DKIM')]);
$this->addField('spam_blacklist', Table::class, __('Liste noire SPAM'), ['tab' => __('Listes noires'), 'entity_singular' => __('un e-mail'), 'columns' => ['email' => __('E-mail')], 'translatable' => false, 'hint' => __('Ces e-mails sont toujours considérés comme des spam (expressions régulières possibles)')]);
+ $this->addField('mailboxes_other', Table::class, __('Autres comptes'), ['tab' => __('Clients'), 'entity_singular' => __('un e-mail'), 'columns' => ['mailbox' => __('E-mail'), 'password' => __('Mot de passe')], 'translatable' => false]);
+ $this->addField('aliases_other', Table::class, __('Redirections'), ['entity_singular' => __('une redirection'), 'columns' => ['from' => __('Alias'), 'dest' => __('Destinations')], 'translatable' => false, 'tab' => __('Clients')]);
}
$maindomain = 'cubedesigners.com';
$mailboxes = json_decode($this->mailboxes, true);
+ $mailboxes_other = json_decode($this->mailboxes_other, true);
$domains = json_decode($this->domains, true);
$a = json_decode($this->aliases, true);
+ $a_other = json_decode($this->aliases_other, true);
$ip = json_decode($this->ip_whitelist, true);
$spam_whitelist = json_decode($this->spam_whitelist, true);
$spam_whitelist = self::getWhitelistFromClients($spam_whitelist);
$accounts[$m['mailbox']] = $password;
$mailboxes[$k] = $m;
}
+
usort($mailboxes, function ($a, $b) {
return strcmp($a['mailbox'], $b['mailbox']);
});
$this->mailboxes = json_encode($mailboxes);
+ foreach ($mailboxes_other as $k => $m) {
+ $password = $m['password'] = trim($m['password']);
+ if ($m['password'] === '') {
+ $m['password'] = Str::random(12);
+ }
+ if ($m['password'] !== '' && !preg_match('/^\{([A-Z0-9-]+)\}\$\d/', $m['password'])) {
+ $p = $m['password'];
+ $m['password'] = $password = "{SHA512-CRYPT}" . crypt($p, "$6$" . substr(sha1(rand()), 0, 16));
+ }
+ $accounts[$m['mailbox']] = $password;
+ $mailboxes_other[$k] = $m;
+ }
+
+ usort($mailboxes_other, function ($a, $b) {
+ return strcmp($a['mailbox'], $b['mailbox']);
+ });
+
+ $this->mailboxes_other = json_encode($mailboxes_other);
+
+
$accountFile = [];
foreach ($accounts as $account => $password) {
$accountFile[] = $account . '@' . $maindomain . '|' . $password;
}
$this->aliases = json_encode($savedAliases);
+ $aliases_other = [];
+ foreach ($a_other as $item) {
+ $from = trim($item['from']);
+ if (!isset($aliases_other[$from])) {
+ $aliases_other[$from] = [];
+ }
+ $dest = $item['dest'];
+ if (!is_array($dest)) {
+ $dest = explode(',', $dest);
+ }
+ $aliases_other[$from] = array_merge($aliases_other[$from], $dest);
+ }
+ ksort($aliases_other);
+ $savedAliases = [];
+ foreach ($aliases_other as $from => $dest) {
+ $savedAliases[] = ['from' => $from, 'dest' => $dest];
+ }
+ $this->aliases_other = json_encode($savedAliases);
+
$allAliases = [];
foreach ($domains as $d) {
$domain = $d['domaine'];
foreach ($accounts as $account => $password) {
+ if (stristr($account, '@')) {
+ continue;
+ }
if (!isset($allAliases[$account . '@' . $domain])) {
$allAliases[$account . '@' . $domain] = [];
}
}
$allAliases[$from . '@' . $domain] = array_merge($allAliases[$from . '@' . $domain], $dest);
}
+
$allAliases['@' . $domain] = ['spam@' . $maindomain];
}
+
+ foreach ($aliases_other as $from => $dest) {
+ if (!isset($allAliases[$from])) {
+ $allAliases[$from] = [];
+ }
+ $allAliases[$from] = array_merge($allAliases[$from], $dest);
+ }
+
$aliasesFile = [];
foreach ($allAliases as $from => $dest) {
$domaineDest = [];
foreach ($dest as $d) {
+ $d = trim($d);
if (stristr($d, '@')) {
$domaineDest[] = $d;
} else {