diff --git a/chrome/content/exchangeSettings.js b/chrome/content/exchangeSettings.js
index f26221cf..407592d4 100644
--- a/chrome/content/exchangeSettings.js
+++ b/chrome/content/exchangeSettings.js
@@ -266,6 +266,8 @@ exchExchangeSettings.prototype = {
this._document.getElementById("exchWebService-autoprocessingproperties-markeventtentative").checked = this.globalFunctions.safeGetBoolPref(exchWebServicesCalPrefs, "ecautoprocessingmarkeventtentative", false);
this._document.getElementById("exchWebService-syncMailItems-Interval").value = this.globalFunctions.safeGetIntPref(exchWebServicesCalPrefs, "syncMailItems.Interval", 15);
+ this._document.getElementById("exchWebService-syncMailItems-active").checked = this.globalFunctions.safeGetBoolPref(exchWebServicesCalPrefs, "mailsync.active",false);
+
if ( this.globalFunctions.safeGetCharPref(exchWebServicesCalPrefs, "ecFolderbase", "") == "calendar" ){
this._document.getElementById("mailItemsPropertiesTab").hidden = false;
@@ -333,6 +335,7 @@ exchExchangeSettings.prototype = {
if ( this.globalFunctions.safeGetCharPref(exchWebServicesCalPrefs, "ecFolderbase", "") == "calendar" ){
exchWebServicesCalPrefs.setIntPref("syncMailItems.Interval", this._document.getElementById("exchWebService-syncMailItems-Interval").value);
+ exchWebServicesCalPrefs.setBoolPref("mailsync.active", this._document.getElementById("exchWebService-syncMailItems-active").checked);
}
//exchWebServicesCalPrefs.setBoolPref("ecPollInbox", this._document.getElementById("exchWebService-poll-inbox").checked);
diff --git a/chrome/content/exchangeSettings.xul b/chrome/content/exchangeSettings.xul
index 7ebd45e6..af0b5761 100644
--- a/chrome/content/exchangeSettings.xul
+++ b/chrome/content/exchangeSettings.xul
@@ -417,6 +417,10 @@
increment="1" min="15" type="number" value="15" />
+
+
+
diff --git a/chrome/content/exchangeSettingsOverlay.js b/chrome/content/exchangeSettingsOverlay.js
index 30ff0c53..dbcf5965 100644
--- a/chrome/content/exchangeSettingsOverlay.js
+++ b/chrome/content/exchangeSettingsOverlay.js
@@ -235,11 +235,17 @@ exchSettingsOverlay.prototype = {
exchWebServicesDoUserChanged: function _exchWebServicesDoUserChanged(aTextBox)
{
this.exchWebServicesgUser = aTextBox.value;
- if (this.exchWebServicesgUser.indexOf("@") > -1) {
+ if ((this.exchWebServicesgUser.indexOf("@") > -1) || (this.exchWebServicesgUser.indexOf("\\") > -1) ){
this._document.getElementById("exchWebService_windowsdomain").disabled = true;
this._document.getElementById("exchWebService_windowsdomain").value = "";
//this._document.getElementById("exchWebService_windowsdomain").setAttribute("required", false);
this.exchWebServicesgDomain = "";
+
+ if(this.exchWebServicesgUser.indexOf("\\") > -1){
+ var newArray = this.exchWebServicesgUser.split("\\");
+ this.exchWebServicesgUser = newArray[1];
+ this.exchWebServicesgDomain = newArray[0];
+ }
}
else {
this._document.getElementById("exchWebService_windowsdomain").disabled = false;
@@ -308,7 +314,7 @@ exchSettingsOverlay.prototype = {
exchWebServicesGetUsername: function _exchWebServicesGetUsername()
{
- if (this.exchWebServicesgUser.indexOf("@") > -1) {
+ if (this.exchWebServicesgUser.indexOf("@") > -1) {
return this.exchWebServicesgUser;
}
else {
diff --git a/chrome/content/rtews.js b/chrome/content/rtews.js
index 9890d8ab..9188c93f 100644
--- a/chrome/content/rtews.js
+++ b/chrome/content/rtews.js
@@ -18,6 +18,7 @@ Cu.import("resource://exchangecalendar/erSubscribe.js");
Cu.import("resource://exchangecalendar/erGetEvents.js");
Cu.import("resource://exchangecalendar/erFindItems.js");
Cu.import("resource://exchangecalendar/erUpdateItem.js");
+Cu.import("resource://exchangecalendar/erUnsubscribe.js");
const eventTypes = ["NewMailEvent","ModifiedEvent","MovedEvent","CopiedEvent","CreatedEvent"];
@@ -202,14 +203,19 @@ rtews.Tags = {
function rtews(identity){
this.identity = identity;
// fixing bug #270
-
- if( identity.domain){
- this.user = identity.domain +"\\"+identity.username ;
- }
- else {
- this.user = identity.username ;
- }
-
+
+ if (identity.username.indexOf("@") > -1) {
+ this.user = identity.username ;
+ }
+ else {
+ if (identity.domain == "") {
+ this.user = identity.username ;
+ }
+ else {
+ this.user = identity.domain +"\\"+identity.username ;
+ }
+ }
+
this.mailbox = identity.email ;
this.serverUrl = identity.ewsUrl ;
@@ -229,17 +235,38 @@ function rtews(identity){
this.prefs = identity.prefs ;
if( this.prefs ){
- this.pollOffset = this.globalFunctions.safeGetIntPref(this.prefs, "syncMailItems.Interval" ,15) * 1000 ;//time for getevents
+ this.pollOffset = this.globalFunctions.safeGetIntPref(this.prefs, "syncMailItems.Interval" ,15) * 1000 ;//time for getevents
+ this.loadBalancer = Cc["@1st-setup.nl/exchange/loadbalancer;1"]
+ .getService(Ci.mivExchangeLoadBalancer);
}
else{
this.prefs = null;
- this.pollOffset = 15000;//time for getevents
+ this.pollOffset = 30000;//time for getevents
}
this.subscriptionTimeout = "1440";
}
rtews.prototype = {
+ /*
+ *use Calendar queue for xml request
+ */
+ addToQueue: function _addToQueue(aRequest, aArgument, aCbOk, aCbError, aListener)
+ {
+ if ( mivFunctions.safeGetBoolPref(this.prefs, "mailsync.active", false) == false ){
+ exchangeGlobalFunction("Not adding to queue because we are disabled, " + this.serverUrl ,this.user);
+ this.Running = false;
+ return;
+ }
+ //if (!aArgument["ServerVersion"]) aArgument["ServerVersion"] = this.exchangeStatistics.getServerVersion(this.serverUrl);
+
+ this.loadBalancer.addToQueue({ calendar: this.prefs,
+ ecRequest:aRequest,
+ arguments: aArgument,
+ cbOk: aCbOk,
+ cbError: aCbError,
+ listener: aListener});
+ },
/*
* Gets the ItemId element from response of the FindItem SOAP request
*
@@ -248,7 +275,7 @@ rtews.prototype = {
exchangeGlobalFunction("Find all the folderd in msgfolderroot, " + this.serverUrl ,this.user);
//Call API
var self = this;
- var tmpObject = new erFindInboxFolderRequest(
+ this.addToQueue( erFindInboxFolderRequest,
{user:this.user,
mailbox: this.mailbox,
serverUrl:this.serverUrl,
@@ -272,7 +299,7 @@ rtews.prototype = {
subscribe: function _subscribe(folders){
exchangeGlobalFunction("Trying to subscribe " ,this.user);
var self = this;
- var tmpObject = new erSubscribeRequest(
+ this.addToQueue( erSubscribeRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -296,10 +323,10 @@ rtews.prototype = {
},
unsubscribe: function _unsubscribe(){
- var that = this;
- that.Running = true;
-
- var tmpObject = new erUnsubscribeRequest(
+ exchangeGlobalFunction("Error occured Unsubscribing user.",this.user);
+ this.Running = false;
+ var that = this;
+ this.addToQueue( erUnsubscribeRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -312,13 +339,11 @@ rtews.prototype = {
},
unsubscribeOK: function _unsubscribeOK(erUnsubscribeRequest, aResp){
- this.Running =false;
exchangeGlobalFunction("Unsubscribed user.",this.user);
},
unsubscribeError: function _unsubscribeError(erUnsubscribeRequest, aCode, aMsg){
- this.Running =false;
- exchangeGlobalFunction("unsubscribeError: "+ aMsg);
+ exchangeGlobalFunction("unsubscribeError: "+ aMsg);
},
poll: function _poll() {
@@ -440,7 +465,7 @@ rtews.prototype = {
getAndUpdateItems: function _getAndUpdateItems(aIds) {
exchangeGlobalFunction("Received request to update messages, total items to be requested - " + aIds.length, this.user);
var that = this;
- var tmpObject = new erGetItemsRequest(
+ this.addToQueue( erGetItemsRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -456,7 +481,7 @@ rtews.prototype = {
this.Running = true;
var that = this;
- var tmpObject = new erGetEventsRequest(
+ this.addToQueue( erGetEventsRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -680,7 +705,7 @@ rtews.prototype = {
continue;
}
- var tmpObject = new erFindItemsRequest(
+ this.addToQueue( erFindItemsRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -695,7 +720,7 @@ rtews.prototype = {
}
else{
exchangeGlobalFunction("Syncing tags not finding any items in server for Ids. " + JSON.stringify(messageId), that.user);
- }
+ }
},
function(erFindItemsRequest, aCode, aMsg) {
exchangeGlobalFunction("findItemsError: aCode:" + aCode + " aMsg: " + aMsg );
@@ -725,14 +750,17 @@ rtews.prototype = {
}
else{
exchangeGlobalFunction("Toggle tags not finding any items in server for Ids. " + JSON.stringify(messageId), that.user);
+ //when no mail item is find toggle tags locally
+ exchangeGlobalFunction("Update tags locally",that.user);
+ rtews.fallBackTagUpdate(msgHdr, identity, toggleType, categories, key, addKey);
}
}
function findItemsError(erFindItemsRequest, aCode, aMsg){
exchangeGlobalFunction("findItemsError: aCode:" + aCode + " aMsg: " + aMsg );
- }
+ }
- var tmpObject = new erFindItemsRequest(
+ this.addToQueue( erFindItemsRequest,
{user: this.user,
mailbox: this.mailbox,
serverUrl: this.serverUrl,
@@ -774,7 +802,8 @@ rtews.prototype = {
exchangeGlobalFunction("UpdateItem with changes " + changes, this.user);
- var tmpObject = new erUpdateItemRequest({user: this.user,
+ this.addToQueue( erUpdateItemRequest,
+ {user: this.user,
mailbox: this.mailbox,
folderBase: this.folderBase,
serverUrl: this.serverUrl,
@@ -806,6 +835,18 @@ rtews.prototype = {
},
};
+
+/*
+ * On remote fails
+ */
+rtews.fallBackTagUpdate = function(msgHdr, identity, toggleType, categories, key, addKey){
+ if (toggleType == "removeAll") {
+ rtews.removeAllMessageTagsPostEwsUpdate(msgHdr);
+ } else {
+ rtews.toggleMessageTagPostEwsUpdate(key, addKey, msgHdr);
+ }
+};
+
/*
* Custom method for remove all tags menuitem
*/
@@ -923,12 +964,14 @@ rtews.addSyncMenu = function (menuPopup) {
*/
rtews.getIdentity = function(server) {
var ids = identities;
- for (var x = 0, len = ids.length; x < len; x++) {
- if (ids[x] && ids[x].enabled == true && ids[x].server == server) {
- return ids[x];
- }
+ if( ids ){
+ for (var x = 0, len = ids.length; x < len; x++) {
+ if (ids[x] && ids[x].enabled == true && ids[x].server == server) {
+ return ids[x];
+ }
+ }
}
- return null;
+ return null;
};
//Get all the identities
@@ -1034,36 +1077,25 @@ function getAllAccounts(){
var identity = identities.queryElementAt(index, Ci.nsIMsgIdentity);
var calAccount = getCalendarPref(identity.email);
var enabled = false;
- exchangeGlobalFunction("Account exists for email address - " + identity.email);
+ exchangeGlobalFunction("Account exists for email address - " + identity.email);
var details = null;
- if(calAccount){
- enabled = true;
- details = {
- "server":account.incomingServer.prettyName,
- "serverURI":account.incomingServer.serverURI,
- "email":calAccount.getCharPref("ecMailbox"),
- "username":calAccount.getCharPref("ecUser"),
- "name":identity.fullName,
- "domain":calAccount.getCharPref("ecDomain"),
- "enabled":enabled,
- "ewsUrl":calAccount.getCharPref("ecServer"),
- "prefs" : calAccount ,};
- }
- else{
- details = {
- "server":account.incomingServer.prettyName,
- "serverURI":account.incomingServer.serverURI,
- "email":null,
- "username":null,
- "name":identity.fullName,
- "domain":null,
- "enabled":enabled,
- "ewsUrl":null,
- "prefs" : null ,};
- }
-
- if( details.enabled == true){
+
+ if(calAccount && mivFunctions ){
+ enabled = mivFunctions.safeGetBoolPref(calAccount, "mailsync.active", false) ;
+ details = {
+ "server":account.incomingServer.prettyName,
+ "serverURI":account.incomingServer.serverURI,
+ "email":mivFunctions.safeGetCharPref(calAccount,"ecMailbox"),
+ "username":mivFunctions.safeGetCharPref(calAccount,"ecUser"),
+ "name":identity.fullName,
+ "domain":mivFunctions.safeGetCharPref(calAccount,"ecDomain"),
+ "enabled":enabled,
+ "ewsUrl":mivFunctions.safeGetCharPref(calAccount,"ecServer"),
+ "prefs" : calAccount ,
+ };
+ }
+ if( details.enabled == true){
_accounts.push(details);
}
}
@@ -1086,33 +1118,22 @@ function getAllAccounts(){
exchangeGlobalFunction("Account exists for email address - " + identity.email);
let details = null;
- if(calAccount){
- enabled = true;
- details = {
- "server":account.incomingServer.prettyName,
- "serverURI":account.incomingServer.serverURI,
- "email":calAccount.getCharPref("ecMailbox"),
- "username":calAccount.getCharPref("ecUser"),
- "name":identity.fullName,
- "domain":calAccount.getCharPref("ecDomain"),
- "enabled":enabled,
- "ewsUrl":calAccount.getCharPref("ecServer"),
- "prefs" : calAccount ,};
- }
- else{
- details = {
- "server":account.incomingServer.prettyName,
- "serverURI":account.incomingServer.serverURI,
- "email":null,
- "username":null,
- "name":identity.fullName,
- "domain":null,
- "enabled":enabled,
- "ewsUrl":null,
- "prefs" : null ,};
- }
- if( details.enabled == true ){
+ if(calAccount && mivFunctions ){
+ enabled = mivFunctions.safeGetBoolPref(calAccount, "mailsync.active", false) ;
+ details = {
+ "server":account.incomingServer.prettyName,
+ "serverURI":account.incomingServer.serverURI,
+ "email":mivFunctions.safeGetCharPref(calAccount,"ecMailbox"),
+ "username":mivFunctions.safeGetCharPref(calAccount,"ecUser"),
+ "name":identity.fullName,
+ "domain":mivFunctions.safeGetCharPref(calAccount,"ecDomain"),
+ "enabled":enabled,
+ "ewsUrl":mivFunctions.safeGetCharPref(calAccount,"ecServer"),
+ "prefs" : calAccount ,
+ };
+ }
+ if( details.enabled == true ){
_accounts.push(details);
}
}
diff --git a/components/ecExchangeRequest.js b/components/ecExchangeRequest.js
index 4dace04e..32464bfe 100644
--- a/components/ecExchangeRequest.js
+++ b/components/ecExchangeRequest.js
@@ -1109,7 +1109,7 @@ try {
}
}
else {
- var rm = xml2json.XPath(aResp,"/s:Envelope/s:Body/*/m:ResponseMessages/*[@ResponseClass='Error']");
+ var rm = aResp.XPath("/s:Envelope/s:Body/*/m:ResponseMessages/*[@ResponseClass='Error']");
var result;
if (rm.length > 0) {
result = rm[0].getTagValue("m:MessageText").value+"("+rm[0].getTagValue("m:ResponseCode")+")";
diff --git a/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js b/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js
index 503662b4..63f88617 100644
--- a/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js
+++ b/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js
@@ -131,45 +131,41 @@ mivExchangeAuthPrompt2.prototype = {
When no password at al always ask. */
- var password=null;
+ var password;
+ if (this.passwordCache[username+"|"+aURL+"|"+realm]) {
+ this.logInfo("getPassword: There is a password in the passwordCache["+username+"|"+aURL+"|"+realm+"]");
+ password = this.passwordCache[username+"|"+aURL+"|"+realm];
+ }
+ else {
+ this.logInfo("getPassword: There is no password in the passwordCache["+username+"|"+aURL+"|"+realm+"]");
+ }
+ if (this.showPassword) {
+ this.logInfo("getPassword: password(1)="+password);
+ }
+ else {
+ this.logInfo("getPassword: password(1)=********");
+ }
- if (!password) {
- this.logInfo("getPassword: Going to see if there is one in the passwordManager.");
+ var oldSavedPassword;
+ if (!password) {
+ this.logInfo("getPassword: There is no password in the cache. Going to see if there is one in the passwordManager.");
var savedPassword = this.passwordManagerGet(username, aURL, realm);
if (savedPassword.result) {
this.logInfo("getPassword: There is a password stored in the passwordManager.");
password = savedPassword.password;
+ oldSavedPassword = savedPassword.password;
}
else {
this.logInfo("getPassword: There is no password stored in the passwordManager.");
}
}
-
if (this.showPassword) {
- this.logInfo("getPassword: password(1)="+password);
+ this.logInfo("getPassword: password(2)="+password);
}
else {
- this.logInfo("getPassword: password(1)=********");
+ this.logInfo("getPassword: password(2)=********");
}
-
- if (!password) {
- this.logInfo("getPassword: Going to see if there is one in the passwordCache.");
- if (this.passwordCache[username+"|"+aURL+"|"+realm]) {
- this.logInfo("getPassword: There is a password in the passwordCache["+username+"|"+aURL+"|"+realm+"]");
- password = this.passwordCache[username+"|"+aURL+"|"+realm];
- }
- else {
- this.logInfo("getPassword: There is no password in the passwordCache["+username+"|"+aURL+"|"+realm+"]");
- }
- if (this.showPassword) {
- this.logInfo("getPassword: password(2)="+password);
- }
- else {
- this.logInfo("getPassword: password(2)=********");
- }
- }
-
if ((password) && (aChannel) && (aChannel.URI.password) && (decodeURIComponent(aChannel.URI.password) != "")) {
this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. Going to see if they are the same.");
if ((password == decodeURIComponent(aChannel.URI.password)) && (!useCached)) {
@@ -177,9 +173,13 @@ mivExchangeAuthPrompt2.prototype = {
if ((this.details[aURL]) && (this.details[aURL].ntlmCount == 1)) {
this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And they are the same. But it is a first pass on an NTLM authentication. Using stored password and going to see if it can be used.");
}
- else {
+ else {
this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And they are the same. Going to ask user to provide a new password.");
- password = null;
+ var channel = aChannel.QueryInterface(Ci.nsIHttpChannel);
+ if( channel.responseStatus == 401 ){
+ password=null;
+ this.logInfo("getPassword: Login Failed, Going to ask user to provide a new password.");
+ }
}
}
else {
@@ -190,7 +190,7 @@ mivExchangeAuthPrompt2.prototype = {
this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And useCached specified.");
}
if (this.showPassword) {
- this.logInfo("getPassword: cached/store='"+password+"', on channel='"+decodeURIComponent(aChannel.URI.password)+"'.");
+ this.logInfo("getPassword: cached/store='"+password+"', on channel='"+decodeURIComponent(aChannel.URI.password)+"', useCached='"+useCached+"'.");
}
else {
this.logInfo("getPassword: cached/store='********', on channel='********'.");
@@ -230,6 +230,10 @@ mivExchangeAuthPrompt2.prototype = {
this.logInfo("getPassword: User requested to store password in passwordmanager.");
this.passwordManagerSave(username, password, aURL, realm);
}
+ else{
+ this.logInfo("getPassword: User requested not to store password in passwordmanager.");
+ this.passwordManagerRemove(username, oldSavedPassword, aURL, realm);
+ }
this.passwordCache[username+"|"+aURL+"|"+realm] = password;
this.details[aURL].showing = false;
}
@@ -367,14 +371,16 @@ mivExchangeAuthPrompt2.prototype = {
authInfo.username = username.substr(username.indexOf("\\")+1);
this.logInfo("asyncPromptAuthNotifyCallback: We have a domainname part in the username. Going to use it. domain="+authInfo.domain);
}
- else if (username.indexOf("@") > -1) {
- authInfo.username = username;
- authInfo.domain = undefined;
- this.logInfo("asyncPromptAuthNotifyCallback: We have an E-Mail address as username, therefore discarding the domain property.");
- }
else {
- this.logInfo("asyncPromptAuthNotifyCallback: We do not have a domainname part in the username. Specifying empty one.");
- authInfo.username = username;
+ if (username.indexOf("@") > -1) {
+ authInfo.username = username.substr(0,username.indexOf("@"));
+ authInfo.domain = username.substr(username.indexOf("@")+1);
+ this.logInfo("asyncPromptAuthNotifyCallback: We have a domainname part in the username. Going to use it. domain="+authInfo.domain);
+ }
+ else {
+ this.logInfo("asyncPromptAuthNotifyCallback: We do not have a domainname part in the username. Specifying empty one.");
+ authInfo.username = username;
+ }
}
}
else {
@@ -632,7 +638,43 @@ mivExchangeAuthPrompt2.prototype = {
}
return { result: false };
},
+
+ passwordManagerRemove: function _passwordManagerRemove(aUsername, aPassword, aURL, aRealm)
+ {
+ if ((!aUsername) || (!aURL) || (!aRealm)) {
+ this.logInfo("passwordManagerRemove: username or hostname or realm is empty. Not allowed!!!");
+ return;
+ }
+
+ try {
+ var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
+ var logins = loginManager.findLogins({}, aURL, null, aRealm);
+
+ var newLoginInfo = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo);
+ newLoginInfo.init(aURL, null, aRealm, aUsername, aPassword, "", "");
+
+ if (logins.length > 0) {
+ var modified = false;
+ for each (let loginInfo in logins) {
+ if (loginInfo.username == aUsername) {
+ this.logInfo("Login credentials updated:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm);
+ loginManager.removeLogin(loginInfo);
+ modified = true;
+ break;
+ }
+ }
+ if (!modified) {
+ this.logInfo("Login credentials saved:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm);
+ }
+ } else {
+ this.logInfo("Login credentials saved:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm);
+ }
+ } catch (exc) {
+ this.logInfo(exc);
+ }
+ },
+
/**
* Helper to insert/update an entry to the password manager.
*
diff --git a/locale/exchangecalendar/de/calExchangeCalendar.properties b/locale/exchangecalendar/de/calExchangeCalendar.properties
index 781cf174..9cb592b5 100644
--- a/locale/exchangecalendar/de/calExchangeCalendar.properties
+++ b/locale/exchangecalendar/de/calExchangeCalendar.properties
@@ -16,7 +16,7 @@ ewsMeetingResponsEventMessage=Besprechungsanfrage "%1$S" beantwortet mit "%2$S"
ecErrorServerCheck=Fehler bei Abfrage des Servers:%1$S (%2$S)
ecErrorAutodiscovery=Fehler bei Autodiscovery:%1$S (%2$S)
-ecErrorAutodiscoveryURLInvalid=Die Postfacheinstellungen konnten nicht durch Autodiscovery mit dem Domainnamen des Postfachs ermittelt werden. (%1$S).\nNormalerweise bedeutet dies, dass kein Autodiscovery-Server mit dem Domainnamen als Hostnamen definiert ist.
+ecErrorAutodiscoveryURLInvalid=Die Postfacheinstellungen konnten nicht durch Autodiscovery in der Domäne des Postfachs ermittelt werden. (%1$S).\nNormalerweise bedeutet dies, dass kein Autodiscovery-Server mit dem Name der Domäne als Hostname definiert ist.
ecErrorServerCheckURLInvalid=Server "%1$S" existiert nicht.
ecErrorServerAndMailboxCheck=Fehler bei der Abfrage des Servers und des Postfachs:%1$S (Code: %2$S)
diff --git a/locale/exchangecalendar/de/delegate-calendar-dialog.dtd b/locale/exchangecalendar/de/delegate-calendar-dialog.dtd
index 52eb16c2..760cf541 100644
--- a/locale/exchangecalendar/de/delegate-calendar-dialog.dtd
+++ b/locale/exchangecalendar/de/delegate-calendar-dialog.dtd
@@ -7,10 +7,10 @@
-
+
-
-
+
+
diff --git a/locale/exchangecalendar/de/delegate-folder.dtd b/locale/exchangecalendar/de/delegate-folder.dtd
index 2ce88d16..cf59c8d1 100644
--- a/locale/exchangecalendar/de/delegate-folder.dtd
+++ b/locale/exchangecalendar/de/delegate-folder.dtd
@@ -1,45 +1,45 @@
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/locale/exchangecalendar/de/exchangeSettings.dtd b/locale/exchangecalendar/de/exchangeSettings.dtd
index 37084b31..7189b21f 100644
--- a/locale/exchangecalendar/de/exchangeSettings.dtd
+++ b/locale/exchangecalendar/de/exchangeSettings.dtd
@@ -44,6 +44,8 @@
-
-
-
+
+
+
+
+
diff --git a/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd b/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd
index c1790510..2e86f2e2 100644
--- a/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd
+++ b/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd
@@ -41,7 +41,7 @@
-
+
diff --git a/locale/exchangecalendar/de/manageEWSAccounts.dtd b/locale/exchangecalendar/de/manageEWSAccounts.dtd
index b3ac5336..ab937944 100644
--- a/locale/exchangecalendar/de/manageEWSAccounts.dtd
+++ b/locale/exchangecalendar/de/manageEWSAccounts.dtd
@@ -7,7 +7,7 @@
-
+
diff --git a/locale/exchangecalendar/de/rtews.dtd b/locale/exchangecalendar/de/rtews.dtd
index b60f11fd..00af607b 100755
--- a/locale/exchangecalendar/de/rtews.dtd
+++ b/locale/exchangecalendar/de/rtews.dtd
@@ -1,15 +1,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/exchangecalendar/de/timezonePreference.dtd b/locale/exchangecalendar/de/timezonePreference.dtd
index a61aa649..e0dd46ac 100644
--- a/locale/exchangecalendar/de/timezonePreference.dtd
+++ b/locale/exchangecalendar/de/timezonePreference.dtd
@@ -1 +1 @@
-
+
diff --git a/locale/exchangecalendar/en-US/exchangeSettings.dtd b/locale/exchangecalendar/en-US/exchangeSettings.dtd
index 7788d246..e2150494 100644
--- a/locale/exchangecalendar/en-US/exchangeSettings.dtd
+++ b/locale/exchangecalendar/en-US/exchangeSettings.dtd
@@ -48,4 +48,5 @@
+
diff --git a/locale/exchangecalendar/fr-FR/exchangeSettings.dtd b/locale/exchangecalendar/fr-FR/exchangeSettings.dtd
index f79090d6..539338e2 100644
--- a/locale/exchangecalendar/fr-FR/exchangeSettings.dtd
+++ b/locale/exchangecalendar/fr-FR/exchangeSettings.dtd
@@ -50,3 +50,4 @@
+
diff --git a/locale/exchangecalendar/ja-JP/exchangeSettings.dtd b/locale/exchangecalendar/ja-JP/exchangeSettings.dtd
index ac3f37d4..480e60b9 100644
--- a/locale/exchangecalendar/ja-JP/exchangeSettings.dtd
+++ b/locale/exchangecalendar/ja-JP/exchangeSettings.dtd
@@ -49,3 +49,4 @@
+
diff --git a/locale/exchangecalendar/nl/exchangeSettings.dtd b/locale/exchangecalendar/nl/exchangeSettings.dtd
index b5706bfd..476b4043 100644
--- a/locale/exchangecalendar/nl/exchangeSettings.dtd
+++ b/locale/exchangecalendar/nl/exchangeSettings.dtd
@@ -50,3 +50,4 @@
+
diff --git a/locale/exchangecalendar/ru/exchangeSettings.dtd b/locale/exchangecalendar/ru/exchangeSettings.dtd
index 521eb830..0578e03f 100644
--- a/locale/exchangecalendar/ru/exchangeSettings.dtd
+++ b/locale/exchangecalendar/ru/exchangeSettings.dtd
@@ -49,3 +49,4 @@
+
diff --git a/locale/exchangecalendar/sv/exchangeSettings.dtd b/locale/exchangecalendar/sv/exchangeSettings.dtd
index 13fa28b7..15e3cf77 100644
--- a/locale/exchangecalendar/sv/exchangeSettings.dtd
+++ b/locale/exchangecalendar/sv/exchangeSettings.dtd
@@ -48,3 +48,4 @@
+
diff --git a/locale/exchangecalendar/tr/exchangeSettings.dtd b/locale/exchangecalendar/tr/exchangeSettings.dtd
index 1cfd499b..fec7ab5b 100644
--- a/locale/exchangecalendar/tr/exchangeSettings.dtd
+++ b/locale/exchangecalendar/tr/exchangeSettings.dtd
@@ -49,3 +49,4 @@
+