Merge branch 'master' into patch-1

This commit is contained in:
Maarten 2024-06-09 16:43:46 +02:00 committed by GitHub
commit 92ed4fcc81
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
82 changed files with 607 additions and 343 deletions

View file

@ -30,8 +30,9 @@ If applicable, add screenshots to help explain your problem.
- SnappyMail Version:
- Mode: [e.g. standalone, nextcloud, cyberpanel, docker]
**[Debug/logging information](https://github.com/the-djmaze/snappymail/wiki/FAQ#how-do-i-enable-logging)**
Place them here (few lines) or as attachments (many lines)
**Debug/logging information**
[Read here how to log](https://github.com/the-djmaze/snappymail/wiki/FAQ#how-do-i-enable-logging)
- [ ] I've placed them here (few lines) or as attachments (many lines)
**Additional context**
Add any other context about the problem here.

View file

@ -10,18 +10,20 @@ export class MimeHeaderAutocryptModel/* extends AbstractModel*/
if (value) {
value.split(';').forEach(entry => {
entry = entry.split('=');
entry = entry.match(/^([^=]+)=(.*)$/);
const trim = str => (str || '').trim().replace(/^["']|["']+$/g, '');
this[trim(entry[0]).replace('-', '_')] = trim(entry[1]);
this[trim(entry[1]).replace('-', '_')] = trim(entry[2]);
});
this.keydata = this.keydata.replace(/\s+/g, '\n');
}
}
toString() {
let result = `addr=${this.addr}; `;
if ('mutual' === this.prefer_encrypt) {
return `addr=${this.addr}; prefer-encrypt=mutual; keydata=${this.keydata}`;
result += 'prefer-encrypt=mutual; ';
}
return `addr=${this.addr}; keydata=${this.keydata}`;
return result + 'keydata=' + this.keydata.replace(/\n/g, '\n ');
}
pem() {

View file

@ -18,7 +18,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup {
text: '',
keyword: '',
repliedValue: -1,
selectedDateValue: -1,
selectedDateValue: 0,
selectedTreeValue: '',
hasAttachment: false,
@ -58,7 +58,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup {
// We should think about migrating all SEARCH/DATE_ to either SEARCH/SINCE_DATE or SEARCH/BEFORE_DATE
// and adjust the prefix accordingly
// let prefix_since = 'SEARCH/SINCE_DATE_';
let prefix = 'SEARCH/DATE_';
let prefix = 'SEARCH/SINCE_';
let prefix_before = 'SEARCH/BEFORE_DATE_';
return [
{ id: -365, name: i18n(prefix_before + 'YEAR') },
@ -67,7 +67,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup {
{ id: -30, name: i18n(prefix_before + 'MONTH') },
{ id: -7, name: i18n(prefix_before + '7_DAYS') },
{ id: -3, name: i18n(prefix_before + '3_DAYS') },
{ id: -1, name: i18n(prefix + 'ALL') },
{ id: 0, name: i18n('SEARCH/DATE_ALL') },
{ id: 3, name: i18n(prefix + '3_DAYS') },
{ id: 7, name: i18n(prefix + '7_DAYS') },
{ id: 30, name: i18n(prefix + 'MONTH') },
@ -110,7 +110,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup {
append('text', self.text().trim());
append('keyword', self.keyword());
append('in', self.selectedTreeValue());
if (-1 < self.selectedDateValue()) {
if (0 < self.selectedDateValue()) {
let d = new Date();
d.setDate(d.getDate() - self.selectedDateValue());
append('since', d.toISOString().split('T')[0]);
@ -151,8 +151,7 @@ export class AdvancedSearchPopupView extends AbstractViewPopup {
self.text(pString(params.get('text')));
self.keyword(pString(params.get('keyword')));
self.selectedTreeValue(pString(params.get('in')));
// self.selectedDateValue(params.get('since'));
self.selectedDateValue(-1);
self.selectedDateValue(0);
self.hasAttachment(params.has('attachment'));
self.starred(params.has('flagged'));
self.unseen(params.has('unseen'));

View file

@ -500,7 +500,7 @@ export class ComposePopupView extends AbstractViewPopup {
this.sendError(true);
this.sendErrorDesc(
getNotification(iError, data?.ErrorMessage, Notifications.CantSendMessage)
+ "\n" + data?.ErrorMessageAdditional
+ "\n" + (data?.ErrorMessageAdditional || data?.ErrorMessage)
);
};
try {
@ -535,9 +535,13 @@ export class ComposePopupView extends AbstractViewPopup {
}
this.savedErrorDesc(msg);
} else {
params.signPassphrase && Passphrases.delete(identity);
this.sendError(true);
sendFailed(iError, data);
// Remove remembered passphrase as it could be wrong
let key = ('S/MIME' === params.sign) ? identity : null;
params.signFingerprint
&& this.signOptions.forEach(option => ('GnuPG' === option[0]) && (key = option[1]));
key && Passphrases.delete(key);
}
} else {
if (arrayLength(this.aDraftInfo) > 0) {
@ -886,7 +890,7 @@ export class ComposePopupView extends AbstractViewPopup {
}
if (options.mode && oLastMessage) {
let encrypted,
let usePlain,
sCc = '',
sDate = timestampToString(oLastMessage.dateTimestamp(), 'FULL'),
sSubject = oLastMessage.subject(),
@ -994,18 +998,14 @@ export class ComposePopupView extends AbstractViewPopup {
break;
default:
encrypted = PgpUserStore.isEncrypted(sText);
if (encrypted) {
usePlain = PgpUserStore.isEncrypted(sText) || isPlainEditor() || !oLastMessage.isHtml();
if (usePlain) {
sText = oLastMessage.plain();
}
}
this.editor(editor => {
encrypted || editor.setHtml(sText);
if (encrypted || isPlainEditor()) {
editor.modePlain();
}
encrypted && editor.setPlain(sText);
usePlain ? (editor.modePlain() | editor.setPlain(sText)) : editor.setHtml(sText);
this.setSignature(identity, options.mode);
this.setFocusInPopup();
});
@ -1506,6 +1506,8 @@ export class ComposePopupView extends AbstractViewPopup {
do {
l = Text.length;
Text = Text
// Remove line duplication
.replace(/<br><\/div>/gi, '</div>')
// Remove Microsoft Office styling
.replace(/(<[^>]+[;"'])\s*mso-[a-z-]+\s*:[^;"']+/gi, '$1')
// Remove hubspot data-hs- attributes
@ -1546,12 +1548,11 @@ export class ComposePopupView extends AbstractViewPopup {
alternative.children.push(data);
data = alternative;
}
let sign = true;
let isSigned = false;
for (let i = 0; i < signOptions.length; ++i) {
if ('OpenPGP' == signOptions[i][0]) {
try {
// Doesn't sign attachments
params.html = params.plain = '';
let signed = new MimePart;
signed.headers['Content-Type'] =
'multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"';
@ -1562,6 +1563,8 @@ export class ComposePopupView extends AbstractViewPopup {
signature.headers['Content-Transfer-Encoding'] = '7Bit';
signature.body = await OpenPGPUserStore.sign(data.toString(), signOptions[i][1], 1);
signed.children.push(signature);
isSigned = true;
params.html = params.plain = '';
params.signed = signed.toString();
params.boundary = signed.boundary;
data = signed;
@ -1569,13 +1572,11 @@ export class ComposePopupView extends AbstractViewPopup {
Object.entries(PgpUserStore.getPublicKeyOfEmails([getEmail(this.from())]) || {})
.forEach(([k,v]) => params.publicKey = v);
*/
break;
} catch (e) {
sign = false;
console.error(e);
}
break;
}
if ('GnuPG' == signOptions[i][0]) {
} else if ('GnuPG' == signOptions[i][0]) {
// TODO: sign in PHP fails
let pass = await GnuPGUserStore.sign(signOptions[i][1]);
if (null != pass) {
@ -1583,12 +1584,10 @@ export class ComposePopupView extends AbstractViewPopup {
params.signFingerprint = signOptions[i][1].fingerprint;
params.signPassphrase = pass;
// params.attachPublicKey = false;
} else {
sign = false;
isSigned = true;
break;
}
break;
}
if ('S/MIME' == signOptions[i][0]) {
} else if ('S/MIME' == signOptions[i][0]) {
// TODO: sign in PHP fails
params.sign = 'S/MIME';
// params.signCertificate = identity.smimeCertificate();
@ -1601,14 +1600,13 @@ export class ComposePopupView extends AbstractViewPopup {
);
if (null != pass) {
params.signPassphrase = pass.password;
// pass.remember && Passphrases.handle(identity, pass.password);
} else {
sign = false;
pass.remember && Passphrases.handle(identity, pass.password);
isSigned = true;
}
}
}
}
if (signOptions.length && !sign) {
if (signOptions.length && !isSigned) {
throw 'Signing failed';
}

View file

@ -39,6 +39,8 @@ const
imapMessage_all_headers: false,
imapMessage_list_limit: 10000,
imapSearch_filter: '',
imapSpam_headers: '',
imapVirus_headers: '',
sieveEnabled: false,
sieveHost: '',
@ -80,15 +82,17 @@ const
},
disabled_capabilities: oDomain.imapDisabled_capabilities(),
folder_list_limit: pInt(oDomain.imapFolder_list_limit()),
message_list_limit: pInt(oDomain.imapMessage_list_limit())
message_list_limit: pInt(oDomain.imapMessage_list_limit()),
/*
expunge_all_on_delete: ,
fast_simple_search: ,
fetch_new_messages: ,
force_select: ,
message_all_headers: ,
search_filter:
*/
search_filter: oDomain.imapSearch_filter(),
spam_headers: oDomain.imapSpam_headers(),
virus_headers: oDomain.imapVirus_headers()
},
SMTP: {
host: oDomain.smtpHost,

View file

@ -20,7 +20,6 @@ const
SignMeOn = 1,
SignMeUnused = 2;
export class LoginUserView extends AbstractViewLogin {
constructor() {
super();

View file

@ -7,6 +7,7 @@ use OCA\SnappyMail\Controller\FetchController;
use OCA\SnappyMail\Controller\PageController;
use OCA\SnappyMail\Dashboard\UnreadMailWidget;
use OCA\SnappyMail\Search\Provider;
use OCA\SnappyMail\Listeners\AccessTokenUpdatedListener;
use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootstrap;
@ -16,6 +17,7 @@ use OCP\IL10N;
use OCP\IUser;
use OCP\User\Events\PostLoginEvent;
use OCP\User\Events\BeforeUserLoggedOutEvent;
use OCA\OIDCLogin\Events\AccessTokenUpdatedEvent;
class Application extends App implements IBootstrap
{
@ -62,6 +64,7 @@ class Application extends App implements IBootstrap
);
$context->registerSearchProvider(Provider::class);
$context->registerEventListener(AccessTokenUpdatedEvent::class, AccessTokenUpdatedListener::class);
// TODO: Not working yet, needs a Vue UI
// $context->registerDashboardWidget(UnreadMailWidget::class);

View file

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace OCA\SnappyMail\Listeners;
use OCA\OIDCLogin\Events\AccessTokenUpdatedEvent;
use OCP\App\IAppManager;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\ISession;
use OCP\IUserSession;
class AccessTokenUpdatedListener implements IEventListener {
private IUserSession $userSession;
private ISession $session;
private IAppManager $appManager;
private const SNAPPYMAIL_APP_ID = 'snappymail';
private const OIDC_LOGIN_APP_ID = 'oidc_login';
public function __construct(IUserSession $userSession, ISession $session, IAppManager $appManager) {
$this->userSession = $userSession;
$this->session = $session;
$this->appManager = $appManager;
}
public function handle(Event $event): void {
if (!($event instanceof AccessTokenUpdatedEvent) || !$this->userSession->isLoggedIn() || !$this->session->exists('is_oidc')) {
return;
}
// just-in-case checks(also maybe useful for selfhosters)
if (!$this->appManager->isEnabledForUser(self::SNAPPYMAIL_APP_ID) || !$this->appManager->isEnabledForUser(self::OIDC_LOGIN_APP_ID)) {
return;
}
$accessToken = $event->getAccessToken();
if (!$accessToken) {
return;
}
$username = $this->userSession->getUser()->getUID();
$this->session->set('snappymail-nc-uid', $username);
}
}

View file

@ -1,4 +1,55 @@
(rl => {
/**
* ViewModel class | class.viewModelTemplateID
* User & Admin:
* AskPopupView | PopupsAsk
* LanguagesPopupView | PopupsLanguages
* User:
* LoginUserView | Login
* SystemDropDownUserView | SystemDropDown
* MailFolderList | MailFolderList
* MailMessageList | MailMessageList
* MailMessageView | MailMessageView
* SettingsMenuUserView | SettingsMenu
* SettingsPaneUserView | SettingsPane
* UserSettingsAccounts | SettingsAccounts
* UserSettingsContacts | SettingsContacts
* UserSettingsFilters | SettingsFilters
* UserSettingsFolders | SettingsFolders
* UserSettingsGeneral | SettingsGeneral
* UserSettingsSecurity | SettingsSecurity
* UserSettingsThemes | SettingsThemes
* AccountPopupView | PopupsAccount
* AdvancedSearchPopupView | PopupsAdvancedSearch
* ComposePopupView | PopupsCompose
* ContactsPopupView | PopupsContacts
* FolderPopupView | PopupsFolder
* FolderClearPopupView | PopupsFolderClear
* FolderCreatePopupView | PopupsFolderCreate
* FolderSystemPopupView | PopupsFolderSystem
* IdentityPopupView | PopupsIdentity
* KeyboardShortcutsHelpPopupView | PopupsKeyboardShortcutsHelp
* OpenPgpGeneratePopupView | PopupsOpenPgpGenerate
* OpenPgpImportPopupView | PopupsOpenPgpImport
* OpenPgpKeyPopupView | PopupsOpenPgpKey
* SMimeImportPopupView | PopupsSMimeImport
* Admin:
* AdminLoginView | AdminLogin
* MenuSettingsAdminView | AdminMenu
* PaneSettingsAdminView | AdminPane
* AdminSettingsAbout | AdminSettingsAbout
* AdminSettingsBranding | AdminSettingsBranding
* AdminSettingsConfig | AdminSettingsConfig
* AdminSettingsContacts | AdminSettingsContacts
* AdminSettingsDomains | AdminSettingsDomains
* AdminSettingsGeneral | AdminSettingsGeneral
* AdminSettingsLogin | AdminSettingsLogin
* AdminSettingsPackages | AdminSettingsPackages
* AdminSettingsSecurity | AdminSettingsSecurity
* DomainPopupView | PopupsDomain
* DomainAliasPopupView | PopupsDomainAlias
* PluginPopupView | PopupsPlugin
*/
/**
* Happens immediately after the ViewModel constructor

View file

@ -3,7 +3,9 @@
use RainLoop\Enumerations\Capa;
use MailSo\Log\Logger;
use RainLoop\Actions;
use RainLoop\Model\AdditionalAccount;
use RainLoop\Model\MainAccount;
use RainLoop\Providers\Storage\Enumerations\StorageType;
class LdapMailAccounts
{
@ -50,14 +52,13 @@ class LdapMailAccounts
/**
* @inheritDoc
*
* AOverwrite the MainAccount mail address by looking up the new one in the ldap directory
* Overwrite the MainAccount mail address by looking up the new one in the ldap directory
*
* The ldap search string has to be configured in the plugin configuration of the extension (in the SnappyMail Admin Panel)
*
* @param string &$sEmail
* @param string &$sLogin
*/
public function overwriteEmail(&$sEmail, &$sLogin)
public function overwriteEmail(&$sEmail)
{
try {
$this->EnsureBound();
@ -106,7 +107,7 @@ class LdapMailAccounts
foreach($mailAddressResults as $mailAddressResult)
{
if($mailAddressResult->username === $username) {
//$sLogin is already set to be the same as $sEmail by function "resolveLoginCredentials" in /RainLoop/Actions/UserAuth.php
//$sImapUser and $sSmtpUser are already set to be the same as $sEmail by function "resolveLoginCredentials" in /RainLoop/Actions/UserAuth.php
//that called this hook, so we just have to overwrite the mail address
$sEmail = $mailAddressResult->mailMainAccount;
}
@ -131,10 +132,19 @@ class LdapMailAccounts
return false; // exceptions are only thrown from the handle error function that does logging already
}
// Try to get account information. IncLogin() returns the username of the user
// and removes the domainname if this was configured inside the domain config.
$username = @ldap_escape($oAccount->IncLogin(), "", LDAP_ESCAPE_FILTER);
//Basing on https://github.com/the-djmaze/snappymail/issues/616
$oActions = \RainLoop\Api::Actions();
//Check if SnappyMail is configured to allow additional accounts
if (!$oActions->GetCapa(Capa::ADDITIONAL_ACCOUNTS)) {
return $oActions->FalseResponse(__FUNCTION__);
}
// Try to get account information. ImapUser() returns the username of the user
// and removes the domainname if this was configured inside the domain config.
$username = @ldap_escape($oAccount->ImapUser(), "", LDAP_ESCAPE_FILTER);
$searchString = $this->config->search_string;
// Replace placeholders inside the ldap search string with actual values
@ -159,21 +169,10 @@ class LdapMailAccounts
catch (LdapMailAccountsException $e) {
return false; // exceptions are only thrown from the handle error function that does logging already
}
if (count($mailAddressResults) < 1) {
$this->logger->Write("Could not find user $username", \LOG_NOTICE, self::LOG_KEY);
return false;
} else if (count($mailAddressResults) == 1) {
$this->logger->Write("Found only one match for user $username, no additional mail adresses found", \LOG_NOTICE, self::LOG_KEY);
return true;
}
//Basing on https://github.com/the-djmaze/snappymail/issues/616
$oActions = \RainLoop\Api::Actions();
//Check if SnappyMail is configured to allow additional accounts
if (!$oActions->GetCapa(Capa::ADDITIONAL_ACCOUNTS)) {
return $oActions->FalseResponse(__FUNCTION__);
}
$aAccounts = $oActions->GetAccounts($oAccount);
@ -189,6 +188,25 @@ class LdapMailAccounts
}
}
//SnappyMail saves the passwords of the additional accounts by encrypting them using a cryptkey that is saved in the file .cryptkey
//When the password of the main account changes, SnappyMail asks the user for the old password to reencrypt the keys with the new userpassword.
//On a password change using ldap (or when the password has been forgotten by the user) this makes us some problems. Therefore overwrite
//the .cryptkey file in order to always accept the actual ldap password of the user. This has side effects on pgp keys!
//See https://github.com/the-djmaze/snappymail/issues/1570#issuecomment-2085528061
if ($this->config->bool_overwrite_cryptkey) {
if (!$oActions->StorageProvider()->Put($oAccount, StorageType::ROOT, '.cryptkey', "")) {
$this->logger->Write("Could not overwrite the .cryptkey file!", \LOG_WARNING, self::LOG_KEY);
return $oActions->FalseResponse(__FUNCTION__);
}
}
if (count($mailAddressResults) == 1) {
$this->logger->Write("Found only one match for user $username, no additional mail adresses found", \LOG_NOTICE, self::LOG_KEY);
//Write back the accounts even if no additional account was found. This ensures, that previous additional accounts are always removed
$oActions->SetAccounts($oAccount, $aAccounts);
return true;
}
foreach($mailAddressResults as $mailAddressResult)
{
$sUsername = $mailAddressResult->username;
@ -210,7 +228,18 @@ class LdapMailAccounts
//if this fails the user will see the new mail addresses but will be asked for the correct password
$sPass = new \SnappyMail\SensitiveString($oAccount->IncPassword());
//After creating the accounts here $sUsername is used as username to login to the IMAP server (see Account.php)
$oNewAccount = RainLoop\Model\AdditionalAccount::NewInstanceFromCredentials($oActions, $sEmail, $sUsername, $sPass);
//$oNewAccount = RainLoop\Model\AdditionalAccount::NewInstanceFromCredentials($oActions, $sEmail, $sUsername, $sPass);
$oDomain = $oActions->DomainProvider()->Load($sDomain, false);
$oNewAccount = new AdditionalAccount;
$oNewAccount->setCredentials(
$oDomain,
$sEmail,
$sUsername,
$sPass,
$sUsername
);
$aAccounts[$sEmail] = $oNewAccount->asTokenArray($oAccount);
}

View file

@ -21,6 +21,7 @@ class LdapMailAccountsConfig
public const CONFIG_FIELD_MAIL_ADDRESS_ADDITIONAL_ACCOUNT = "field_mail_address_additional_account";
public const CONFIG_BOOL_OVERWRITE_MAIL_ADDRESS_MAIN_ACCOUNT = "bool_overwrite_mail_address_main_account";
public const CONFIG_FIELD_MAIL_ADDRESS_MAIN_ACCOUNT = "field_mail_address_main_account";
public const CONFIG_BOOL_OVERWRITE_CRYPTKEY = "bool_overwrite_cryptkey";
public $server;
public $protocol;
@ -36,6 +37,7 @@ class LdapMailAccountsConfig
public $field_mail_address_main_account;
public $field_mail_address_additional_account;
public $bool_overwrite_mail_address_main_account;
public $bool_overwrite_cryptkey;
public static function MakeConfig(Plugin $config): LdapMailAccountsConfig
{
@ -54,6 +56,7 @@ class LdapMailAccountsConfig
$ldap->field_mail_address_additional_account = trim($config->Get("plugin", self::CONFIG_FIELD_MAIL_ADDRESS_ADDITIONAL_ACCOUNT));
$ldap->bool_overwrite_mail_address_main_account = $config->Get("plugin", self::CONFIG_BOOL_OVERWRITE_MAIL_ADDRESS_MAIN_ACCOUNT);
$ldap->field_mail_address_main_account = trim($config->Get("plugin", self::CONFIG_FIELD_MAIL_ADDRESS_MAIN_ACCOUNT));
$ldap->bool_overwrite_cryptkey = $config->Get("plugin", self::CONFIG_BOOL_OVERWRITE_CRYPTKEY);
return $ldap;
}

View file

@ -8,6 +8,8 @@ Version 2.0.0 changes the way additional mail accounts get their e-mail address:
Now it is also possible to overwrite the mail address of the main account: if a user logs into SnappyMail with a username and SnappyMail added the configured default domain the mail address of the main account could have been some not existing address like "username@default-domain.com". This could have happend when using the Nextcloud SnappyMail integration that offers an automatic login using the Nextcloud username.
The plugin now can be configured to overwrite the username or mail address used at login with a mail address found inside ldap.
Version 2.2.0 adds compatibility with SnappyMail 2.36.1 and later where some changes were introduced that made the plugin unusable. This version also adds the possibility to delete the .cryptkey file on evere login. For more information see the `Configuration` section below.
### Configuration
- Install and activate the plugin using the SnappyMail Admin Panel -> menu Extensions.
- Click on the gear symbol beside the plugin to open the configration dialog.
@ -20,4 +22,8 @@ The plugin now can be configured to overwrite the username or mail address used
Section `Overwrite mail address of main account` can be used to overwrite the username or mail address used at login with a value found in ldap. If activated, the username or mail address used at login will be looked up inside the `Username field` in ldap (for details see how a search for additional accounts is made). If the username is found, the value of the field `Mail address field for main account` will be used to overwrite the mail address of the main account.
`Overwrite user cryptkey` can be activated to prevent SnappyMail from asking the user for his old LDAP password when this password was changed or reseted. SnappyMail saves the passwords of the additional accounts by encrypting them using a cryptkey that is saved in the file `.cryptkey`. When the password of the main account changes, SnappyMail asks the user for the old password to reencrypt the keys with the new userpassword.
On a password change using ldap (or when the password has been forgotten by the user) this makes problems and asks the user to insert the old password. Therefore activating this option overwrites the .cryptkey file on login in order to always accept the actual ldap password of the user.
**ATTENTION:** This has side effects on pgp keys because these are also secured by the cryptkey and could therefore not be accessible anymore! See https://github.com/the-djmaze/snappymail/issues/1570#issuecomment-2085528061 . This has also an impact on additional mail accounts that aren't created by this plugin because without the cryptkey saved passwords of additional mail accounts can not be decrypted anymore.
**Important:** SnappyMail normally needs a mail address as username. This plugin handles some special circumstances (login with an ldap username, not a mail address) so that you can login to your IMAP server with the ldap username but send mails with a mail address connected to this ldap user.

View file

@ -12,11 +12,11 @@ class LdapMailAccountsPlugin extends AbstractPlugin
{
const
NAME = 'LDAP Mail Accounts',
VERSION = '2.1.1',
VERSION = '2.2.0',
AUTHOR = 'cm-schl',
URL = 'https://github.com/cm-sch',
RELEASE = '2024-03-16',
REQUIRED = '2.35.3',
RELEASE = '2024-05-28',
REQUIRED = '2.36.1',
CATEGORY = 'Accounts',
DESCRIPTION = 'Add additional mail accounts the SnappyMail user has access to by a LDAP query. Basing on the work of FWest98 (https://github.com/FWest98).';
@ -40,11 +40,13 @@ class LdapMailAccountsPlugin extends AbstractPlugin
* Overwrite the MainAccount mail address by looking up the new one in the ldap directory
*
* @param string &$sEmail
* @param string &$sLogin
* @param string &$sImapUser
* @param string &$sPassword
* @param string &$sSmtpUser
*/
public function overwriteMainAccountEmail(&$sEmail, &$sLogin)
public function overwriteMainAccountEmail(&$sEmail, &$sImapUser, &$sPassword, &$sSmtpUser)
{
$this->Manager()->Actions()->Logger()->Write("Login DATA: login: $sLogin email: $sEmail", \LOG_WARNING, "LDAP MAIL ACCOUNTS PLUGIN");
$this->Manager()->Actions()->Logger()->Write("Login DATA: login: $sImapUser email: $sEmail", \LOG_WARNING, "LDAP MAIL ACCOUNTS PLUGIN");
// Set up config
$config = LdapMailAccountsConfig::MakeConfig($this->Config());
@ -52,10 +54,10 @@ class LdapMailAccountsPlugin extends AbstractPlugin
if ($config->bool_overwrite_mail_address_main_account)
{
$oldapMailAccounts = new LdapMailAccounts($config, $this->Manager()->Actions()->Logger());
$oldapMailAccounts->overwriteEmail($sEmail, $sLogin);
$oldapMailAccounts->overwriteEmail($sEmail);
}
$this->Manager()->Actions()->Logger()->Write("Login DATA: login: $sLogin email: $sEmail", \LOG_WARNING, "LDAP MAIL ACCOUNTS PLUGIN");
$this->Manager()->Actions()->Logger()->Write("Login DATA: login: $sImapUser email: $sEmail", \LOG_WARNING, "LDAP MAIL ACCOUNTS PLUGIN");
}
// Function gets called by RainLoop/Actions/User.php
@ -92,6 +94,17 @@ class LdapMailAccountsPlugin extends AbstractPlugin
->SetDefaultValue("mail"),
]);
$groupAdditionalSettings = new \RainLoop\Plugins\PropertyCollection('Additional settings');
$groupAdditionalSettings->exchangeArray([
\RainLoop\Plugins\Property::NewInstance(LdapMailAccountsConfig::CONFIG_BOOL_OVERWRITE_CRYPTKEY)->SetLabel('Overwrite user cryptkey')
->SetType(\RainLoop\Enumerations\PluginPropertyType::BOOL)
->SetDescription("SnappyMail saves the passwords of the additional accounts by encrypting them using a cryptkey that is saved in the file \".cryptkey\". When the password of the main account changes, SnappyMail asks the user for the old password to reencrypt the keys with the new userpassword.
\nOn a password change using ldap (or when the password has been forgotten by the user) this makes problems and asks the user to insert the old password. Therefore activating this option overwrites the .cryptkey file on login in order to always accept the actual ldap password of the user.
\nATTENTION: This has side effects on pgp keys because these are also secured by the cryptkey and could therefore not be accessible anymore!
\nSee https://github.com/the-djmaze/snappymail/issues/1570#issuecomment-2085528061")
->SetDefaultValue(false),
]);
return [
\RainLoop\Plugins\Property::NewInstance(LdapMailAccountsConfig::CONFIG_SERVER)
->SetLabel("LDAP Server URL")
@ -171,8 +184,9 @@ class LdapMailAccountsPlugin extends AbstractPlugin
->SetDescription("The field containing the default sender name of the found additional mail account.")
->SetDefaultValue("displayName"),
$groupOverwriteMainAccount
$groupOverwriteMainAccount,
$groupAdditionalSettings
];
}
}

View file

@ -33,7 +33,9 @@ class Settings extends \MailSo\Net\ConnectSettings
$message_all_headers = false;
public string
$search_filter = '';
$search_filter = '',
$spam_headers = 'rspamd,spamassassin,bogofilter',
$virus_headers = 'rspamd,clamav';
public array
$disabled_capabilities = [];
@ -41,6 +43,8 @@ class Settings extends \MailSo\Net\ConnectSettings
public static function fromArray(array $aSettings) : self
{
$object = parent::fromArray($aSettings);
// Boolean options
$options = [
'expunge_all_on_delete',
'fast_simple_search',
@ -53,6 +57,8 @@ class Settings extends \MailSo\Net\ConnectSettings
$object->$option = !empty($aSettings[$option]);
}
}
// Integer options
$options = [
// 'body_text_limit',
// 'folder_list_limit',
@ -65,6 +71,18 @@ class Settings extends \MailSo\Net\ConnectSettings
}
}
// String options
$options = [
'search_filter',
'spam_headers',
'virus_headers',
];
foreach ($options as $option) {
if (isset($aSettings[$option])) {
$object->$option = (string) $aSettings[$option];
}
}
if (!empty($aSettings['disabled_capabilities']) && \is_array($aSettings['disabled_capabilities'])) {
$object->disabled_capabilities = $aSettings['disabled_capabilities'];
}
@ -119,6 +137,8 @@ class Settings extends \MailSo\Net\ConnectSettings
'message_all_headers' => $this->message_all_headers,
'message_list_limit' => $this->message_list_limit,
'search_filter' => $this->search_filter,
'spam_headers' => $this->spam_headers,
'virus_headers' => $this->virus_headers,
// 'thread_limit' => $this->thread_limit
'disabled_capabilities' => \array_values(\array_unique($this->disabled_capabilities))
]

View file

@ -76,19 +76,33 @@ class MailClient
MimeHeader::X_DKIM_AUTHENTICATION_RESULTS,
MimeHeader::LIST_UNSUBSCRIBE,
// https://autocrypt.org/level1.html#the-autocrypt-header
MimeHeader::AUTOCRYPT,
// SPAM
MimeHeader::X_SPAM_STATUS,
MimeHeader::X_SPAM_FLAG,
MimeHeader::X_SPAM_INFO,
MimeHeader::X_SPAMD_RESULT,
MimeHeader::X_BOGOSITY,
// Virus
MimeHeader::X_VIRUS,
MimeHeader::X_VIRUS_SCANNED,
MimeHeader::X_VIRUS_STATUS
MimeHeader::AUTOCRYPT
);
// SPAM
$spam_headers = \explode(',', $this->oImapClient->Settings->spam_headers);
if (\in_array('rspamd', $spam_headers)) {
$aHeaders[] = MimeHeader::X_SPAMD_RESULT;
}
if (\in_array('spamassassin', $spam_headers)) {
$aHeaders[] = MimeHeader::X_SPAM_STATUS;
$aHeaders[] = MimeHeader::X_SPAM_FLAG;
$aHeaders[] = MimeHeader::X_SPAM_INFO;
}
if (\in_array('bogofilter', $spam_headers)) {
$aHeaders[] = MimeHeader::X_BOGOSITY;
}
// Virus
$virus_headers = \explode(',', $this->oImapClient->Settings->virus_headers);
if (\in_array('rspamd', $virus_headers)) {
$aHeaders[] = MimeHeader::X_VIRUS;
}
if (\in_array('clamav', $virus_headers)) {
$aHeaders[] = MimeHeader::X_VIRUS_SCANNED;
$aHeaders[] = MimeHeader::X_VIRUS_STATUS;
}
\RainLoop\Api::Actions()->Plugins()->RunHook('imap.message-headers', array(&$aHeaders));
return FetchType::BuildBodyCustomHeaderRequest($aHeaders, true);

View file

@ -506,7 +506,9 @@ class Message implements \JsonSerializable
'spamScore' => $this->bIsSpam ? 100 : $this->SpamScore,
'spamResult' => $this->sSpamResult,
'isSpam' => $this->bIsSpam,
// RainLoop had the date_from_headers option
'dateTimestamp' => $this->iHeaderTimeStampInUTC ?: $this->iInternalTimeStampInUTC,
'dateTimestampSource' => $this->iHeaderTimeStampInUTC ? 'header' : 'internal',
// \MailSo\Mime\EmailCollection
'from' => $this->oFrom,

View file

@ -67,8 +67,9 @@ trait AdminDomains
$this->GetActionParam('username'),
new \SnappyMail\SensitiveString('********')
);
$sEmail = $sCredentials['email'];
return $this->DefaultResponse(array(
'email' => $sCredentials['email'],
'email' => $sEmail,
'login' => $sCredentials['imapUser'],
'domain' => $sCredentials['domain'],
'whitelist' => $sCredentials['domain'] ? $sCredentials['domain']->ValidateWhiteList($sEmail) : null

View file

@ -96,7 +96,7 @@ class Application extends \RainLoop\Config\AbstractConfig
{
// Workarounds for the changed application structure
if ('webmail' === $sSectionKey) {
if ('language_admin' === $sSectionKey) {
if ('language_admin' === $sParamKey) {
$sSectionKey = 'admin_panel';
$sParamKey = 'language';
}
@ -137,6 +137,16 @@ class Application extends \RainLoop\Config\AbstractConfig
$sParamKey = 'json_response_write_limit';
}
}
if ('language' === $sParamKey) {
$aLang = \SnappyMail\L10n::getLanguages('admin_panel' === $sSectionKey);
$sLanguage = \strtr($mParamValue, '_', '-');
if (!\in_array($sLanguage, $aLang)) {
if (\str_contains($sLanguage, '-')) {
$sLanguage = \strtok($sLanguage, '-');
}
}
$mParamValue = \in_array($sLanguage, $aLang) ? $sLanguage : 'en';
}
parent::Set($sSectionKey, $sParamKey, $mParamValue);
}

View file

@ -59,12 +59,12 @@
"UNSEEN": "لم يقرأ",
"DATE": "التاريخ",
"DATE_ALL": "الكل",
"DATE_3_DAYS": "منذ 3 أيام",
"DATE_7_DAYS": "منذ أسبوع",
"DATE_MONTH": "منذ شهر",
"DATE_3_MONTHS": "منذ 3 أشهر",
"DATE_6_MONTHS": "منذ 6 أشهر",
"DATE_YEAR": "منذ سنة",
"SINCE_3_DAYS": "منذ 3 أيام",
"SINCE_7_DAYS": "منذ أسبوع",
"SINCE_MONTH": "منذ شهر",
"SINCE_3_MONTHS": "منذ 3 أشهر",
"SINCE_6_MONTHS": "منذ 6 أشهر",
"SINCE_YEAR": "منذ سنة",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Назад",
"BUTTON_UPDATE": "Абнавіць",
"NEW_DOMAIN_DESC": "Гэтая канфігурацыя дазволіць вам працаваць з <strong>%NAME%<\/strong> адрасамі.",
"WHITE_LIST_ALERT": "Спіс карыстальнікаў дамена да якіх дазволены доступ.\nВыкарыстоўвайце прабел у якасці раздзяляльніка.\n"
"WHITE_LIST_ALERT": "Спіс карыстальнікаў дамена да якіх дазволены доступ.\nВыкарыстоўвайце прабел у якасці раздзяляльніка.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Убудова",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Непрачытаныя",
"DATE": "Дата",
"DATE_ALL": "За ўвесь час",
"DATE_3_DAYS": "За тры дні",
"DATE_7_DAYS": "За тыдзень",
"DATE_MONTH": "За месяц",
"DATE_3_MONTHS": "За 3 месяцы",
"DATE_6_MONTHS": "За паўгода",
"DATE_YEAR": "За год",
"SINCE_3_DAYS": "За тры дні",
"SINCE_7_DAYS": "За тыдзень",
"SINCE_MONTH": "За месяц",
"SINCE_3_MONTHS": "За 3 месяцы",
"SINCE_6_MONTHS": "За паўгода",
"SINCE_YEAR": "За год",
"SUBFOLDERS": "Падкаталогі",
"SUBFOLDERS_NONE": "Нічога",
"SUBFOLDERS_SUBTREE": "Усе",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Невидяно",
"DATE": "Дата",
"DATE_ALL": "Всички",
"DATE_3_DAYS": "До 3 дена",
"DATE_7_DAYS": "До 1 седмица",
"DATE_MONTH": "До 1 месец",
"DATE_3_MONTHS": "До 3 месеца",
"DATE_6_MONTHS": "До 6 месеца",
"DATE_YEAR": "До 1 година",
"SINCE_3_DAYS": "До 3 дена",
"SINCE_7_DAYS": "До 1 седмица",
"SINCE_MONTH": "До 1 месец",
"SINCE_3_MONTHS": "До 3 месеца",
"SINCE_6_MONTHS": "До 6 месеца",
"SINCE_YEAR": "До 1 година",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Zpět",
"BUTTON_UPDATE": "Aktualizovat",
"NEW_DOMAIN_DESC": "Konfigurace této domény umožní používat <strong>%NAME%<\/strong> adresy.",
"WHITE_LIST_ALERT": "Seznam domén s povoleným uživatelským přístupem\nPoužijte mezeru pro jejich oddělení.\n"
"WHITE_LIST_ALERT": "Seznam domén s povoleným uživatelským přístupem\nPoužijte mezeru pro jejich oddělení.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Nepřečtené",
"DATE": "Datum",
"DATE_ALL": "Kdykoliv",
"DATE_3_DAYS": "Ne starší než 3 dny",
"DATE_7_DAYS": "Ne starší než týden",
"DATE_MONTH": "Ne starší než měsíc",
"DATE_3_MONTHS": "Ne starší než 3 měsíce",
"DATE_6_MONTHS": "Ne starší než 6 měsíců",
"DATE_YEAR": "Ne starší než 1 rok",
"SINCE_3_DAYS": "Ne starší než 3 dny",
"SINCE_7_DAYS": "Ne starší než týden",
"SINCE_MONTH": "Ne starší než měsíc",
"SINCE_3_MONTHS": "Ne starší než 3 měsíce",
"SINCE_6_MONTHS": "Ne starší než 6 měsíců",
"SINCE_YEAR": "Ne starší než 1 rok",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tilbage",
"BUTTON_UPDATE": "Opdater",
"NEW_DOMAIN_DESC": "Denne domæne konfiguration tillader <strong>%NAME%<\/strong> e-mail adresser.",
"WHITE_LIST_ALERT": "Liste med godkendte domæne for webmail opsætning.\nBrug mellemrum til at separere domæner.\n"
"WHITE_LIST_ALERT": "Liste med godkendte domæne for webmail opsætning.\nBrug mellemrum til at separere domæner.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tilføjelse",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ulæst",
"DATE": "Dato",
"DATE_ALL": "Alle",
"DATE_3_DAYS": "Nyere end 3 dage",
"DATE_7_DAYS": "Nyere end 1 uge",
"DATE_MONTH": "Nyere end 1 måned",
"DATE_3_MONTHS": "Nyere end 3 måneder",
"DATE_6_MONTHS": "Nyere end 6 måneder",
"DATE_YEAR": "Nyere end 1 år",
"SINCE_3_DAYS": "Nyere end 3 dage",
"SINCE_7_DAYS": "Nyere end 1 uge",
"SINCE_MONTH": "Nyere end 1 måned",
"SINCE_3_MONTHS": "Nyere end 3 måneder",
"SINCE_6_MONTHS": "Nyere end 6 måneder",
"SINCE_YEAR": "Nyere end 1 år",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Zurück",
"BUTTON_UPDATE": "Aktualisieren",
"NEW_DOMAIN_DESC": "Diese Domain Konfiguration wird es dir möglich machen mit <strong>%NAME%<\/strong> Mailadressen zu arbeiten.",
"WHITE_LIST_ALERT": "Liste der User, die Webmail abrufen darf.\nVerwenden Sie Leerzeichen als Trennsymbol."
"WHITE_LIST_ALERT": "Liste der User, die Webmail abrufen darf.\nVerwenden Sie Leerzeichen als Trennsymbol.",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Erweiterung",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ungelesen",
"DATE": "Datum",
"DATE_ALL": "Alle",
"DATE_3_DAYS": "Nicht älter als 3 Tage",
"DATE_7_DAYS": "Nicht älter als 1 Woche",
"DATE_MONTH": "Nicht älter als 1 Monat",
"DATE_3_MONTHS": "Nicht älter als 3 Monate",
"DATE_6_MONTHS": "Nicht älter als 6 Monate",
"DATE_YEAR": "Nicht älter als 1 Jahr",
"SINCE_3_DAYS": "Nicht älter als 3 Tage",
"SINCE_7_DAYS": "Nicht älter als 1 Woche",
"SINCE_MONTH": "Nicht älter als 1 Monat",
"SINCE_3_MONTHS": "Nicht älter als 3 Monate",
"SINCE_6_MONTHS": "Nicht älter als 6 Monate",
"SINCE_YEAR": "Nicht älter als 1 Jahr",
"SUBFOLDERS": "Unterordner",
"SUBFOLDERS_NONE": "Keine",
"SUBFOLDERS_SUBTREE": "Alle",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Δεν έχουν διαβαστεί",
"DATE": "Ημερομηνία",
"DATE_ALL": "Όλα",
"DATE_3_DAYS": "Έως 3 ημέρες πρίν",
"DATE_7_DAYS": "Έως 1 εβδομάδα πριν",
"DATE_MONTH": "Έως 1 μήνα πριν",
"DATE_3_MONTHS": "Έως 3 μήνες πριν",
"DATE_6_MONTHS": "Έως 6 μήνες πριν",
"DATE_YEAR": "Έως 1 χρόνο πριν",
"SINCE_3_DAYS": "Έως 3 ημέρες πρίν",
"SINCE_7_DAYS": "Έως 1 εβδομάδα πριν",
"SINCE_MONTH": "Έως 1 μήνα πριν",
"SINCE_3_MONTHS": "Έως 3 μήνες πριν",
"SINCE_6_MONTHS": "Έως 6 μήνες πριν",
"SINCE_YEAR": "Έως 1 χρόνο πριν",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Back",
"BUTTON_UPDATE": "Update",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.",
"WHITE_LIST_ALERT": "List of domain users webmail is allowed to access.\nUse a space as delimiter.\n"
"WHITE_LIST_ALERT": "List of domain users webmail is allowed to access.\nUse a space as delimiter.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extension",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Unseen",
"DATE": "Date",
"DATE_ALL": "All",
"DATE_3_DAYS": "Up to 3 days old",
"DATE_7_DAYS": "Up to 1 week old",
"DATE_MONTH": "Up to 1 month old",
"DATE_3_MONTHS": "Up to 3 months old",
"DATE_6_MONTHS": "Up to 6 months old",
"DATE_YEAR": "Up to 1 year old",
"SINCE_3_DAYS": "Up to 3 days old",
"SINCE_7_DAYS": "Up to 1 week old",
"SINCE_MONTH": "Up to 1 month old",
"SINCE_3_MONTHS": "Up to 3 months old",
"SINCE_6_MONTHS": "Up to 6 months old",
"SINCE_YEAR": "Up to 1 year old",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Volver",
"BUTTON_UPDATE": "Actualizar",
"NEW_DOMAIN_DESC": "Esta configuración de Dominio le permitirá trabajar con direcciones de correo tipo @<strong>%NAME%<\/strong>.",
"WHITE_LIST_ALERT": "Lista de dominios con que los usuarios pueden ingresar.\nUse un espacio como delimitador.\n"
"WHITE_LIST_ALERT": "Lista de dominios con que los usuarios pueden ingresar.\nUse un espacio como delimitador.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensión",

View file

@ -59,12 +59,12 @@
"UNSEEN": "No leído",
"DATE": "Fecha",
"DATE_ALL": "Todo",
"DATE_3_DAYS": "Hasta 3 días de antigüedad",
"DATE_7_DAYS": "Hasta una semana de antigüedad",
"DATE_MONTH": "Hasta 1 mes de antigüedad",
"DATE_3_MONTHS": "Hasta 3 meses de antigüedad",
"DATE_6_MONTHS": "Hasta 6 meses de antigüedad",
"DATE_YEAR": "Hasta 1 año de antigüedad",
"SINCE_3_DAYS": "Hasta 3 días de antigüedad",
"SINCE_7_DAYS": "Hasta una semana de antigüedad",
"SINCE_MONTH": "Hasta 1 mes de antigüedad",
"SINCE_3_MONTHS": "Hasta 3 meses de antigüedad",
"SINCE_6_MONTHS": "Hasta 6 meses de antigüedad",
"SINCE_YEAR": "Hasta 1 año de antigüedad",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Lugemata",
"DATE": "Kuupäev",
"DATE_ALL": "Kõik",
"DATE_3_DAYS": "Kuni 3 päeva vanune",
"DATE_7_DAYS": "Kuni 1 nädal vanune",
"DATE_MONTH": "Kuni 1 kuu vanune",
"DATE_3_MONTHS": "Kuni 3 kuu vanune ",
"DATE_6_MONTHS": "Kuni 6 kuu vanune",
"DATE_YEAR": "Kuni 1 aasta vanune",
"SINCE_3_DAYS": "Kuni 3 päeva vanune",
"SINCE_7_DAYS": "Kuni 1 nädal vanune",
"SINCE_MONTH": "Kuni 1 kuu vanune",
"SINCE_3_MONTHS": "Kuni 3 kuu vanune ",
"SINCE_6_MONTHS": "Kuni 6 kuu vanune",
"SINCE_YEAR": "Kuni 1 aasta vanune",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Atzera",
"BUTTON_UPDATE": "Eguneratu",
"NEW_DOMAIN_DESC": "Domeinu honen konfigurazioak <strong>%NAME%<\/strong> email kontuarekin lan egitea ahalbideratuko dizu.",
"WHITE_LIST_ALERT": "Webmailak sartzeko baimena duen domeinuko erabiltzaileen zerrenda.\nErabili hutsunea banatzaile bezala.\n"
"WHITE_LIST_ALERT": "Webmailak sartzeko baimena duen domeinuko erabiltzaileen zerrenda.\nErabili hutsunea banatzaile bezala.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Gehigarria",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Irakurri gabe",
"DATE": "Data",
"DATE_ALL": "Denak",
"DATE_3_DAYS": "3 egun arterakoak",
"DATE_7_DAYS": "Astebetako arterakoak",
"DATE_MONTH": "Hilabete arterakoak",
"DATE_3_MONTHS": "3 hilabete arterakoak",
"DATE_6_MONTHS": "6 hilabete arterakoak",
"DATE_YEAR": "Urtebete arterakoak",
"SINCE_3_DAYS": "3 egun arterakoak",
"SINCE_7_DAYS": "Astebetako arterakoak",
"SINCE_MONTH": "Hilabete arterakoak",
"SINCE_3_MONTHS": "3 hilabete arterakoak",
"SINCE_6_MONTHS": "6 hilabete arterakoak",
"SINCE_YEAR": "Urtebete arterakoak",
"SUBFOLDERS": "Azpikarpetak",
"SUBFOLDERS_NONE": "Bat ere ez",
"SUBFOLDERS_SUBTREE": "Denak",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "برگشت",
"BUTTON_UPDATE": "بروزرسانی",
"NEW_DOMAIN_DESC": "این تنظیمات دامنه به شما اجازه کار کردن با پست الکترونیک <strong>%NAME%<\/strong> را می‌دهد.",
"WHITE_LIST_ALERT": "لیستی از دامنه‌ها که کاربران وب‌میل می‌توانند به آنها دسترسی داشته باشند.\nاز فاصله جهت جدا کردن استفاده کنید.\n"
"WHITE_LIST_ALERT": "لیستی از دامنه‌ها که کاربران وب‌میل می‌توانند به آنها دسترسی داشته باشند.\nاز فاصله جهت جدا کردن استفاده کنید.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "افزونه",

View file

@ -59,12 +59,12 @@
"UNSEEN": "خوانده نشده",
"DATE": "تاریخ",
"DATE_ALL": "همه",
"DATE_3_DAYS": "تا 3 روز گذشته",
"DATE_7_DAYS": "تا 1 هفته گذشته",
"DATE_MONTH": "تا 1 ماه گذشته",
"DATE_3_MONTHS": "تا 3 ماه گذشته",
"DATE_6_MONTHS": "تا 6 ماه گذشته",
"DATE_YEAR": "تا 1 سال گذشته",
"SINCE_3_DAYS": "تا 3 روز گذشته",
"SINCE_7_DAYS": "تا 1 هفته گذشته",
"SINCE_MONTH": "تا 1 ماه گذشته",
"SINCE_3_MONTHS": "تا 3 ماه گذشته",
"SINCE_6_MONTHS": "تا 6 ماه گذشته",
"SINCE_YEAR": "تا 1 سال گذشته",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Takaisin",
"BUTTON_UPDATE": "Päivitä",
"NEW_DOMAIN_DESC": "Tämän verkkotunnuksen asetukset sallivat käyttää <strong>%NAME%<strong> säkhöpostiosoitteita.",
"WHITE_LIST_ALERT": "Lista domain käyttäjistä joihin webmaililla on oikeus.\nErottele välilyönnillä.\n"
"WHITE_LIST_ALERT": "Lista domain käyttäjistä joihin webmaililla on oikeus.\nErottele välilyönnillä.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Lisäosa",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ei luettu",
"DATE": "Pvm",
"DATE_ALL": "Kaikki",
"DATE_3_DAYS": "3 päivän ajalta",
"DATE_7_DAYS": "1 viikon ajalta",
"DATE_MONTH": "1 kk ajalta",
"DATE_3_MONTHS": "3 kk ajalta",
"DATE_6_MONTHS": "6 kk ajalta",
"DATE_YEAR": "1 vuoden ajalta",
"SINCE_3_DAYS": "3 päivän ajalta",
"SINCE_7_DAYS": "1 viikon ajalta",
"SINCE_MONTH": "1 kk ajalta",
"SINCE_3_MONTHS": "3 kk ajalta",
"SINCE_6_MONTHS": "6 kk ajalta",
"SINCE_YEAR": "1 vuoden ajalta",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Retour",
"BUTTON_UPDATE": "Modifier",
"NEW_DOMAIN_DESC": "Cette configuration de domaine vous permettra de travailler avec <strong>%NAME%<\/strong> dans les adresses électroniques.",
"WHITE_LIST_ALERT": "Liste des utilisateurs du domaine auxquels le webmail est autorisé à accéder.\nUtilisez un espace comme séparateur."
"WHITE_LIST_ALERT": "Liste des utilisateurs du domaine auxquels le webmail est autorisé à accéder.\nUtilisez un espace comme séparateur.",
"VALID_SPAM_HEADERS": "En-têtes SPAM valides",
"VALID_VIRUS_HEADERS": "En-têtes de virus valides"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extension",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Non lu",
"DATE": "Date",
"DATE_ALL": "Tous",
"DATE_3_DAYS": "Jusqu'à 3 jours",
"DATE_7_DAYS": "Jusqu'à 1 semaine",
"DATE_MONTH": "Jusqu'à 1 mois",
"DATE_3_MONTHS": "Jusqu'à 3 mois",
"DATE_6_MONTHS": "Jusqu'à 6 mois",
"DATE_YEAR": "Jusqu'à 1 an",
"SINCE_3_DAYS": "Jusqu'à 3 jours",
"SINCE_7_DAYS": "Jusqu'à 1 semaine",
"SINCE_MONTH": "Jusqu'à 1 mois",
"SINCE_3_MONTHS": "Jusqu'à 3 mois",
"SINCE_6_MONTHS": "Jusqu'à 6 mois",
"SINCE_YEAR": "Jusqu'à 1 an",
"SUBFOLDERS": "Sous-dossiers",
"SUBFOLDERS_NONE": "Aucun",
"SUBFOLDERS_SUBTREE": "Tous",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Vissza",
"BUTTON_UPDATE": "Frissítés",
"NEW_DOMAIN_DESC": "Ez a domain konfiguráció lehetővé teszi a <strong>%NAME%<\/strong> email címek használatát.",
"WHITE_LIST_ALERT": "Hozzáféréshez engedélyezett domainek listája.\nElválasztáshoz használd a szóközt.\n"
"WHITE_LIST_ALERT": "Hozzáféréshez engedélyezett domainek listája.\nElválasztáshoz használd a szóközt.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Bővítményt",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Észrevétlen",
"DATE": "Dátum",
"DATE_ALL": "Összes",
"DATE_3_DAYS": "Legfeljebb 3 napos",
"DATE_7_DAYS": "Legfeljebb 1 hetes",
"DATE_MONTH": "Legfeljebb 1 hónapos",
"DATE_3_MONTHS": "Legfeljebb 3 hónapos",
"DATE_6_MONTHS": "Legfeljebb 6 hónapos",
"DATE_YEAR": "Legfeljebb 1 éves",
"SINCE_3_DAYS": "Legfeljebb 3 napos",
"SINCE_7_DAYS": "Legfeljebb 1 hetes",
"SINCE_MONTH": "Legfeljebb 1 hónapos",
"SINCE_3_MONTHS": "Legfeljebb 3 hónapos",
"SINCE_6_MONTHS": "Legfeljebb 6 hónapos",
"SINCE_YEAR": "Legfeljebb 1 éves",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Kembali",
"BUTTON_UPDATE": "Perbarui",
"NEW_DOMAIN_DESC": "Domain ini mengizinkan anda bekerja dengan alamat email juga<strong>%NAME%<\/strong> ",
"WHITE_LIST_ALERT": "Daftar domain webmail user yang diizinkan diakses.\nGunakan spasi untuk pemisahnya\n"
"WHITE_LIST_ALERT": "Daftar domain webmail user yang diizinkan diakses.\nGunakan spasi untuk pemisahnya\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Belum dilihat",
"DATE": "Tanggal",
"DATE_ALL": "Semua",
"DATE_3_DAYS": "Sudah 3 hari lalu",
"DATE_7_DAYS": "Sudah 1 bulan lalu",
"DATE_MONTH": "Lebih dari 1 bulan lalu",
"DATE_3_MONTHS": "Lebih dari 3 bulan lalu",
"DATE_6_MONTHS": "Lebih dari 6 bulan lalu",
"DATE_YEAR": "Lebih dari 1 tahun lalu",
"SINCE_3_DAYS": "Sudah 3 hari lalu",
"SINCE_7_DAYS": "Sudah 1 bulan lalu",
"SINCE_MONTH": "Lebih dari 1 bulan lalu",
"SINCE_3_MONTHS": "Lebih dari 3 bulan lalu",
"SINCE_6_MONTHS": "Lebih dari 6 bulan lalu",
"SINCE_YEAR": "Lebih dari 1 tahun lalu",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ólesið",
"DATE": "Dagsetning",
"DATE_ALL": "Allt",
"DATE_3_DAYS": "Allt að 3 daga gömlu",
"DATE_7_DAYS": "Allt að viku gömlu",
"DATE_MONTH": "Allt að mánaðar gömlu",
"DATE_3_MONTHS": "Allt að 3 mánaða gömlu",
"DATE_6_MONTHS": "Allt að 6 mánaða gömlu",
"DATE_YEAR": "Allt að 1 árs gömlu",
"SINCE_3_DAYS": "Allt að 3 daga gömlu",
"SINCE_7_DAYS": "Allt að viku gömlu",
"SINCE_MONTH": "Allt að mánaðar gömlu",
"SINCE_3_MONTHS": "Allt að 3 mánaða gömlu",
"SINCE_6_MONTHS": "Allt að 6 mánaða gömlu",
"SINCE_YEAR": "Allt að 1 árs gömlu",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Indietro",
"BUTTON_UPDATE": "Aggiorna",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.",
"WHITE_LIST_ALERT": "Lista degli utenti del dominio ai quali webmail può accedere.\nUsa uno spazio come delimitatore."
"WHITE_LIST_ALERT": "Lista degli utenti del dominio ai quali webmail può accedere.\nUsa uno spazio come delimitatore.",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Estensione",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Non letti",
"DATE": "Data",
"DATE_ALL": "Tutte",
"DATE_3_DAYS": "Meno di 3 giorni fa",
"DATE_7_DAYS": "Meno di una settimana fa",
"DATE_MONTH": "Meno di un mese fa",
"DATE_3_MONTHS": "Meno di 3 mesi fa",
"DATE_6_MONTHS": "Meno di 6 mesi fa",
"DATE_YEAR": "Meno di un anno fa",
"SINCE_3_DAYS": "Meno di 3 giorni fa",
"SINCE_7_DAYS": "Meno di una settimana fa",
"SINCE_MONTH": "Meno di un mese fa",
"SINCE_3_MONTHS": "Meno di 3 mesi fa",
"SINCE_6_MONTHS": "Meno di 6 mesi fa",
"SINCE_YEAR": "Meno di un anno fa",
"SUBFOLDERS": "Sottocartelle",
"SUBFOLDERS_NONE": "Nessuna",
"SUBFOLDERS_SUBTREE": "Tutte",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "戻る",
"BUTTON_UPDATE": "更新",
"NEW_DOMAIN_DESC": "このドメイン設定を使用すると、<strong>%NAME%<\/strong>メールアドレスで動作するようになります。",
"WHITE_LIST_ALERT": "ドメインの一覧は、Webメールのアクセスを許可されています。\n区切り文字としてスペースを使用してください。\n"
"WHITE_LIST_ALERT": "ドメインの一覧は、Webメールのアクセスを許可されています。\n区切り文字としてスペースを使用してください。\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "プラグイン",

View file

@ -59,12 +59,12 @@
"UNSEEN": "未読メール",
"DATE": "日付",
"DATE_ALL": "全て",
"DATE_3_DAYS": "3日前まで",
"DATE_7_DAYS": "1週間前まで",
"DATE_MONTH": "1ヶ月前まで",
"DATE_3_MONTHS": "3ヶ月前まで",
"DATE_6_MONTHS": "6ヶ月前まで",
"DATE_YEAR": "1年前まで",
"SINCE_3_DAYS": "3日前まで",
"SINCE_7_DAYS": "1週間前まで",
"SINCE_MONTH": "1ヶ月前まで",
"SINCE_3_MONTHS": "3ヶ月前まで",
"SINCE_6_MONTHS": "6ヶ月前まで",
"SINCE_YEAR": "1年前まで",
"SUBFOLDERS": "サブフォルダ",
"SUBFOLDERS_NONE": "なし",
"SUBFOLDERS_SUBTREE": "全て",

View file

@ -59,12 +59,12 @@
"UNSEEN": "읽지 않음",
"DATE": "날짜",
"DATE_ALL": "모두",
"DATE_3_DAYS": "3일 이내",
"DATE_7_DAYS": "1주일 이내",
"DATE_MONTH": "1개월 이내",
"DATE_3_MONTHS": "3개월 이내",
"DATE_6_MONTHS": "6개월 이내",
"DATE_YEAR": "1년 이내",
"SINCE_3_DAYS": "3일 이내",
"SINCE_7_DAYS": "1주일 이내",
"SINCE_MONTH": "1개월 이내",
"SINCE_3_MONTHS": "3개월 이내",
"SINCE_6_MONTHS": "6개월 이내",
"SINCE_YEAR": "1년 이내",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Atgal",
"BUTTON_UPDATE": "Atnaujinti",
"NEW_DOMAIN_DESC": "Šie nustatymai leis jums dirbti su <strong>%NAME%<\/strong> domeno pašto adresais.",
"WHITE_LIST_ALERT": "Domeno vartotojų sąrašas, kuriems leista naudotis web paštu.\nNaudokite tarpo simbolį kaip skyriklį.\n"
"WHITE_LIST_ALERT": "Domeno vartotojų sąrašas, kuriems leista naudotis web paštu.\nNaudokite tarpo simbolį kaip skyriklį.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Įskiepis",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Neskaitytas",
"DATE": "Data",
"DATE_ALL": "Visi",
"DATE_3_DAYS": "Nesenesni kaip 3 dienų",
"DATE_7_DAYS": "Nesenesni kaip 1 savaitės",
"DATE_MONTH": "Nesenesni kaip 1 mėnesio",
"DATE_3_MONTHS": "Nesenesni kaip 3 mėnesių",
"DATE_6_MONTHS": "Nesenesni kaip 6 mėnesių",
"DATE_YEAR": "Nesenesni kaip 1 metų",
"SINCE_3_DAYS": "Nesenesni kaip 3 dienų",
"SINCE_7_DAYS": "Nesenesni kaip 1 savaitės",
"SINCE_MONTH": "Nesenesni kaip 1 mėnesio",
"SINCE_3_MONTHS": "Nesenesni kaip 3 mėnesių",
"SINCE_6_MONTHS": "Nesenesni kaip 6 mėnesių",
"SINCE_YEAR": "Nesenesni kaip 1 metų",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Unseen",
"DATE": "Datums",
"DATE_ALL": "Viss periods",
"DATE_3_DAYS": "Līdz 3 dienas vecs",
"DATE_7_DAYS": "Līdz 1 nedēļu vecs",
"DATE_MONTH": "Līdz 1 mēnesi vecs",
"DATE_3_MONTHS": "Līdz 3 mēnešus vecs",
"DATE_6_MONTHS": "Līdz 6 mēnešus vecs",
"DATE_YEAR": "Līdz 1 gadu vecs",
"SINCE_3_DAYS": "Līdz 3 dienas vecs",
"SINCE_7_DAYS": "Līdz 1 nedēļu vecs",
"SINCE_MONTH": "Līdz 1 mēnesi vecs",
"SINCE_3_MONTHS": "Līdz 3 mēnešus vecs",
"SINCE_6_MONTHS": "Līdz 6 mēnešus vecs",
"SINCE_YEAR": "Līdz 1 gadu vecs",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tilbake",
"BUTTON_UPDATE": "Oppdater",
"NEW_DOMAIN_DESC": "Dette domeneoppsettet lar deg jobbe med e-postadresser ved <strong>%NAME%<\/strong>.",
"WHITE_LIST_ALERT": "Liste over domenebrukere som programmet skal ha tilgang til.\nHold verdier adskilt med mellomrom."
"WHITE_LIST_ALERT": "Liste over domenebrukere som programmet skal ha tilgang til.\nHold verdier adskilt med mellomrom.",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tillegg",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ulest",
"DATE": "Dato",
"DATE_ALL": "Alle",
"DATE_3_DAYS": "Inntil 3 dager gamle",
"DATE_7_DAYS": "Inntil 1 uke gamle",
"DATE_MONTH": "Inntil 1 måned gamle",
"DATE_3_MONTHS": "Inntil 3 måneder gamle",
"DATE_6_MONTHS": "Inntil 6 måneder gamle",
"DATE_YEAR": "Inntil 1 år gamle",
"SINCE_3_DAYS": "Inntil 3 dager gamle",
"SINCE_7_DAYS": "Inntil 1 uke gamle",
"SINCE_MONTH": "Inntil 1 måned gamle",
"SINCE_3_MONTHS": "Inntil 3 måneder gamle",
"SINCE_6_MONTHS": "Inntil 6 måneder gamle",
"SINCE_YEAR": "Inntil 1 år gamle",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "Alle",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Terug",
"BUTTON_UPDATE": "Update",
"NEW_DOMAIN_DESC": "Dit domein stelt u in staat om met <strong>%NAME%<\/strong> e-mail adressen te werken.",
"WHITE_LIST_ALERT": "Lijst van gebruikers die dit domein mogen gebruiken.\nGebruik een spatie als scheidingsteken."
"WHITE_LIST_ALERT": "Lijst van gebruikers die dit domein mogen gebruiken.\nGebruik een spatie als scheidingsteken.",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensie",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Ongelezen",
"DATE": "Datum",
"DATE_ALL": "Alles",
"DATE_3_DAYS": "Tot 3 dagen oud",
"DATE_7_DAYS": "Tot 1 week oud",
"DATE_MONTH": "Tot 1 maand oud",
"DATE_3_MONTHS": "Tot 3 maanden oud",
"DATE_6_MONTHS": "Tot 6 maanden oud",
"DATE_YEAR": "Tot 1 jaar oud",
"SINCE_3_DAYS": "Tot 3 dagen oud",
"SINCE_7_DAYS": "Tot 1 week oud",
"SINCE_MONTH": "Tot 1 maand oud",
"SINCE_3_MONTHS": "Tot 3 maanden oud",
"SINCE_6_MONTHS": "Tot 6 maanden oud",
"SINCE_YEAR": "Tot 1 jaar oud",
"SUBFOLDERS": "Submappen",
"SUBFOLDERS_NONE": "Geen",
"SUBFOLDERS_SUBTREE": "Alle",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Wstecz",
"BUTTON_UPDATE": "Zaktualizuj",
"NEW_DOMAIN_DESC": "Konfiguracja tej domeny pozwala na pracę z adresami e-mail: <strong>%NAME%<\/strong>",
"WHITE_LIST_ALERT": "Lista użytkowników domeny, którzy mogą uzyskać dostęp z tego webmaila.\nUżyj spacji do rozdzielenia.\n"
"WHITE_LIST_ALERT": "Lista użytkowników domeny, którzy mogą uzyskać dostęp z tego webmaila.\nUżyj spacji do rozdzielenia.\n",
"VALID_SPAM_HEADERS": "Prawidłowe nagłówki informacji o SPAMie",
"VALID_VIRUS_HEADERS": "Prawidłowe nagłówki informacji o wirusach"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Wtyczka",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Nieprzeczytana",
"DATE": "Data",
"DATE_ALL": "Wszystkie",
"DATE_3_DAYS": "do 3 dni",
"DATE_7_DAYS": "do tygodnia",
"DATE_MONTH": "do miesiąca",
"DATE_3_MONTHS": "do 3 miesięcy",
"DATE_6_MONTHS": "do 6 miesięcy",
"DATE_YEAR": "do roku",
"SINCE_3_DAYS": "do 3 dni",
"SINCE_7_DAYS": "do tygodnia",
"SINCE_MONTH": "do miesiąca",
"SINCE_3_MONTHS": "do 3 miesięcy",
"SINCE_6_MONTHS": "do 6 miesięcy",
"SINCE_YEAR": "do roku",
"SUBFOLDERS": "Podfoldery",
"SUBFOLDERS_NONE": "Brak",
"SUBFOLDERS_SUBTREE": "Wszystkie",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Voltar",
"BUTTON_UPDATE": "Atualizar",
"NEW_DOMAIN_DESC": "Esta configuração de domínio lhe permitirá trabalhar com endereços de e-mail do <strong>%NAME%<\/strong>.",
"WHITE_LIST_ALERT": "Filtrar com lista dos únicos usuários do domínio que terão acesso ao webmail.\nUse um espaço como delimitador.\n"
"WHITE_LIST_ALERT": "Filtrar com lista dos únicos usuários do domínio que terão acesso ao webmail.\nUse um espaço como delimitador.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Não Lida",
"DATE": "Data",
"DATE_ALL": "Qualquer",
"DATE_3_DAYS": "Até 3 dias atrás",
"DATE_7_DAYS": "Até 1 semana atrás",
"DATE_MONTH": "Até 1 mês atrás",
"DATE_3_MONTHS": "Até 3 meses atrás",
"DATE_6_MONTHS": "Até 6 meses atrás",
"DATE_YEAR": "Até 1 ano atrás",
"SINCE_3_DAYS": "Até 3 dias atrás",
"SINCE_7_DAYS": "Até 1 semana atrás",
"SINCE_MONTH": "Até 1 mês atrás",
"SINCE_3_MONTHS": "Até 3 meses atrás",
"SINCE_6_MONTHS": "Até 6 meses atrás",
"SINCE_YEAR": "Até 1 ano atrás",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -38,7 +38,7 @@
"LABEL_ALLOW_THEMES_ON_SETTINGS": "Permitir personalização da interface nas definições",
"LABEL_ALLOW_BACKGROUND_ON_SETTINGS": "Permitir alterar a imagem de fundo nas definições",
"LABEL_SHOW_THUMBNAILS": "Mostrar miniaturas (anexos)",
"LEGEND_MAIN": "Prinicpal",
"LEGEND_MAIN": "Principal",
"LABEL_ATTACHMENT_SIZE_LIMIT": "Tamanho limite dos anexos",
"LABEL_ALLOW_ADDITIONAL_ACCOUNTS": "Permitir contas adicionais",
"LABEL_ALLOW_IDENTITIES": "Permitir múltiplas identidades",
@ -146,7 +146,9 @@
"BUTTON_BACK": "Voltar",
"BUTTON_UPDATE": "Atualizar",
"NEW_DOMAIN_DESC": "Esta configuração de domínio vai permitir trabalhar com endereços email <strong>%NAME%<\/strong>.",
"WHITE_LIST_ALERT": "Lista de utilizadores do domínio aos quais o webmail terá permissão para aceder.\nUsar espaços para delimitar.\n"
"WHITE_LIST_ALERT": "Lista de utilizadores do domínio aos quais o webmail terá permissão para aceder.\nUsar espaços para delimitar.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensão",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Não lida",
"DATE": "Data",
"DATE_ALL": "Qualquer",
"DATE_3_DAYS": "Até 3 dias atrás",
"DATE_7_DAYS": "Até 1 semana atrás",
"DATE_MONTH": "Até 1 mês atrás",
"DATE_3_MONTHS": "Até 3 meses atrás",
"DATE_6_MONTHS": "Até 6 meses atrás",
"DATE_YEAR": "Até 1 ano atrás",
"SINCE_3_DAYS": "Até 3 dias atrás",
"SINCE_7_DAYS": "Até 1 semana atrás",
"SINCE_MONTH": "Até 1 mês atrás",
"SINCE_3_MONTHS": "Até 3 meses atrás",
"SINCE_6_MONTHS": "Até 6 meses atrás",
"SINCE_YEAR": "Até 1 ano atrás",
"SUBFOLDERS": "Subpastas",
"SUBFOLDERS_NONE": "Nenhuma",
"SUBFOLDERS_SUBTREE": "Todas",
@ -140,7 +140,7 @@
"MENU_VIEW_ORIGINAL": "Mostrar original",
"HTML_VIEW": "Ver mensagem em HTML",
"PLAIN_VIEW": "Ver mensagem em texto simples",
"SWAP_COLORS": "Swap default (background)color",
"SWAP_COLORS": "Trocar a cor (de fundo) predefinida",
"MENU_DOWNLOAD_ORIGINAL": "Transferir como ficheiro .eml",
"MENU_FILTER_SIMILAR": "Filtrar mensagens semelhantes a esta",
"MENU_PRINT": "Imprimir",
@ -283,7 +283,7 @@
"VERIFY": "Validar",
"GOOD_SIGNATURE": "Boa assinatura de %USER%",
"ERROR": "Erro %TYPE%: %ERROR%",
"CREATE_SELF_SIGNED": "Criar auto-assinado",
"CREATE_SELF_SIGNED": "Criar autoassinado",
"VALID_UNTIL": "Válido até",
"PRIVATE_KEY": "Chave privada",
"CHANGE_PASS": "Alterar frase secreta",
@ -328,13 +328,13 @@
"SELECT_ACTION_VACATION_MESSAGE": "Mensagem de férias",
"SELECT_ACTION_DISCARD": "Descartar",
"SELECT_FIELD_RECIPIENTS": "Destinatários (Para ou Cc)",
"SELECT_FIELD_HEADER": "Cebeçalho",
"SELECT_FIELD_HEADER": "Cabeçalho",
"SELECT_FIELD_BODY": "Corpo",
"SELECT_FIELD_SIZE": "Tamanho",
"SELECT_TYPE_CONTAINS": "Contém",
"SELECT_TYPE_NOT_CONTAINS": "Não contém",
"SELECT_TYPE_MATCHES": "Corresponde (* e ? suportados)",
"SELECT_TYPE_NOT_MATCHES": "Não correponde (* e ? suportados)",
"SELECT_TYPE_NOT_MATCHES": "Não corresponde (* e ? suportados)",
"SELECT_TYPE_REGEXP": "RegExp",
"SELECT_TYPE_NOT_REGEXP": "Diferente de RegExp",
"SELECT_TYPE_EQUAL_TO": "Igual a",
@ -358,10 +358,10 @@
"POPUPS_SIEVE_SCRIPT": {
"TITLE_CREATE": "Criar script",
"TITLE_EDIT": "Editar script",
"BUTTON_ADD_FILTER": "Adiscionar um filtro",
"BUTTON_ADD_FILTER": "Adicionar um filtro",
"BUTTON_RAW_SCRIPT": "Usar um script de utilizador personalizado",
"CAPABILITY_LABEL": "Capacidades",
"CHANGES_NEED_TO_BE_SAVED_DESC": "Estas alterações têm que ser guardadas no sevidor."
"CHANGES_NEED_TO_BE_SAVED_DESC": "Estas alterações têm que ser guardadas no servidor."
},
"POPUPS_SYSTEM_FOLDERS": {
"TITLE_SYSTEM_FOLDERS": "Escolha as pastas de sistema",
@ -426,7 +426,7 @@
},
"SETTINGS_FILTERS": {
"SIMPLE": "Simples",
"ADVANCED": "Advançado",
"ADVANCED": "Avançado",
"BUTTON_ADD_SCRIPT": "Adicionar um script",
"SUBNAME_MOVE_TO": "Mover para \"%FOLDER%\"",
"SUBNAME_FORWARD_TO": "Encaminhar para \"%EMAIL%\"",
@ -449,7 +449,7 @@
"LAYOUT_HORIZONTAL_SPLIT": "Separação horizontal",
"SHOW_NEXT_MESSAGE": "Mostrar a próxima mensagem quando (re)mover a mensagem atual",
"EDITOR": "Editor de texto padrão",
"EDITOR_HTML": "Html",
"EDITOR_HTML": "HTML",
"EDITOR_PLAIN": "Texto simples",
"VIEW_OPTIONS": "Ver opções",
"USE_PREVIEW_PANE": "Use o painel de pré-visualização",
@ -591,7 +591,7 @@
"DomainAlreadyExists": "O domínio já existe",
"DomainNotAllowed": "Este domínio não é permitido",
"AccountNotAllowed": "Esta conta não é permitida",
"CryptKeyError": "Your login passphrase has changed",
"CryptKeyError": "A sua palavra-passe de autenticação foi alterada",
"ContactsSyncError": "Erro na sincronização de contactos",
"CantGetMessageList": "Não é possível obter a lista de mensagens",
"CantGetMessage": "Não é possível obter a mensagem",
@ -611,7 +611,7 @@
"CantDeleteFolder": "Não é possível eliminar a pasta",
"CantDeleteNonEmptyFolder": "Não é possível eliminar pastas com conteúdos",
"CantSubscribeFolder": "Não é possível subscrever a esta pasta",
"CantUnsubscribeFolder": "Não é possível anular a subsrição desta pasta",
"CantUnsubscribeFolder": "Não é possível anular a subscrição desta pasta",
"DemoSendMessageError": "Por motivos de segurança, esta conta de demonstração não tem permissão para enviar mensagens para endereços de e-mail externos!",
"DemoAccountError": "Por motivos de segurança, esta conta não tem permissão de executar esta ação!",
"AccountAlreadyExists": "Esta conta já existe",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Necitit",
"DATE": "Data",
"DATE_ALL": "Tot timpul",
"DATE_3_DAYS": "З zile",
"DATE_7_DAYS": "7 zile",
"DATE_MONTH": "în această lună",
"DATE_3_MONTHS": "3 luni",
"DATE_6_MONTHS": "6 luni",
"DATE_YEAR": "în acest an",
"SINCE_3_DAYS": "З zile",
"SINCE_7_DAYS": "7 zile",
"SINCE_MONTH": "în această lună",
"SINCE_3_MONTHS": "3 luni",
"SINCE_6_MONTHS": "6 luni",
"SINCE_YEAR": "în acest an",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Назад",
"BUTTON_UPDATE": "Обновить",
"NEW_DOMAIN_DESC": "Эта конфигурация позволит вам работать с <strong>%NAME%<\/strong> адресами.",
"WHITE_LIST_ALERT": "Список пользователей домена к которым разрешен доступ.\nИспользуйте пробел в качестве разделителя.\n"
"WHITE_LIST_ALERT": "Список пользователей домена к которым разрешен доступ.\nИспользуйте пробел в качестве разделителя.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Плагин",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Непрочитанные",
"DATE": "Дата",
"DATE_ALL": "За всё время",
"DATE_3_DAYS": "За три дня",
"DATE_7_DAYS": "За неделю",
"DATE_MONTH": "За месяц",
"DATE_3_MONTHS": "За 3 месяца",
"DATE_6_MONTHS": "За полгода",
"DATE_YEAR": "За год",
"SINCE_3_DAYS": "За три дня",
"SINCE_7_DAYS": "За неделю",
"SINCE_MONTH": "За месяц",
"SINCE_3_MONTHS": "За 3 месяца",
"SINCE_6_MONTHS": "За полгода",
"SINCE_YEAR": "За год",
"SUBFOLDERS": "Подпапки",
"SUBFOLDERS_NONE": "Ничего",
"SUBFOLDERS_SUBTREE": "Все",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Späť",
"BUTTON_UPDATE": "Aktualizovať",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.",
"WHITE_LIST_ALERT": "List of domain users webmail is allowed to access.\nUse a space as delimiter.\n"
"WHITE_LIST_ALERT": "List of domain users webmail is allowed to access.\nUse a space as delimiter.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Doplnok",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Neprečítané",
"DATE": "Dátum",
"DATE_ALL": "Kedykoľvek",
"DATE_3_DAYS": "Nie staršie ako 3 dni",
"DATE_7_DAYS": "Nie staršie ako týždeň",
"DATE_MONTH": "Nie staršie ako mesiac",
"DATE_3_MONTHS": "Nie staršie ako 3 mesiace",
"DATE_6_MONTHS": "Nie staršie ako 6 mesiacov",
"DATE_YEAR": "Nie staršie ako 1 rok",
"SINCE_3_DAYS": "Nie staršie ako 3 dni",
"SINCE_7_DAYS": "Nie staršie ako týždeň",
"SINCE_MONTH": "Nie staršie ako mesiac",
"SINCE_3_MONTHS": "Nie staršie ako 3 mesiace",
"SINCE_6_MONTHS": "Nie staršie ako 6 mesiacov",
"SINCE_YEAR": "Nie staršie ako 1 rok",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Nazaj",
"BUTTON_UPDATE": "Posodobi",
"NEW_DOMAIN_DESC": "Ta konfiguiracija domene bo omogočala delo z <strong>%NAME%<\/strong> e-naslovi.",
"WHITE_LIST_ALERT": "Seznam uporabnikov domene, do katerih je omogočen dostop.\nUporabnike ločite s presledkom.\n"
"WHITE_LIST_ALERT": "Seznam uporabnikov domene, do katerih je omogočen dostop.\nUporabnike ločite s presledkom.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Vtičnik",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Neprebrano",
"DATE": "Datum",
"DATE_ALL": "Vsa",
"DATE_3_DAYS": "Do 3 dni nazaj",
"DATE_7_DAYS": "Do 1 tedna nazaj",
"DATE_MONTH": "Do 1 meseca nazaj",
"DATE_3_MONTHS": "Do 3 mesecev nazaj",
"DATE_6_MONTHS": "Do 6 mesecev nazaj",
"DATE_YEAR": "Do 1 leta nazaj",
"SINCE_3_DAYS": "Do 3 dni nazaj",
"SINCE_7_DAYS": "Do 1 tedna nazaj",
"SINCE_MONTH": "Do 1 meseca nazaj",
"SINCE_3_MONTHS": "Do 3 mesecev nazaj",
"SINCE_6_MONTHS": "Do 6 mesecev nazaj",
"SINCE_YEAR": "Do 1 leta nazaj",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tillbaka",
"BUTTON_UPDATE": "Uppdatera",
"NEW_DOMAIN_DESC": "Denna domän konfiguration gör att du kan arbeta med <strong>%NAME%<\/strong> e-postadresser.",
"WHITE_LIST_ALERT": "Lista över domänanvändare som tillåts.\nAnvända ett utrymme som avgränsare.\n"
"WHITE_LIST_ALERT": "Lista över domänanvändare som tillåts.\nAnvända ett utrymme som avgränsare.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tillägget",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Oläst",
"DATE": "Datum",
"DATE_ALL": "Alla",
"DATE_3_DAYS": "Upp till 3 dagar gammalt",
"DATE_7_DAYS": "Upp till 1 vecka gammalt",
"DATE_MONTH": "Upp till 1 månad gammalt",
"DATE_3_MONTHS": "Upp till 3 månader gammalt",
"DATE_6_MONTHS": "Upp till 6 månader gammalt",
"DATE_YEAR": "Upp till 1 år gammalt",
"SINCE_3_DAYS": "Upp till 3 dagar gammalt",
"SINCE_7_DAYS": "Upp till 1 vecka gammalt",
"SINCE_MONTH": "Upp till 1 månad gammalt",
"SINCE_3_MONTHS": "Upp till 3 månader gammalt",
"SINCE_6_MONTHS": "Upp till 6 månader gammalt",
"SINCE_YEAR": "Upp till 1 år gammalt",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Görünmeyen",
"DATE": "Tarih",
"DATE_ALL": "Hepsi",
"DATE_3_DAYS": "3 gün önceki",
"DATE_7_DAYS": "1 hafta önceki",
"DATE_MONTH": "1 ay önceki",
"DATE_3_MONTHS": "3 ay önceki",
"DATE_6_MONTHS": "6 ay önceki",
"DATE_YEAR": "1 yıl önceki",
"SINCE_3_DAYS": "3 gün önceki",
"SINCE_7_DAYS": "1 hafta önceki",
"SINCE_MONTH": "1 ay önceki",
"SINCE_3_MONTHS": "3 ay önceki",
"SINCE_6_MONTHS": "6 ay önceki",
"SINCE_YEAR": "1 yıl önceki",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Непрочитані",
"DATE": "Дата",
"DATE_ALL": "За весь час",
"DATE_3_DAYS": "За три дні",
"DATE_7_DAYS": "За тиждень",
"DATE_MONTH": "За місяць",
"DATE_3_MONTHS": "За 3 місяці",
"DATE_6_MONTHS": "За півроку",
"DATE_YEAR": "За рік",
"SINCE_3_DAYS": "За три дні",
"SINCE_7_DAYS": "За тиждень",
"SINCE_MONTH": "За місяць",
"SINCE_3_MONTHS": "За 3 місяці",
"SINCE_6_MONTHS": "За півроку",
"SINCE_YEAR": "За рік",
"SUBFOLDERS": "Subfolders",
"SUBFOLDERS_NONE": "None",
"SUBFOLDERS_SUBTREE": "All",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Trở về",
"BUTTON_UPDATE": "Cập nhật",
"NEW_DOMAIN_DESC": "Thiết lập tên miền cho phép bạn thao tác với với địa chỉ email của <strong>%NAME%<\/strong>.",
"WHITE_LIST_ALERT": "Danh sách những người dùng tên miền mà webmail được quyền truy cập.\nSử dụng dấu cách làm dấu phân cách mỗi tên.\n"
"WHITE_LIST_ALERT": "Danh sách những người dùng tên miền mà webmail được quyền truy cập.\nSử dụng dấu cách làm dấu phân cách mỗi tên.\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tiện ích mở rộng",

View file

@ -59,12 +59,12 @@
"UNSEEN": "Chưa được xem",
"DATE": "Ngày",
"DATE_ALL": "Tất cả",
"DATE_3_DAYS": "Khoảng 3 ngày trước",
"DATE_7_DAYS": "Khoảng 1 tuần trước",
"DATE_MONTH": "Khoảng 1 tháng trước",
"DATE_3_MONTHS": "Khoảng 3 tháng trước",
"DATE_6_MONTHS": "Khoảng 6 tháng trước",
"DATE_YEAR": "Khoảng 1 năm trước",
"SINCE_3_DAYS": "Khoảng 3 ngày trước",
"SINCE_7_DAYS": "Khoảng 1 tuần trước",
"SINCE_MONTH": "Khoảng 1 tháng trước",
"SINCE_3_MONTHS": "Khoảng 3 tháng trước",
"SINCE_6_MONTHS": "Khoảng 6 tháng trước",
"SINCE_YEAR": "Khoảng 1 năm trước",
"SUBFOLDERS": "Thư mục con",
"SUBFOLDERS_NONE": "Trống",
"SUBFOLDERS_SUBTREE": "Tất cả",

View file

@ -59,12 +59,12 @@
"UNSEEN": "未讀取",
"DATE": "日期",
"DATE_ALL": "全部",
"DATE_3_DAYS": "三天以內",
"DATE_7_DAYS": "一週以內",
"DATE_MONTH": "一個月以內",
"DATE_3_MONTHS": "三個月以內",
"DATE_6_MONTHS": "半年以內",
"DATE_YEAR": "一年以內",
"SINCE_3_DAYS": "三天以內",
"SINCE_7_DAYS": "一週以內",
"SINCE_MONTH": "一個月以內",
"SINCE_3_MONTHS": "三個月以內",
"SINCE_6_MONTHS": "半年以內",
"SINCE_YEAR": "一年以內",
"SUBFOLDERS": "子資料夾",
"SUBFOLDERS_NONE": "無",
"SUBFOLDERS_SUBTREE": "全部",

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "返回",
"BUTTON_UPDATE": "更新",
"NEW_DOMAIN_DESC": "此域名配置将允许您和<strong>%NAME%<\/strong>电子邮件地址一起工作.",
"WHITE_LIST_ALERT": "允许访问的域用户;使用空格分隔。\n"
"WHITE_LIST_ALERT": "允许访问的域用户;使用空格分隔。\n",
"VALID_SPAM_HEADERS": "Valid SPAM headers",
"VALID_VIRUS_HEADERS": "Valid virus headers"
},
"POPUPS_PLUGIN": {
"TITLE_PLUGIN": "插件",

View file

@ -59,12 +59,12 @@
"UNSEEN": "不可见",
"DATE": "日期",
"DATE_ALL": "所有邮件",
"DATE_3_DAYS": "3天以内",
"DATE_7_DAYS": "1周以内",
"DATE_MONTH": "1个月以内",
"DATE_3_MONTHS": "3个月以内",
"DATE_6_MONTHS": "半年以内",
"DATE_YEAR": "1年以内",
"SINCE_3_DAYS": "3天以内",
"SINCE_7_DAYS": "1周以内",
"SINCE_MONTH": "1个月以内",
"SINCE_3_MONTHS": "3个月以内",
"SINCE_6_MONTHS": "半年以内",
"SINCE_YEAR": "1年以内",
"SUBFOLDERS": "子文件夹",
"SUBFOLDERS_NONE": "无",
"SUBFOLDERS_SUBTREE": "全部",

View file

@ -120,8 +120,19 @@
"fast_simple_search": true,
"force_select": false,
"message_all_headers": false,
"search_filter": null,
<div class="control-group">
<label>Search filter</label>
<input name="IMAP[search_filter]" type="text" class="span3" data-bind="textInput: imapSearch_filter">
</div>
-->
<div class="control-group">
<label data-i18n="POPUPS_DOMAIN/VALID_SPAM_HEADERS"></label>
<input name="IMAP[spam_headers]" type="text" class="span3" data-bind="textInput: imapSpam_headers" title="rspamd,spamassassin,bogofilter">
</div>
<div class="control-group">
<label data-i18n="POPUPS_DOMAIN/VALID_VIRUS_HEADERS"></label>
<input name="IMAP[virus_headers]" type="text" class="span3" data-bind="textInput: imapVirus_headers" title="rspamd,clamav">
</div>
</div>
<input type="radio" name="tabs" id="tab-smtp">