diff --git a/src/views/email.html b/src/views/email.html
index 542f52d03..11eec6dee 100644
--- a/src/views/email.html
+++ b/src/views/email.html
@@ -364,13 +364,13 @@
- Emails sent to non existing addresses will be forwarded to the following accounts:
+ Emails sent to non existing addresses will be forwarded to the following mailboxes:
diff --git a/src/views/email.js b/src/views/email.js
index 998b1ce91..44f30586b 100644
--- a/src/views/email.js
+++ b/src/views/email.js
@@ -45,18 +45,25 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
};
$scope.catchall = {
- addresses: [],
- availableAddresses: [],
+ mailboxes: [],
busy: false,
submit: function () {
$scope.catchall.busy = true;
- Client.setCatchallAddresses($scope.selectedDomain.domain, $scope.catchall.addresses, function (error) {
+ var addresses = $scope.catchall.mailboxes.map(function (m) { return m.name; });
+
+ Client.setCatchallAddresses($scope.selectedDomain.domain, addresses, function (error) {
if (error) console.error('Unable to add catchall address.', error);
$scope.catchall.busy = false;
});
+ },
+
+ refresh: function () {
+ $scope.catchall.mailboxes = $scope.selectedDomain.mailConfig.catchAll.map(function (name) {
+ return $scope.mailboxes.mailboxes.find(function (m) { return m.name === name; });
+ }).filter(function (m) { return !!m; });
}
};
@@ -161,11 +168,15 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
}
},
- refresh: function () {
+ refresh: function (callback) {
+ callback = typeof callback === 'function' ? callback : function (error) { if (error) return console.error(error); };
+
Client.listMailingLists($scope.selectedDomain.domain, function (error, result) {
- if (error) return console.error(error);
+ if (error) return callback(error);
$scope.mailinglists.mailinglists = result;
+
+ callback();
});
}
};
@@ -229,9 +240,13 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
}
$scope.mailboxes.add.reset();
- $scope.mailboxes.refresh();
+ $scope.mailboxes.refresh(function (error) {
+ if (error) return console.error(error);
- $('#mailboxAddModal').modal('hide');
+ $scope.catchall.refresh();
+
+ $('#mailboxAddModal').modal('hide');
+ });
});
}
},
@@ -301,25 +316,33 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
if (error) return console.error(error);
$scope.mailboxes.remove.mailbox = null;
- $scope.mailboxes.refresh();
+ $scope.mailboxes.refresh(function (error) {
+ if (error) return console.error(error);
- $('#mailboxRemoveModal').modal('hide');
+ $scope.catchall.refresh();
+
+ $('#mailboxRemoveModal').modal('hide');
+ });
});
}
},
- refresh: function () {
+ refresh: function (callback) {
+ callback = typeof callback === 'function' ? callback : function (error) { if (error) return console.error(error); };
+
Client.getMailboxes($scope.selectedDomain.domain, function (error, mailboxes) {
- if (error) return console.error(error);
+ if (error) return callback(error);
Client.listAliases($scope.selectedDomain.domain, function (error, aliases) {
- if (error) return console.error(error);
+ if (error) return callback(error);
$scope.mailboxes.mailboxes = mailboxes.map(function (m) {
m.aliases = aliases.filter(function (a) { return a.aliasTarget === m.name; }).map(function (a) { return a.name; }).join(',');
m.owner = $scope.users.find(function (u) { return u.id === m.ownerId; });
return m;
});
+
+ callback();
});
});
}
@@ -513,20 +536,16 @@ angular.module('Application').controller('EmailController', ['$scope', '$locatio
}
}
- // catch-all, only allow users with a Cloudron email address
- $scope.catchall.availableAddresses = $scope.users.filter(function (u) { return !!u.username && !!u.email; }).map(function (u) { return u.username; });
-
- // dedupe in case to avoid angular breakage
- $scope.catchall.addresses = mailConfig.catchAll.filter(function(item, pos, self) {
- return self.indexOf(item) == pos;
- });
-
// amend to selected domain to be available for the UI
$scope.selectedDomain.mailConfig = mailConfig;
$scope.selectedDomain.mailStatus = {};
- $scope.mailboxes.refresh();
- $scope.mailinglists.refresh();
+ $scope.mailboxes.refresh(function (error) {
+ if (error) console.error(error);
+
+ $scope.mailinglists.refresh();
+ $scope.catchall.refresh();
+ });
// we will fetch the status without blocking the ui
Client.getMailStatusForDomain($scope.selectedDomain.domain, function (error, mailStatus) {