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: - SnappyMail Version:
- Mode: [e.g. standalone, nextcloud, cyberpanel, docker] - Mode: [e.g. standalone, nextcloud, cyberpanel, docker]
**[Debug/logging information](https://github.com/the-djmaze/snappymail/wiki/FAQ#how-do-i-enable-logging)** **Debug/logging information**
Place them here (few lines) or as attachments (many lines) [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** **Additional context**
Add any other context about the problem here. Add any other context about the problem here.

View file

@ -10,18 +10,20 @@ export class MimeHeaderAutocryptModel/* extends AbstractModel*/
if (value) { if (value) {
value.split(';').forEach(entry => { value.split(';').forEach(entry => {
entry = entry.split('='); entry = entry.match(/^([^=]+)=(.*)$/);
const trim = str => (str || '').trim().replace(/^["']|["']+$/g, ''); 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() { toString() {
let result = `addr=${this.addr}; `;
if ('mutual' === this.prefer_encrypt) { 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() { pem() {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,7 +3,9 @@
use RainLoop\Enumerations\Capa; use RainLoop\Enumerations\Capa;
use MailSo\Log\Logger; use MailSo\Log\Logger;
use RainLoop\Actions; use RainLoop\Actions;
use RainLoop\Model\AdditionalAccount;
use RainLoop\Model\MainAccount; use RainLoop\Model\MainAccount;
use RainLoop\Providers\Storage\Enumerations\StorageType;
class LdapMailAccounts class LdapMailAccounts
{ {
@ -50,14 +52,13 @@ class LdapMailAccounts
/** /**
* @inheritDoc * @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) * 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 &$sEmail
* @param string &$sLogin
*/ */
public function overwriteEmail(&$sEmail, &$sLogin) public function overwriteEmail(&$sEmail)
{ {
try { try {
$this->EnsureBound(); $this->EnsureBound();
@ -106,7 +107,7 @@ class LdapMailAccounts
foreach($mailAddressResults as $mailAddressResult) foreach($mailAddressResults as $mailAddressResult)
{ {
if($mailAddressResult->username === $username) { 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 //that called this hook, so we just have to overwrite the mail address
$sEmail = $mailAddressResult->mailMainAccount; $sEmail = $mailAddressResult->mailMainAccount;
} }
@ -131,10 +132,19 @@ class LdapMailAccounts
return false; // exceptions are only thrown from the handle error function that does logging already 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 //Basing on https://github.com/the-djmaze/snappymail/issues/616
// and removes the domainname if this was configured inside the domain config.
$username = @ldap_escape($oAccount->IncLogin(), "", LDAP_ESCAPE_FILTER);
$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; $searchString = $this->config->search_string;
// Replace placeholders inside the ldap search string with actual values // Replace placeholders inside the ldap search string with actual values
@ -159,21 +169,10 @@ class LdapMailAccounts
catch (LdapMailAccountsException $e) { catch (LdapMailAccountsException $e) {
return false; // exceptions are only thrown from the handle error function that does logging already return false; // exceptions are only thrown from the handle error function that does logging already
} }
if (count($mailAddressResults) < 1) { if (count($mailAddressResults) < 1) {
$this->logger->Write("Could not find user $username", \LOG_NOTICE, self::LOG_KEY); $this->logger->Write("Could not find user $username", \LOG_NOTICE, self::LOG_KEY);
return false; 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); $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) foreach($mailAddressResults as $mailAddressResult)
{ {
$sUsername = $mailAddressResult->username; $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 //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()); $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) //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); $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_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_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_FIELD_MAIL_ADDRESS_MAIN_ACCOUNT = "field_mail_address_main_account";
public const CONFIG_BOOL_OVERWRITE_CRYPTKEY = "bool_overwrite_cryptkey";
public $server; public $server;
public $protocol; public $protocol;
@ -36,6 +37,7 @@ class LdapMailAccountsConfig
public $field_mail_address_main_account; public $field_mail_address_main_account;
public $field_mail_address_additional_account; public $field_mail_address_additional_account;
public $bool_overwrite_mail_address_main_account; public $bool_overwrite_mail_address_main_account;
public $bool_overwrite_cryptkey;
public static function MakeConfig(Plugin $config): LdapMailAccountsConfig 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->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->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->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; 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. 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. 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 ### Configuration
- Install and activate the plugin using the SnappyMail Admin Panel -> menu Extensions. - 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. - 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. 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. **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 const
NAME = 'LDAP Mail Accounts', NAME = 'LDAP Mail Accounts',
VERSION = '2.1.1', VERSION = '2.2.0',
AUTHOR = 'cm-schl', AUTHOR = 'cm-schl',
URL = 'https://github.com/cm-sch', URL = 'https://github.com/cm-sch',
RELEASE = '2024-03-16', RELEASE = '2024-05-28',
REQUIRED = '2.35.3', REQUIRED = '2.36.1',
CATEGORY = 'Accounts', 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).'; 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 * Overwrite the MainAccount mail address by looking up the new one in the ldap directory
* *
* @param string &$sEmail * @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 // Set up config
$config = LdapMailAccountsConfig::MakeConfig($this->Config()); $config = LdapMailAccountsConfig::MakeConfig($this->Config());
@ -52,10 +54,10 @@ class LdapMailAccountsPlugin extends AbstractPlugin
if ($config->bool_overwrite_mail_address_main_account) if ($config->bool_overwrite_mail_address_main_account)
{ {
$oldapMailAccounts = new LdapMailAccounts($config, $this->Manager()->Actions()->Logger()); $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 // Function gets called by RainLoop/Actions/User.php
@ -92,6 +94,17 @@ class LdapMailAccountsPlugin extends AbstractPlugin
->SetDefaultValue("mail"), ->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 [ return [
\RainLoop\Plugins\Property::NewInstance(LdapMailAccountsConfig::CONFIG_SERVER) \RainLoop\Plugins\Property::NewInstance(LdapMailAccountsConfig::CONFIG_SERVER)
->SetLabel("LDAP Server URL") ->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.") ->SetDescription("The field containing the default sender name of the found additional mail account.")
->SetDefaultValue("displayName"), ->SetDefaultValue("displayName"),
$groupOverwriteMainAccount $groupOverwriteMainAccount,
$groupAdditionalSettings
]; ];
} }
} }

View file

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

View file

@ -76,19 +76,33 @@ class MailClient
MimeHeader::X_DKIM_AUTHENTICATION_RESULTS, MimeHeader::X_DKIM_AUTHENTICATION_RESULTS,
MimeHeader::LIST_UNSUBSCRIBE, MimeHeader::LIST_UNSUBSCRIBE,
// https://autocrypt.org/level1.html#the-autocrypt-header // https://autocrypt.org/level1.html#the-autocrypt-header
MimeHeader::AUTOCRYPT, 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
); );
// 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)); \RainLoop\Api::Actions()->Plugins()->RunHook('imap.message-headers', array(&$aHeaders));
return FetchType::BuildBodyCustomHeaderRequest($aHeaders, true); return FetchType::BuildBodyCustomHeaderRequest($aHeaders, true);

View file

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

View file

@ -67,8 +67,9 @@ trait AdminDomains
$this->GetActionParam('username'), $this->GetActionParam('username'),
new \SnappyMail\SensitiveString('********') new \SnappyMail\SensitiveString('********')
); );
$sEmail = $sCredentials['email'];
return $this->DefaultResponse(array( return $this->DefaultResponse(array(
'email' => $sCredentials['email'], 'email' => $sEmail,
'login' => $sCredentials['imapUser'], 'login' => $sCredentials['imapUser'],
'domain' => $sCredentials['domain'], 'domain' => $sCredentials['domain'],
'whitelist' => $sCredentials['domain'] ? $sCredentials['domain']->ValidateWhiteList($sEmail) : null '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 // Workarounds for the changed application structure
if ('webmail' === $sSectionKey) { if ('webmail' === $sSectionKey) {
if ('language_admin' === $sSectionKey) { if ('language_admin' === $sParamKey) {
$sSectionKey = 'admin_panel'; $sSectionKey = 'admin_panel';
$sParamKey = 'language'; $sParamKey = 'language';
} }
@ -137,6 +137,16 @@ class Application extends \RainLoop\Config\AbstractConfig
$sParamKey = 'json_response_write_limit'; $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); parent::Set($sSectionKey, $sParamKey, $mParamValue);
} }

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Назад", "BUTTON_BACK": "Назад",
"BUTTON_UPDATE": "Абнавіць", "BUTTON_UPDATE": "Абнавіць",
"NEW_DOMAIN_DESC": "Гэтая канфігурацыя дазволіць вам працаваць з <strong>%NAME%<\/strong> адрасамі.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Убудова", "TITLE_PLUGIN": "Убудова",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Zpět", "BUTTON_BACK": "Zpět",
"BUTTON_UPDATE": "Aktualizovat", "BUTTON_UPDATE": "Aktualizovat",
"NEW_DOMAIN_DESC": "Konfigurace této domény umožní používat <strong>%NAME%<\/strong> adresy.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin", "TITLE_PLUGIN": "Plugin",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tilbage", "BUTTON_BACK": "Tilbage",
"BUTTON_UPDATE": "Opdater", "BUTTON_UPDATE": "Opdater",
"NEW_DOMAIN_DESC": "Denne domæne konfiguration tillader <strong>%NAME%<\/strong> e-mail adresser.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tilføjelse", "TITLE_PLUGIN": "Tilføjelse",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Zurück", "BUTTON_BACK": "Zurück",
"BUTTON_UPDATE": "Aktualisieren", "BUTTON_UPDATE": "Aktualisieren",
"NEW_DOMAIN_DESC": "Diese Domain Konfiguration wird es dir möglich machen mit <strong>%NAME%<\/strong> Mailadressen zu arbeiten.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Erweiterung", "TITLE_PLUGIN": "Erweiterung",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Back", "BUTTON_BACK": "Back",
"BUTTON_UPDATE": "Update", "BUTTON_UPDATE": "Update",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extension", "TITLE_PLUGIN": "Extension",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Volver", "BUTTON_BACK": "Volver",
"BUTTON_UPDATE": "Actualizar", "BUTTON_UPDATE": "Actualizar",
"NEW_DOMAIN_DESC": "Esta configuración de Dominio le permitirá trabajar con direcciones de correo tipo @<strong>%NAME%<\/strong>.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensión", "TITLE_PLUGIN": "Extensión",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Atzera", "BUTTON_BACK": "Atzera",
"BUTTON_UPDATE": "Eguneratu", "BUTTON_UPDATE": "Eguneratu",
"NEW_DOMAIN_DESC": "Domeinu honen konfigurazioak <strong>%NAME%<\/strong> email kontuarekin lan egitea ahalbideratuko dizu.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Gehigarria", "TITLE_PLUGIN": "Gehigarria",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "برگشت", "BUTTON_BACK": "برگشت",
"BUTTON_UPDATE": "بروزرسانی", "BUTTON_UPDATE": "بروزرسانی",
"NEW_DOMAIN_DESC": "این تنظیمات دامنه به شما اجازه کار کردن با پست الکترونیک <strong>%NAME%<\/strong> را می‌دهد.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "افزونه", "TITLE_PLUGIN": "افزونه",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Takaisin", "BUTTON_BACK": "Takaisin",
"BUTTON_UPDATE": "Päivitä", "BUTTON_UPDATE": "Päivitä",
"NEW_DOMAIN_DESC": "Tämän verkkotunnuksen asetukset sallivat käyttää <strong>%NAME%<strong> säkhöpostiosoitteita.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Lisäosa", "TITLE_PLUGIN": "Lisäosa",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Retour", "BUTTON_BACK": "Retour",
"BUTTON_UPDATE": "Modifier", "BUTTON_UPDATE": "Modifier",
"NEW_DOMAIN_DESC": "Cette configuration de domaine vous permettra de travailler avec <strong>%NAME%<\/strong> dans les adresses électroniques.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extension", "TITLE_PLUGIN": "Extension",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Vissza", "BUTTON_BACK": "Vissza",
"BUTTON_UPDATE": "Frissítés", "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.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Bővítményt", "TITLE_PLUGIN": "Bővítményt",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Kembali", "BUTTON_BACK": "Kembali",
"BUTTON_UPDATE": "Perbarui", "BUTTON_UPDATE": "Perbarui",
"NEW_DOMAIN_DESC": "Domain ini mengizinkan anda bekerja dengan alamat email juga<strong>%NAME%<\/strong> ", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin", "TITLE_PLUGIN": "Plugin",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Indietro", "BUTTON_BACK": "Indietro",
"BUTTON_UPDATE": "Aggiorna", "BUTTON_UPDATE": "Aggiorna",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Estensione", "TITLE_PLUGIN": "Estensione",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "戻る", "BUTTON_BACK": "戻る",
"BUTTON_UPDATE": "更新", "BUTTON_UPDATE": "更新",
"NEW_DOMAIN_DESC": "このドメイン設定を使用すると、<strong>%NAME%<\/strong>メールアドレスで動作するようになります。", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "プラグイン", "TITLE_PLUGIN": "プラグイン",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Atgal", "BUTTON_BACK": "Atgal",
"BUTTON_UPDATE": "Atnaujinti", "BUTTON_UPDATE": "Atnaujinti",
"NEW_DOMAIN_DESC": "Šie nustatymai leis jums dirbti su <strong>%NAME%<\/strong> domeno pašto adresais.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Įskiepis", "TITLE_PLUGIN": "Įskiepis",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tilbake", "BUTTON_BACK": "Tilbake",
"BUTTON_UPDATE": "Oppdater", "BUTTON_UPDATE": "Oppdater",
"NEW_DOMAIN_DESC": "Dette domeneoppsettet lar deg jobbe med e-postadresser ved <strong>%NAME%<\/strong>.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tillegg", "TITLE_PLUGIN": "Tillegg",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Terug", "BUTTON_BACK": "Terug",
"BUTTON_UPDATE": "Update", "BUTTON_UPDATE": "Update",
"NEW_DOMAIN_DESC": "Dit domein stelt u in staat om met <strong>%NAME%<\/strong> e-mail adressen te werken.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensie", "TITLE_PLUGIN": "Extensie",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Wstecz", "BUTTON_BACK": "Wstecz",
"BUTTON_UPDATE": "Zaktualizuj", "BUTTON_UPDATE": "Zaktualizuj",
"NEW_DOMAIN_DESC": "Konfiguracja tej domeny pozwala na pracę z adresami e-mail: <strong>%NAME%<\/strong>", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Wtyczka", "TITLE_PLUGIN": "Wtyczka",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Voltar", "BUTTON_BACK": "Voltar",
"BUTTON_UPDATE": "Atualizar", "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>.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Plugin", "TITLE_PLUGIN": "Plugin",

View file

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

View file

@ -38,7 +38,7 @@
"LABEL_ALLOW_THEMES_ON_SETTINGS": "Permitir personalização da interface nas definições", "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_ALLOW_BACKGROUND_ON_SETTINGS": "Permitir alterar a imagem de fundo nas definições",
"LABEL_SHOW_THUMBNAILS": "Mostrar miniaturas (anexos)", "LABEL_SHOW_THUMBNAILS": "Mostrar miniaturas (anexos)",
"LEGEND_MAIN": "Prinicpal", "LEGEND_MAIN": "Principal",
"LABEL_ATTACHMENT_SIZE_LIMIT": "Tamanho limite dos anexos", "LABEL_ATTACHMENT_SIZE_LIMIT": "Tamanho limite dos anexos",
"LABEL_ALLOW_ADDITIONAL_ACCOUNTS": "Permitir contas adicionais", "LABEL_ALLOW_ADDITIONAL_ACCOUNTS": "Permitir contas adicionais",
"LABEL_ALLOW_IDENTITIES": "Permitir múltiplas identidades", "LABEL_ALLOW_IDENTITIES": "Permitir múltiplas identidades",
@ -146,7 +146,9 @@
"BUTTON_BACK": "Voltar", "BUTTON_BACK": "Voltar",
"BUTTON_UPDATE": "Atualizar", "BUTTON_UPDATE": "Atualizar",
"NEW_DOMAIN_DESC": "Esta configuração de domínio vai permitir trabalhar com endereços email <strong>%NAME%<\/strong>.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Extensão", "TITLE_PLUGIN": "Extensão",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Назад", "BUTTON_BACK": "Назад",
"BUTTON_UPDATE": "Обновить", "BUTTON_UPDATE": "Обновить",
"NEW_DOMAIN_DESC": "Эта конфигурация позволит вам работать с <strong>%NAME%<\/strong> адресами.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Плагин", "TITLE_PLUGIN": "Плагин",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Späť", "BUTTON_BACK": "Späť",
"BUTTON_UPDATE": "Aktualizovať", "BUTTON_UPDATE": "Aktualizovať",
"NEW_DOMAIN_DESC": "This domain configuration will allow you to work with <strong>%NAME%<\/strong> email addresses.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Doplnok", "TITLE_PLUGIN": "Doplnok",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Nazaj", "BUTTON_BACK": "Nazaj",
"BUTTON_UPDATE": "Posodobi", "BUTTON_UPDATE": "Posodobi",
"NEW_DOMAIN_DESC": "Ta konfiguiracija domene bo omogočala delo z <strong>%NAME%<\/strong> e-naslovi.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Vtičnik", "TITLE_PLUGIN": "Vtičnik",

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Tillbaka", "BUTTON_BACK": "Tillbaka",
"BUTTON_UPDATE": "Uppdatera", "BUTTON_UPDATE": "Uppdatera",
"NEW_DOMAIN_DESC": "Denna domän konfiguration gör att du kan arbeta med <strong>%NAME%<\/strong> e-postadresser.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tillägget", "TITLE_PLUGIN": "Tillägget",

View file

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

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "Trở về", "BUTTON_BACK": "Trở về",
"BUTTON_UPDATE": "Cập nhật", "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>.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "Tiện ích mở rộng", "TITLE_PLUGIN": "Tiện ích mở rộng",

View file

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

View file

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

View file

@ -146,7 +146,9 @@
"BUTTON_BACK": "返回", "BUTTON_BACK": "返回",
"BUTTON_UPDATE": "更新", "BUTTON_UPDATE": "更新",
"NEW_DOMAIN_DESC": "此域名配置将允许您和<strong>%NAME%<\/strong>电子邮件地址一起工作.", "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": { "POPUPS_PLUGIN": {
"TITLE_PLUGIN": "插件", "TITLE_PLUGIN": "插件",

View file

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

View file

@ -120,8 +120,19 @@
"fast_simple_search": true, "fast_simple_search": true,
"force_select": false, "force_select": false,
"message_all_headers": 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> </div>
<input type="radio" name="tabs" id="tab-smtp"> <input type="radio" name="tabs" id="tab-smtp">