2020-07-16 18:51:29 +02:00
<!-- Modal subscription -->
< div class = "modal fade" id = "subscriptionRequiredModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.subscriptionDialog.title' | tr }}< / h4 >
2020-07-16 18:51:29 +02:00
< / div >
< div class = "modal-body" >
2020-11-12 22:18:30 +01:00
< p > {{ 'email.subscriptionDialog.description' | tr }}< / p >
2020-07-16 18:51:29 +02:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-success" ng-click = "openSubscriptionSetup()" > {{ 'email.subscriptionDialog.setupAction' | tr }}< / button >
2020-07-16 18:51:29 +02:00
< / div >
< / div >
< / div >
< / div >
2018-01-22 13:01:38 -08:00
<!-- Modal enable email -->
< div class = "modal fade" id = "enableEmailModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.enableEmailDialog.title' | tr:{ domain: domain.domain } }}< / h4 >
2018-01-22 13:01:38 -08:00
< / div >
2018-05-29 17:17:53 +02:00
< div class = "modal-body" >
2023-01-24 13:58:55 +01:00
< p ng-bind-html = "'email.enableEmailDialog.description' | tr:{ domain: domain.domain, requiredPortsDocsLink: 'https://docs.cloudron.io/email/#required-ports' }" > < / p >
< p class = "text-warning" ng-show = "domain.provider === 'noop' || domain.provider === 'manual'" ng-bind-html = "'email.enableEmailDialog.noProviderInfo' | tr" > < / p >
< p class = "text-danger" ng-show = "adminDomain.provider === 'cloudflare'" ng-bind-html = "'email.enableEmailDialog.cloudflareInfo' | tr:{ adminDomain: config.adminDomain, mailFqdn: config.mailFqdn }" > < / p >
2020-02-11 21:06:34 +01:00
< div ng-hide = "domain.provider === 'noop' || domain.provider === 'manual'" >
2019-05-10 23:47:36 +02:00
< p >
< label class = "control-label" >
2020-11-12 22:18:30 +01:00
< input type = "checkbox" ng-model = "incomingEmail.setupDns" > {{ 'email.enableEmailDialog.setupDnsCheckbox' | tr }}
2019-05-10 23:47:36 +02:00
< / label >
< / p >
2021-10-24 21:20:33 -07:00
< span ng-bind-html = "'email.enableEmailDialog.setupDnsInfo' | tr:{ importEmailDocsLink: 'https://docs.cloudron.io/guides/import-email' }" > < / span >
2018-05-29 17:17:53 +02:00
< / div >
2018-01-22 13:01:38 -08:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-success" ng-click = "incomingEmail.enable()" > {{ 'email.enableEmailDialog.enableAction' | tr }}< / button >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
< / div >
< / div >
2018-05-06 23:36:40 -07:00
<!-- Modal disable email -->
< div class = "modal fade" id = "disableEmailModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.disableEmailDialog.title' | tr:{ domain: domain.domain } }}< / h4 >
2018-05-06 23:36:40 -07:00
< / div >
< div class = "modal-body" >
2020-11-12 22:18:30 +01:00
< div ng-bind-html = "'email.disableEmailDialog.description' | tr:{ domain: domain.domain }" > < / div >
2019-01-31 12:24:27 -08:00
< br / >
2018-05-06 23:36:40 -07:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-danger" ng-click = "incomingEmail.disable()" > {{ 'email.disableEmailDialog.disableAction' | tr }}< / button >
2018-05-06 23:36:40 -07:00
< / div >
< / div >
< / div >
< / div >
2018-04-09 16:12:18 +02:00
<!-- Modal add mailbox -->
2018-04-09 15:56:20 +02:00
< div class = "modal fade" id = "mailboxAddModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.addMailboxDialog.title' | tr }}< / h4 >
2018-04-09 15:56:20 +02:00
< / div >
< div class = "modal-body" >
< form name = "mailboxadd_form" role = "form" ng-submit = "mailboxes.add.submit()" autocomplete = "off" >
< input type = "password" style = "display: none;" >
2018-05-11 11:07:12 -07:00
< div class = "form-group" ng-class = "{ 'has-error': mailboxes.add.error }" >
2020-11-12 22:18:30 +01:00
< label class = "control-label" > {{ 'email.addMailboxDialog.name' | tr }}< / label >
2018-05-11 11:07:12 -07:00
< div class = "control-label" ng-show = "mailboxes.add.error" >
< small > {{ mailboxes.add.error.message }}< / small >
2018-04-09 16:21:32 +02:00
< / div >
2018-04-09 15:56:20 +02:00
< div class = "input-group form-inline" style = "margin-top: 10px;" >
2020-11-12 22:18:30 +01:00
< input type = "text" class = "form-control" ng-model = "mailboxes.add.name" required autofocus autocomplete = "off" / >
2020-02-11 21:06:34 +01:00
< div class = "input-group-addon" > @{{ domain.domain }}< / div >
2018-04-09 15:58:25 +02:00
< / div >
2018-04-09 15:56:20 +02:00
< / div >
< div class = "form-group" >
2020-11-12 22:18:30 +01:00
< label class = "control-label" > {{ 'email.addMailboxDialog.owner' | tr }}< / label >
2020-11-13 09:57:22 -08:00
< div class = "control-label" >
2020-11-13 13:21:01 -08:00
< multiselect ng-model = "mailboxes.add.owner" options = "o.display for o in owners" data-compare-by = "name" data-header-key = "header" data-divider-key = "divider" data-multiple = "false" filter-after-rows = "5" scroll-after-rows = "10" > < / multiselect >
2020-11-13 09:57:22 -08:00
< / div >
2018-04-09 15:56:20 +02:00
< / div >
2020-11-23 21:22:15 -08:00
< input class = "hide" type = "submit" ng-disabled = "mailboxadd_form.$invalid || mailboxes.add.busy || !mailboxes.add.owner" / >
2018-04-09 15:56:20 +02:00
< / form >
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
2020-11-23 21:22:15 -08:00
< button type = "button" class = "btn btn-success" ng-click = "mailboxes.add.submit()" ng-disabled = "mailboxadd_form.$invalid || mailboxes.add.busy || !mailboxes.add.owner" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailboxes.add.busy" > < / i > {{ 'main.dialog.save' | tr }}< / button >
2018-04-09 15:56:20 +02:00
< / div >
< / div >
< / div >
< / div >
2018-04-09 12:42:14 +02:00
<!-- Modal edit mailbox -->
< div class = "modal fade" id = "mailboxEditModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.editMailboxDialog.title' | tr:{ name: mailboxes.edit.name, domain: domain.domain } }}< / h4 >
2018-04-09 12:42:14 +02:00
< / div >
< div class = "modal-body" >
2024-07-26 18:57:03 +02:00
< div class = "form-group" >
< label class = "control-label" > {{ 'email.editMailboxDialog.owner' | tr }}< / label >
< div class = "control-label" >
< multiselect ng-model = "mailboxes.edit.owner" options = "o.display for o in owners" data-compare-by = "name" data-header-key = "header" data-divider-key = "divider" data-multiple = "false" filter-after-rows = "5" scroll-after-rows = "10" > < / multiselect >
2018-04-09 12:42:14 +02:00
< / div >
2024-07-26 18:57:03 +02:00
< / div >
2020-04-19 19:44:45 -07:00
2024-07-26 18:57:03 +02:00
< div class = "form-group aliases" >
< label class = "control-label" > {{ 'email.editMailboxDialog.aliases' | tr }}< / label >
< div class = "has-error" ng-show = "mailboxes.edit.error" > {{ mailboxes.edit.error.message }}< / div >
2020-04-19 19:44:45 -07:00
2024-07-26 18:57:03 +02:00
< div class = "row" ng-repeat = "alias in mailboxes.edit.aliases | orderBy:'reversedSortingNotation'" >
< div class = "col col-lg-11" >
< div class = "input-group" >
< input type = "text" class = "form-control input-sm" ng-model = "alias.name" >
2020-04-19 19:44:45 -07:00
2024-07-26 18:57:03 +02:00
< div class = "input-group-btn" >
< button type = "button" class = "btn btn-default btn-sm dropdown-toggle" data-toggle = "dropdown" >
< span > @{{ alias.domain }}< / span >
< span class = "caret" > < / span >
< / button >
< ul class = "dropdown-menu dropdown-menu-right" role = "menu" >
< li ng-repeat = "incomingDomain in incomingDomains" >
< a href = "" ng-click = "alias.domain = incomingDomain.domain" > {{ incomingDomain.domain }}< / a >
< / li >
< / ul >
2020-04-19 19:44:45 -07:00
< / div >
< / div >
< / div >
2024-07-26 18:57:03 +02:00
< div class = "col col-lg-1" >
< button class = "btn btn-danger btn-sm" ng-click = "mailboxes.edit.delAlias($event, alias)" > < i class = "far fa-trash-alt" > < / i > < / button >
2018-04-09 12:42:14 +02:00
< / div >
< / div >
2024-07-26 18:57:03 +02:00
< div ng-show = "mailboxes.edit.aliases.length === 0" >
{{ 'email.editMailboxDialog.noAliases' | tr }} < a href = "" ng-click = "mailboxes.edit.addAlias($event)" > {{ 'email.editMailboxDialog.addAliasAction' | tr }}< / a >
2022-08-18 09:11:15 +02:00
< / div >
2024-07-26 18:57:03 +02:00
< div ng-show = "mailboxes.edit.aliases.length > 0" style = "margin-top: 5px;" >
< a href = "" ng-click = "mailboxes.edit.addAlias($event)" > {{ 'email.editMailboxDialog.addAnotherAliasAction' | tr }}< / a >
2021-10-08 10:20:17 -07:00
< / div >
2024-07-26 18:57:03 +02:00
< / div >
2021-10-08 10:20:17 -07:00
2024-07-26 18:57:03 +02:00
< div class = "form-group" >
< label for = "storageQuota" >
< input id = "storageQuota" type = "checkbox" ng-model = "mailboxes.edit.storageQuotaEnabled" >
{{ 'email.editMailboxDialog.enableStorageQuota' | tr }} < b ng-hide = "!mailboxes.edit.storageQuotaEnabled" > : {{ mailboxes.edit.storageQuota | prettyDecimalSize }}< / b >
< / input >
< / label >
< input type = "range" id = "storageQuota" ng-disabled = "!mailboxes.edit.storageQuotaEnabled" ng-model = "mailboxes.edit.storageQuota" step = "500000000" min = "{{ storageQuotaTicks[0] }}" max = "{{ storageQuotaTicks[storageQuotaTicks.length-1] }}" list = "storageQuotaTicks" / >
< datalist id = "storageQuotaTicks" >
< option ng-repeat = "quota in storageQuotaTicks" value = "{{ quota }}" > < / option >
< / datalist >
< / div >
2021-04-14 22:37:59 -07:00
2024-07-26 18:57:03 +02:00
< div class = "checkbox" >
< label >
< input type = "checkbox" ng-model = "mailboxes.edit.enablePop3" > {{ 'email.updateMailboxDialog.enablePop3' | tr }}< / input >
< / label >
< / div >
< div class = "checkbox" >
< label >
< input type = "checkbox" ng-model = "mailboxes.edit.active" > {{ 'email.updateMailboxDialog.activeCheckbox' | tr }}< / input >
< / label >
< / div >
2018-04-09 12:42:14 +02:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
2024-07-26 18:57:03 +02:00
< button type = "button" class = "btn btn-success" ng-click = "mailboxes.edit.submit()" ng-disabled = "mailboxes.edit.busy || !mailboxes.edit.owner" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailboxes.edit.busy" > < / i > {{ 'main.dialog.save' | tr }}< / button >
2018-04-09 12:42:14 +02:00
< / div >
< / div >
< / div >
< / div >
2018-04-05 21:22:07 +02:00
<!-- Modal remove mailbox -->
< div class = "modal fade" id = "mailboxRemoveModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.deleteMailboxDialog.title' | tr:{ name: mailboxes.remove.mailbox.name, domain: domain.domain } }}< / h4 >
2018-04-05 21:22:07 +02:00
< / div >
< div class = "modal-body" >
2020-11-12 22:18:30 +01:00
< div ng-bind-html = "'email.deleteMailboxDialog.description' | tr" > < / div >
< br / >
< div class = "checkbox" >
2020-07-27 22:36:38 -07:00
< label >
2020-11-12 22:18:30 +01:00
< input type = "checkbox" ng-model = "mailboxes.remove.deleteMails" > {{ 'email.deleteMailboxDialog.purgeMailboxCheckbox' | tr }}< / input >
2020-07-27 22:36:38 -07:00
< / label >
2020-11-12 22:18:30 +01:00
< / div >
2018-04-05 21:22:07 +02:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-danger" ng-click = "mailboxes.remove.submit()" ng-disabled = "mailboxes.remove.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailboxes.remove.busy" > < / i > {{ 'email.deleteMailboxDialog.deleteAction' | tr }}< / button >
2018-04-05 21:22:07 +02:00
< / div >
< / div >
< / div >
< / div >
2018-04-09 16:12:18 +02:00
<!-- Modal add mailinglist -->
< div class = "modal fade" id = "mailinglistAddModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.addMailinglistDialog.title' | tr }}< / h4 >
2018-04-09 16:12:18 +02:00
< / div >
< div class = "modal-body" >
< form name = "mailinglistadd_form" role = "form" ng-submit = "mailinglists.add.submit()" autocomplete = "off" >
< input type = "password" style = "display: none;" >
2019-09-11 14:09:53 -07:00
< div class = "form-group" ng-class = "{ 'has-error': mailinglists.add.error.name }" >
2021-03-31 14:09:17 +02:00
< label class = "control-label" > {{ 'email.addMailinglistDialog.name' | tr }}< / label >
2019-09-11 14:09:53 -07:00
< div class = "control-label" ng-show = "mailinglists.add.error.name" > < small > {{ mailinglists.add.error.name }}< / small > < / div >
2018-04-09 16:12:18 +02:00
< div class = "input-group form-inline" style = "margin-top: 10px;" >
2020-11-12 22:18:30 +01:00
< input type = "text" class = "form-control" ng-model = "mailinglists.add.name" required autofocus autocomplete = "off" / >
2020-02-11 21:06:34 +01:00
< div class = "input-group-addon" > @{{ domain.domain }}< / div >
2018-04-09 16:12:18 +02:00
< / div >
< / div >
< div class = "form-group" >
2020-11-12 22:18:30 +01:00
< label class = "control-label" > {{ 'email.addMailinglistDialog.members' | tr }}< / label > < br / >
2019-09-11 14:09:53 -07:00
< div class = "has-error control-label" ng-show = "mailinglists.add.error.members" > < small > {{ mailinglists.add.error.members }}< / small > < / div >
2020-03-06 20:43:57 -08:00
< textarea ng-model = "mailinglists.add.membersTxt" class = "form-control" rows = "5" > < / textarea >
2020-11-12 22:18:30 +01:00
< small > {{ 'email.addMailinglistDialog.membersInfo' | tr }}< / small >
2018-04-09 16:12:18 +02:00
< / div >
2020-04-17 17:37:19 -07:00
< div class = "checkbox" >
< label >
2020-11-12 22:18:30 +01:00
< input type = "checkbox" ng-model = "mailinglists.add.membersOnly" > {{ 'email.addMailinglistDialog.membersOnlyCheckbox' | tr }}< / input >
2020-04-17 17:37:19 -07:00
< / label >
< / div >
2019-09-11 14:09:53 -07:00
< input class = "hide" type = "submit" ng-disabled = "mailinglistadd_form.$invalid || mailinglists.add.membersTxt.length === 0 || mailinglists.add.busy" / >
2018-04-09 16:12:18 +02:00
< / form >
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-success" ng-click = "mailinglists.add.submit()" ng-disabled = "mailinglistadd_form.$invalid || mailinglists.add.membersTxt.length === 0 || mailinglists.add.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailinglists.add.busy" > < / i > {{ 'main.dialog.save' | tr }}< / button >
2018-04-09 16:12:18 +02:00
< / div >
< / div >
< / div >
< / div >
2018-04-09 15:01:12 +02:00
<!-- Modal edit mailinglist -->
< div class = "modal fade" id = "mailinglistEditModal" tabindex = "-1" role = "dialog" >
2018-04-09 15:08:05 +02:00
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.editMailinglistDialog.title' | tr:{ name: mailinglists.edit.name, domain: domain.domain } }}< / h4 >
2018-04-09 15:08:05 +02:00
< / div >
< div class = "modal-body" >
< form name = "mailinglistedit_form" role = "form" ng-submit = "mailinglists.edit.submit()" autocomplete = "off" >
< input type = "password" style = "display: none;" >
2019-09-11 14:09:53 -07:00
< div class = "form-group" ng-class = "{ 'has-error': mailinglists.edit.error.members }" >
2020-11-12 22:18:30 +01:00
< label class = "control-label" > {{ 'email.addMailinglistDialog.members' | tr }}< / label > < br / >
2019-09-11 14:09:53 -07:00
< div class = "has-error control-label" ng-show = "mailinglists.edit.error.members" > < small > {{ mailinglists.edit.error.members }}< / small > < / div >
2022-01-10 22:08:55 -08:00
< textarea ng-model = "mailinglists.edit.membersTxt" class = "form-control" rows = "5" autofocus > < / textarea >
2020-11-12 22:18:30 +01:00
< small > {{ 'email.addMailinglistDialog.membersInfo' | tr }}< / small >
2018-04-09 15:08:05 +02:00
< / div >
2020-04-17 17:37:19 -07:00
< div class = "checkbox" >
< label >
2020-11-12 22:18:30 +01:00
< input type = "checkbox" ng-model = "mailinglists.edit.membersOnly" > {{ 'email.addMailinglistDialog.membersOnlyCheckbox' | tr }}< / input >
2020-04-17 17:37:19 -07:00
< / label >
< / div >
2021-04-14 22:37:59 -07:00
< div class = "checkbox" >
< label >
< input type = "checkbox" ng-model = "mailinglists.edit.active" > {{ 'email.updateMailinglistDialog.activeCheckbox' | tr }}< / input >
< / label >
< / div >
2018-04-09 15:08:05 +02:00
< input class = "hide" type = "submit" ng-disabled = "mailinglistedit_form.$invalid || mailinglists.edit.busy" / >
< / form >
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-success" ng-click = "mailinglists.edit.submit()" ng-disabled = "mailinglistedit_form.$invalid || mailinglists.edit.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailinglists.edit.busy" > < / i > {{ 'main.dialog.save' | tr }}< / button >
2018-04-09 15:01:12 +02:00
< / div >
< / div >
< / div >
2018-04-09 15:08:05 +02:00
< / div >
2018-04-09 15:01:12 +02:00
2018-04-06 16:43:43 +02:00
<!-- Modal remove mailinglist -->
< div class = "modal fade" id = "mailinglistRemoveModal" tabindex = "-1" role = "dialog" >
2018-04-09 15:08:05 +02:00
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2020-11-12 22:18:30 +01:00
< h4 class = "modal-title" > {{ 'email.deleteMailinglistDialog.title' | tr:{ name: mailinglists.remove.list.name, domain: domain.domain } }}< / h4 >
2018-04-09 15:08:05 +02:00
< / div >
< div class = "modal-body" >
2020-11-12 22:18:30 +01:00
< p ng-bind-html = "'email.deleteMailinglistDialog.description' | tr:{ name: mailinglists.remove.list.name, domain: domain.domain }" > < / p > `
2018-04-09 15:08:05 +02:00
< / div >
< div class = "modal-footer" >
2020-11-12 22:18:30 +01:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.cancel' | tr }}< / button >
< button type = "button" class = "btn btn-danger" ng-click = "mailinglists.remove.submit()" ng-disabled = "mailinglists.remove.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailinglist.remove.busy" > < / i > {{ 'email.deleteMailinglistDialog.deleteAction' | tr }}< / button >
2018-04-06 16:43:43 +02:00
< / div >
< / div >
< / div >
2018-04-09 15:08:05 +02:00
< / div >
2018-04-06 16:43:43 +02:00
2021-12-02 14:49:35 -08:00
<!-- Modal how to connect -->
< div class = "modal fade" id = "howToConnectInfoModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 > {{ 'email.howToConnectInfoModal' | tr }}< / h4 >
< / div >
< div class = "modal-body" >
< p ng-bind-html = " 'email.incoming.howToConnectDescription' | tr:{ domain: domain.domain } " > < / p >
< p > < b > {{ 'email.incoming.incomingUserInfo' | tr }}< / b > < br / > < i > mailboxname< / i > @{{ domain.domain }}< / p >
< p > < b > {{ 'email.incoming.incomingPasswordInfo' | tr }}< / b > < br / > {{ 'email.incoming.incomingPasswordUsage' | tr }}< / p >
< p > < b > {{ 'email.incoming.incomingServerInfo' | tr }}< / b > < br / > {{ 'email.incoming.server' | tr }}: < span ng-click-select > {{config.mailFqdn}}< / span > < br / > {{ 'email.incoming.port' | tr }}: 993 (TLS)< / p >
< p > < b > {{ 'email.incoming.outgointServerInfo' | tr }}< / b > < br / > {{ 'email.incoming.server' | tr }}: < span ng-click-select > {{config.mailFqdn}}< / span > < br / > {{ 'email.incoming.port' | tr }}: 587 (STARTTLS) or 465 (TLS)< / p >
< p > < b > {{ 'email.incoming.sieveServerInfo' | tr }}< / b > < br / > {{ 'email.incoming.server' | tr }}: < span ng-click-select > {{config.mailFqdn}}< / span > < br / > {{ 'email.incoming.port' | tr }}: 4190 (STARTTLS)< / p >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > {{ 'main.dialog.close' | tr }}< / button >
< / div >
< / div >
< / div >
< / div >
2018-01-23 12:30:35 +01:00
< div ng-show = "!ready" class = "loading-banner" >
2018-11-16 17:03:21 +01:00
< h1 > < i class = "fa fa-circle-notch fa-spin" > < / i > < / h1 >
2018-01-23 12:30:35 +01:00
< / div >
2021-12-02 12:44:30 -08:00
< div class = "content" ng-show = "ready" >
2020-11-12 22:18:30 +01:00
< a href = "/#/email" class = "back-to-view-link" > < i class = "fas fa-arrow-left" > < / i > {{ 'email.backAction' | tr }}< / a >
2020-02-11 21:06:34 +01:00
< br / >
2018-01-22 13:01:38 -08:00
< div class = "text-left" >
2021-12-02 14:49:35 -08:00
< h3 >
{{ 'email.config.title' | tr:{ domain: domain.domain } }}
< div class = "dropdown pull-right" style = "display: inline-block" >
< button class = "btn btn-sm btn-default dropdown-toggle" type = "button" data-toggle = "dropdown" uib-tooltip = "{{ 'app.docsActionTooltip' | tr }}" tooltip-append-to-body = "true" tooltip-placement = "bottom" >
< i class = "fas fa-book" > < / i >
< span class = "caret" > < / span >
< / button >
< ul class = "dropdown-menu dropdown-menu-right" >
< li > < a href = "https://docs.cloudron.io/email/" target = "_blank" > {{ 'app.docsAction' | tr }}< / a > < / li >
2024-07-08 15:19:00 +02:00
< li ng-class = "{ 'disabled': !domain.mailConfig.enabled }" > < a href = "" ng-click = "domain.mailConfig.enabled ? howToConnectInfo.show() : null" > {{ 'email.config.clientConfiguration' | tr }}< / a > < / li >
2021-12-02 14:49:35 -08:00
< / ul >
< / div >
< / h3 >
2018-01-22 13:01:38 -08:00
< / div >
2020-02-11 21:06:34 +01:00
< br / >
2021-11-19 15:45:16 +01:00
< uib-tabset active = "activeTab" >
< uib-tab index = "'mailboxes'" select = "setView('mailboxes')" heading = "{{ 'email.incoming.tabTitle' | tr }}" >
2018-05-23 22:00:48 -07:00
< div class = "card card-large" style = "margin-bottom: 15px;" >
2021-11-19 10:12:39 +01:00
< h4 > {{ 'email.incoming.title' | tr }}< / h4 >
2021-12-02 14:49:35 -08:00
< p ng-show = "domain.mailConfig.enabled" > {{ 'email.incoming.enabled' | tr }}< / p >
< p ng-hide = "domain.mailConfig.enabled" > {{ 'email.incoming.disabled' | tr }}< / p >
2021-12-02 12:44:30 -08:00
2021-11-19 10:12:39 +01:00
< div class = "row" >
2021-12-02 12:44:30 -08:00
< div class = "col-md-12" >
2021-12-02 14:52:55 -08:00
< button class = "pull-right" ng-class = "domain.mailConfig.enabled ? 'btn btn-danger' : 'btn btn-primary'" ng-click = "incomingEmail.toggleEmailEnabled()" ng-disabled = "incomingEmail.busy" ng-show = "user.isAtLeastAdmin" >
2021-11-19 10:12:39 +01:00
< i class = "fa fa-circle-notch fa-spin" ng-show = "incomingEmail.busy" > < / i >
{{ domain.mailConfig.enabled ? ('email.incoming.disableAction' | tr) : ('email.incoming.enableAction' | tr) }}
< / button >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< / div >
2019-10-22 12:47:32 +02:00
2021-11-19 10:12:39 +01:00
< br / >
2019-10-22 12:47:32 +02:00
2021-11-19 10:12:39 +01:00
< div class = "text-left" >
< h3 style = "margin-bottom: 15px;" > {{ 'email.incoming.mailboxes.title' | tr }}
< button class = "btn btn-primary btn-outline pull-right" ng-click = "mailboxes.add.show()" ng-disabled = "!domain.mailConfig.enabled" tooltip-enable = "!domain.mailConfig.enabled" uib-tooltip = "{{ 'email.incoming.mailboxes.disabledTooltip' | tr }}" > < i class = "fa fa-inbox" > < / i > {{ 'email.incoming.mailboxes.addAction' | tr }}< / button >
< input class = "form-control pull-right" style = "width: 200px;" placeholder = "{{ 'main.searchPlaceholder' | tr }}" type = "text" ng-model = "mailboxes.search" ng-model-options = "{ debounce: 1000 }" ng-change = "mailboxes.updateFilter()" / >
< / h3 >
< / div >
< div class = "card card-large" style = "margin-bottom: 15px;" >
< div class = "row" >
< div class = "col-md-12" >
< table class = "table table-hover" >
< thead >
< tr >
< th > {{ 'email.incoming.mailboxes.name' | tr }}< / th >
< th > {{ 'email.incoming.mailboxes.owner' | tr }}< / th >
< th > {{ 'email.incoming.mailboxes.aliases' | tr }}< / th >
< th > {{ 'email.incoming.mailboxes.usage' | tr }}< / th >
< th class = "text-right" > {{ 'main.actions' | tr }}< / th >
< / tr >
< / thead >
< tbody >
< tr ng-repeat = "mailbox in mailboxes.mailboxes | filter:mailboxes.search" ng-class = "{'text-muted': !mailbox.active}" >
< td class = "hand" ng-click = "mailboxes.edit.show(mailbox)" >
{{ mailbox.name }}
< / td >
< td class = "hand" ng-click = "mailboxes.edit.show(mailbox)" >
{{ mailbox.ownerDisplayName }}
< / td >
2021-12-14 18:02:20 +01:00
< td class = "hand elide-table-cell" ng-click = "mailboxes.edit.show(mailbox)" >
2021-11-19 10:12:39 +01:00
< span ng-repeat = "alias in mailbox.aliases" > {{ alias.name + '@' + alias.domain }}< / span >
< / td >
< td class = "hand no-wrap" ng-click = "mailboxes.edit.show(mailbox)" >
2023-01-24 18:46:42 +01:00
< span ng-show = "mailUsage !== null" >
{{ mailUsage[mailbox.fullName].quotaValue | prettyDecimalSize }} < span ng-show = "mailUsage[mailbox.fullName].quotaLimit" > / {{ mailUsage[mailbox.fullName].quotaLimit | prettyDecimalSize }}< / span >
< / span >
< span ng-show = "mailUsage === null" >
{{ 'main.loadingPlaceholder' | tr }} ...
< / span >
2021-11-19 10:12:39 +01:00
< / td >
< td class = "text-right no-wrap" >
< button class = "btn btn-xs btn-default" ng-click = "mailboxes.edit.show(mailbox)" > < i class = "fa fa-pencil-alt" > < / i > < / button >
< button class = "btn btn-xs btn-danger" ng-click = "mailboxes.remove.show(mailbox)" > < i class = "far fa-trash-alt" > < / i > < / button >
< / td >
< / tr >
< / tbody >
< / table >
2021-12-09 14:58:29 +01:00
< div class = "pull-right" >
< button class = "btn btn-default btn-outline btn-xs" ng-click = "mailboxes.showPrevPage()" ng-class = "{ 'btn-primary': mailboxes.currentPage > 1 }" ng-disabled = "mailboxes.busy || mailboxes.currentPage <= 1" > < i class = "fa fa-angle-double-left" > < / i > {{ 'main.pagination.prev' | tr }}< / button >
< button class = "btn btn-default btn-outline btn-xs" ng-click = "mailboxes.showNextPage()" ng-class = "{ 'btn-primary': mailboxes.perPage <= mailboxes.mailboxes.length }" ng-disabled = "mailboxes.busy || mailboxes.perPage > mailboxes.mailboxes.length" > {{ 'main.pagination.next' | tr }} < i class = "fa fa-angle-double-right" > < / i > < / button >
< / div >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< br / >
2019-10-22 12:47:32 +02:00
2021-11-19 10:12:39 +01:00
< div class = "text-left" >
< h3 style = "margin-bottom: 15px;" > {{ 'email.incoming.mailinglists.title' | tr }}
< button class = "btn btn-primary btn-outline pull-right" ng-click = "mailinglists.add.show()" ng-disabled = "!domain.mailConfig.enabled" tooltip-enable = "!domain.mailConfig.enabled" uib-tooltip = "{{ 'email.incoming.mailboxes.disabledTooltip' | tr }}" > < i class = "fa fa-list" > < / i > {{ 'email.incoming.mailboxes.addAction' | tr }}< / button >
< input class = "form-control pull-right" style = "width: 200px;" placeholder = "{{ 'main.searchPlaceholder' | tr }}" type = "text" ng-model = "mailinglists.search" ng-model-options = "{ debounce: 1000 }" ng-change = "mailinglists.updateFilter()" / >
< / h3 >
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< div class = "card card-large" style = "margin-bottom: 15px;" >
< div class = "row" >
< div class = "col-md-12" >
{{ 'email.incoming.mailinglists.description' | tr }}
< br / >
< br / >
< table class = "table table-hover" >
< thead >
< tr >
< th style = "width: 0.5%;" > < / th >
< th > {{ 'email.incoming.mailinglists.name' | tr }}< / th >
< th > {{ 'email.incoming.mailinglists.members' | tr }}< / th >
< th class = "text-right" > {{ 'main.actions' | tr }}< / th >
< / tr >
< / thead >
< tbody >
< tr ng-repeat = "list in mailinglists.mailinglists | filter:mailinglists.search | orderBy:'name'" ng-class = "{'text-muted': !list.active}" >
< td >
< i class = "fas fa-door-closed" ng-show = "list.membersOnly" uib-tooltip = "{{ 'email.incoming.mailinglists.membersOnlyTooltip' | tr }}" > < / i >
< i class = "fas fa-door-open" ng-show = "!list.membersOnly" uib-tooltip = "{{ 'email.incoming.mailinglists.everyoneTooltip' | tr }}" > < / i >
< / td >
< td class = "hand" ng-click = "mailinglists.edit.show(list)" >
{{ list.name }}
< / td >
< td class = "hand" ng-click = "mailinglists.edit.show(list)" >
{{ list.members.join(', ') }}
< / td >
< td class = "text-right no-wrap" >
< button class = "btn btn-xs btn-default" ng-click = "mailinglists.edit.show(list)" > < i class = "fa fa-pencil-alt" > < / i > < / button >
< button class = "btn btn-xs btn-danger" ng-click = "mailinglists.remove.show(list)" > < i class = "far fa-trash-alt" > < / i > < / button >
< / td >
< / tr >
< / tbody >
< / table >
2021-12-09 21:00:43 +01:00
< div class = "pull-right" >
< button class = "btn btn-default btn-outline btn-xs" ng-click = "mailinglists.showPrevPage()" ng-class = "{ 'btn-primary': mailinglists.currentPage > 1 }" ng-disabled = "mailinglists.busy || mailinglists.currentPage <= 1" > < i class = "fa fa-angle-double-left" > < / i > {{ 'main.pagination.prev' | tr }}< / button >
< button class = "btn btn-default btn-outline btn-xs" ng-click = "mailinglists.showNextPage()" ng-class = "{ 'btn-primary': mailinglists.perPage <= mailinglists.mailinglists.length }" ng-disabled = "mailinglists.busy || mailinglists.perPage > mailinglists.mailinglists.length" > {{ 'main.pagination.next' | tr }} < i class = "fa fa-angle-double-right" > < / i > < / button >
< / div >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-04-09 15:08:05 +02:00
2021-11-19 10:12:39 +01:00
< br / >
2019-10-22 12:47:32 +02:00
2021-11-19 10:12:39 +01:00
< div class = "text-left" >
< h3 > {{ 'email.incoming.catchall.title' | tr }}< / h3 >
< / div >
2018-04-09 15:08:05 +02:00
2021-11-19 10:12:39 +01:00
< div class = "card card-large" style = "margin-bottom: 15px;" >
< div class = "row" >
< div class = "col-md-12" ng-bind-html = " 'email.incoming.catchall.description' | tr " > < / div >
< / div >
2020-11-12 22:18:30 +01:00
2021-11-19 10:12:39 +01:00
< br / >
2020-07-17 09:51:37 -07:00
2022-05-26 14:13:13 -07:00
< div class = "row" >
2021-11-19 10:12:39 +01:00
< div class = "col-md-6" >
2022-09-28 22:10:43 +02:00
< multiselect ng-model = "catchall.mailboxes" options = "mailbox.display for mailbox in catchall.availableMailboxes" data-compare-by = "display" data-multiple = "true" filter-after-rows = "5" scroll-after-rows = "10" > < / multiselect >
2021-11-19 10:12:39 +01:00
< button class = "btn btn-outline btn-primary" ng-click = "catchall.submit()" ng-disabled = "catchall.busy || !domain.mailConfig.enabled" tooltip-enable = "!domain.mailConfig.enabled" uib-tooltip = "{{ 'email.incoming.mailboxes.disabledTooltip' | tr }}" >
< i class = "fa fa-circle-notch fa-spin" ng-show = "catchall.busy" > < / i > {{ 'email.incoming.catchall.saveAction' | tr }}
< / button >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< / uib-tab >
2018-01-22 13:01:38 -08:00
2021-12-02 14:52:55 -08:00
< uib-tab index = "'outbound'" ng-if = "user.isAtLeastAdmin" select = "setView('outbound')" heading = "{{ 'email.outbound.tabTitle' | tr }}" >
2021-11-19 10:12:39 +01:00
< div class = "card card-large" style = "margin-bottom: 15px;" >
< h4 > {{ 'email.outbound.title' | tr }} < sup > < a ng-href = "https://docs.cloudron.io/email/#relay-outbound-mails" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / h4 >
2019-03-15 11:16:43 -07:00
2021-11-19 10:12:39 +01:00
< div class = "row" >
< div class = "col-md-12" ng-bind-html = " 'email.outbound.description' | tr " > < / div >
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< br / >
2018-05-23 22:00:48 -07:00
2021-11-19 10:12:39 +01:00
< div class = "row" >
< div class = "col-md-12" >
< div class = "form-group" >
< select class = "form-control" style = "width: 50%;" ng-model = "mailRelay.preset" ng-options = "a.name for a in mailRelayPresets track by a.provider" ng-change = "mailRelay.presetChanged()" > < / select >
< / div >
2019-03-15 11:16:43 -07:00
2021-11-19 10:12:39 +01:00
< p class = "small text-danger" ng-show = "mailRelay.preset.provider === 'noop'" >
< span ng-if = "domain.domain === config.adminDomain" > {{ 'email.outbound.noopAdminDomainWarning' | tr }}< / span >
< span ng-if = "domain.domain !== config.adminDomain" > {{ 'email.outbound.noopNonAdminDomainWarning' | tr }}< / span >
< / p >
2019-03-15 11:16:43 -07:00
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< div class = "row" ng-show = "usesExternalServer(mailRelay.preset.provider)" >
< div class = "col-md-6" >
< div >
< form name = "mailRelayForm" role = "form" ng-submit = "mailRelay.submit()" autocomplete = "off" novalidate >
< div class = "form-group" ng-class = "{ 'has-error': (mailRelayForm.host.$dirty && mailRelayForm.host.$invalid) }" >
< label class = "control-label" > {{ 'email.outbound.mailRelay.host' | tr }}< / label >
< div class = "control-label" ng-show = "(!mailRelayForm.host.$dirty && mailRelay.error.host) || (mailRelayForm.host.$dirty && mailRelayForm.host.$invalid)" >
< small ng-show = "!mailRelayForm.host.$dirty && mailRelay.error.host" > {{ mailRelay.error.host }}< / small >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< input type = "text" class = "form-control" ng-model = "mailRelay.relay.host" name = "host" required >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': (mailRelayForm.port.$dirty && mailRelayForm.port.$invalid) }" >
< label class = "control-label" > {{ 'email.outbound.mailRelay.port' | tr }}< / label >
< div class = "control-label" ng-show = "(!mailRelayForm.port.$dirty && mailRelay.error.port) || (mailRelayForm.port.$dirty && mailRelayForm.port.$invalid)" >
< small ng-show = "!mailRelayForm.port.$dirty && mailRelay.error.port" > {{ mailRelay.error.port }}< / small >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< input type = "number" class = "form-control" ng-model = "mailRelay.relay.port" name = "port" required >
< / div >
2018-05-23 22:00:48 -07:00
2021-11-19 10:12:39 +01:00
< div class = "checkbox" ng-show = "mailRelay.relay.provider === 'external-smtp' || mailRelay.relay.provider === 'external-smtp-noauth'" >
< label >
< input type = "checkbox" ng-model = "mailRelay.relay.acceptSelfSignedCerts" > {{ 'email.outbound.mailRelay.selfsignedCheckbox' | tr }}< / input >
< / label >
< / div >
2019-04-23 15:24:31 -07:00
2021-11-19 10:12:39 +01:00
<!-- Postmark, Sendgrid, SparkPost -->
< div ng-show = "usesTokenAuth(mailRelay.relay.provider)" class = "form-group" ng-class = "{ 'has-error': (mailRelayForm.serverApiToken.$dirty && mailRelayForm.serverApiToken.$invalid) }" >
< label class = "control-label" > {{ 'email.outbound.mailRelay.apiTokenOrKey' | tr }}< / label >
< div class = "control-label" ng-show = "(!mailRelayForm.serverApiToken.$dirty && mailRelay.error.serverApiToken) || (mailRelayForm.serverApiToken.$dirty && mailRelayForm.serverApiToken.$invalid)" >
< small ng-show = "!mailRelayForm.serverApiToken.$dirty && mailRelay.error.serverApiToken" > {{ mailRelay.error.serverApiToken }}< / small >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< input type = "text" class = "form-control" ng-model = "mailRelay.relay.serverApiToken" name = "serverApiToken" ng-required = "usesTokenAuth(mailRelay.relay.provider)" >
< / div >
2018-05-23 22:00:48 -07:00
2021-11-19 10:12:39 +01:00
<!-- Other -->
< div ng-show = "usesPasswordAuth(mailRelay.relay.provider)" class = "form-group" ng-class = "{ 'has-error': (mailRelayForm.username.$dirty && mailRelayForm.username.$invalid) }" >
< label class = "control-label" > {{ 'email.outbound.mailRelay.username' | tr }}< / label >
< div class = "control-label" ng-show = "(!mailRelayForm.username.$dirty && mailRelay.error.username) || (mailRelayForm.username.$dirty && mailRelayForm.username.$invalid)" >
< small ng-show = "!mailRelayForm.username.$dirty && mailRelay.error.username" > {{ mailRelay.error.username }}< / small >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< input type = "text" class = "form-control" ng-model = "mailRelay.relay.username" name = "username" ng-required = "usesPasswordAuth(mailRelay.relay.provider)" >
< / div >
2018-05-23 22:00:48 -07:00
2021-11-19 10:12:39 +01:00
< div ng-show = "usesPasswordAuth(mailRelay.relay.provider)" class = "form-group" ng-class = "{ 'has-error': (mailRelayForm.password.$dirty && mailRelayForm.password.$invalid) }" >
< label class = "control-label" > {{ 'email.outbound.mailRelay.password' | tr }}< / label >
< div class = "control-label" ng-show = "(!mailRelayForm.password.$dirty && mailRelay.error.password) || (mailRelayForm.password.$dirty && mailRelayForm.password.$invalid)" >
< small ng-show = "!mailRelayForm.password.$dirty && mailRelay.error.password" > {{ mailRelay.error.password }}< / small >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< input type = "password" class = "form-control" ng-model = "mailRelay.relay.password" name = "password" ng-required = "usesPasswordAuth(mailRelay.relay.provider)" password-reveal >
< / div >
2018-05-23 22:00:48 -07:00
2021-11-19 10:12:39 +01:00
< input class = "ng-hide" type = "submit" ng-disabled = "mailRelayForm.$invalid" / >
< / form >
2018-04-09 15:08:05 +02:00
< / div >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< div class = "row" >
< div class = "col-md-12" >
2021-12-02 12:44:30 -08:00
< button class = "btn btn-primary pull-right" ng-click = "mailRelay.submit()" ng-disabled = "(usesExternalServer(mailRelay.preset.provider) && (!mailRelayForm.$dirty || mailRelayForm.$invalid)) || mailRelay.busy" > < i class = "fa fa-circle-notch fa-spin" ng-show = "mailRelay.busy" > < / i > {{ 'email.outbound.mailRelay.saveAction' | tr }}< / button >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< span class = "has-error text-center" ng-show = "mailRelay.error" > {{ mailRelay.error }}< / span >
< span class = "text-success text-center text-bold" ng-show = "mailRelay.success" > {{ 'email.outbound.mailRelay.saveSuccess' | tr }}< / span >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2019-08-02 12:42:10 -07:00
2021-11-19 10:12:39 +01:00
< div class = "row" ng-show = "mailRelay.preset.spfDoc" >
< br / >
< div class = "col-md-12" >
< span class = "text-info" ng-bind-html = "'email.outbound.mailRelay.spfDocInfo' | tr:{ name: mailRelay.preset.name, spfDocsLink: mailRelay.preset.spfDoc }" > < / span >
2018-05-23 22:00:48 -07:00
< / div >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< / uib-tab >
2019-08-02 12:42:10 -07:00
2021-11-19 15:45:16 +01:00
< uib-tab index = "'settings'" select = "setView('settings')" heading = "{{ 'email.settings.tabTitle' | tr }}" >
2021-11-19 10:12:39 +01:00
< div class = "card card-large" style = "margin-bottom: 15px;" >
< h4 > {{ 'email.masquerading.title' | tr }}< / h4 >
2021-12-02 12:44:30 -08:00
< p ng-bind-html = " 'email.masquerading.description' | tr " > < / p >
2021-11-19 10:12:39 +01:00
< div class = "row" >
2021-12-02 12:44:30 -08:00
< div class = "col-md-12 text-right" >
2021-11-19 10:12:39 +01:00
< button class = "pull-right" ng-class = "domain.mailConfig.mailFromValidation ? 'btn btn-danger' : 'btn btn-primary'" ng-disabled = "mailFromValidation.busy" ng-click = "mailFromValidation.submit()" >
< i class = "fa fa-circle-notch fa-spin" ng-show = "mailFromValidation.busy" > < / i > {{ domain.mailConfig.mailFromValidation ? ('email.masquerading.enableAction' | tr) : ('email.masquerading.disableAction' | tr) }}
< / button >
2018-05-23 23:34:09 -07:00
< / div >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2020-08-24 10:16:11 -07:00
2021-11-19 10:12:39 +01:00
< div class = "card card-large" >
< h4 > {{ 'email.signature.title' | tr }}< / h4 >
< p ng-bind-html = " 'email.signature.description' | tr " > < / p >
2020-08-24 10:16:11 -07:00
2022-05-26 14:13:13 -07:00
< div class = "row" >
2021-11-19 10:12:39 +01:00
< div class = "col-md-12" >
< form role = "form" name = "bannerForm" ng-submit = "banner.submit()" autocomplete = "off" >
< fieldset >
< div class = "form-group" >
< label class = "control-label" style = "width: 100%" > {{ 'email.signature.plainTextFormat' | tr }}< / label >
< textarea ng-model = "banner.text" class = "form-control" rows = "4" > < / textarea >
< / div >
2020-08-24 10:16:11 -07:00
2021-11-19 10:12:39 +01:00
< div class = "form-group" >
< label class = "control-label" style = "width: 100%" > {{ 'email.signature.htmlFormat' | tr }}< / label >
< textarea ng-model = "banner.html" class = "form-control" rows = "4" > < / textarea >
< / div >
2020-08-24 10:16:11 -07:00
2021-11-19 10:12:39 +01:00
< input class = "ng-hide" type = "submit" ng-disabled = "banner.$invalid || banner.busy" / >
< / fieldset >
< / form >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< div class = "row" >
< div class = "col-md-12 text-right" >
< button class = "btn btn-outline btn-primary pull-right" ng-click = "banner.submit()" ng-disabled = "banner.$invalid || banner.busy" >
< i class = "fa fa-circle-notch fa-spin" ng-show = "banner.busy" > < / i > {{ 'email.signature.saveAction' | tr }}
< / button >
2020-08-24 10:16:11 -07:00
< / div >
2020-11-12 22:18:30 +01:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< / uib-tab >
2021-12-02 14:52:55 -08:00
< uib-tab index = "'status'" ng-if = "user.isAtLeastAdmin" select = "setView('status')" heading = "{{ 'email.status.tabTitle' | tr }}" >
2021-11-19 10:12:39 +01:00
<!-- nothing to show if incoming mail is disabled and using a relay -->
< div class = "card card-large" style = "margin-bottom: 15px;" ng-hide = "!domain.mailConfig.enabled && domain.mailConfig.relay.provider !== 'cloudron-smtp'" >
< div class = "row" >
< div class = "col-md-12" >
< h4 > {{ 'email.dnsStatus.title' | tr }}
< button class = "btn btn-xs btn-primary btn-outline pull-right" ng-click = "incomingEmail.setDnsRecords()" >
< i class = "fa fa-circle-notch fa-spin" ng-show = "incomingEmail.setupDnsBusy" > < / i > {{ 'email.dnsStatus.reSetupAction' | tr }}
< / button >
< / h4 >
< span ng-bind-html = "'email.dnsStatus.description' | tr:{ emailDnsDocsLink:'https://docs.cloudron.io/email/#dns-records'}" > < / span >
< br / >
< br / >
< div ng-repeat = "record in expectedDnsRecordsTypes" >
< div class = "row" ng-if = "expectedDnsRecords[record.value].expected" >
< div class = "col-xs-12" >
< p class = "text-muted" >
< i ng-hide = "refreshBusy" ng-class = "expectedDnsRecords[record.value].status ? 'fa fa-check-circle text-success' : 'fa fa-exclamation-triangle text-danger'" > < / i >
< a href = "" data-toggle = "collapse" data-parent = "#accordion" data-target = "#collapse_dns_{{ record.value }}" > {{ record.name }} record< / a >
< button class = "btn btn-xs btn-default" ng-click = "refreshStatus()" ng-disabled = "refreshBusy" ng-show = "!expectedDnsRecords[record.value].status" > < i class = "fa fa-sync-alt" ng-class = "{ 'fa-pulse': refreshBusy }" > < / i > < / button >
< / p >
< div id = "collapse_dns_{{ record.value }}" class = "panel-collapse collapse" >
< div class = "panel-body" >
< p ng-show = "record.name === 'MX' && domain.provider === 'namecheap'" > {{ 'email.dnsStatus.namecheapInfo' | tr }} < sup > < a ng-href = "https://docs.cloudron.io/domains/#namecheap-dns" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / p >
2023-06-21 16:42:48 +05:30
< p ng-show = "record.name === 'PTR'" > {{ 'email.dnsStatus.ptrInfo' | tr }} < sup > < a ng-href = "https://docs.cloudron.io/email/#ptr-record" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / p >
2021-11-19 10:12:39 +01:00
< p ng-show = "expectedDnsRecords[record.value].name" > {{ 'email.dnsStatus.hostname' | tr }}: < b ng-click-select > < tt > {{ expectedDnsRecords[record.value].name }}< / tt > < / b > < / p >
< p ng-hide = "expectedDnsRecords[record.value].name" > {{ 'email.dnsStatus.domain' | tr }}: < b ng-click-select > < tt > {{ expectedDnsRecords[record.value].domain }}< / tt > < / b > < / p >
< p > {{ 'email.dnsStatus.type' | tr }}: < b ng-click-select > < tt > {{ expectedDnsRecords[record.value].type }}< / tt > < / b > < / p >
< p style = "overflow: auto; white-space: nowrap;" > {{ 'email.dnsStatus.expected' | tr }}: < b ng-click-select > < tt > {{ expectedDnsRecords[record.value].expected }}< / tt > < / b > < / p >
< p style = "overflow: auto; white-space: nowrap;" > {{ 'email.dnsStatus.current' | tr }}: < b ng-click-select > < tt > {{ expectedDnsRecords[record.value].value ? expectedDnsRecords[record.value].value : ('['+('email.dnsStatus.recordNotSet' | tr)+']') }}< / tt > < / b > < / p >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
< / div >
< / div >
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< div class = "card card-large" style = "margin-bottom: 15px;" ng-if = "domain.mailConfig.relay.provider !== 'noop'" >
< div class = "row" >
< div class = "col-md-12" >
< h4 > {{ 'email.smtpStatus.title' | tr }} < sup > < a ng-href = "https://docs.cloudron.io/email/#smtp-status" class = "help" target = "_blank" > < i class = "fa fa-question-circle" > < / i > < / a > < / sup > < / h4 >
< div class = "row" >
< div class = "col-xs-12" >
< p class = "text-muted" >
< i ng-hide = "refreshBusy" ng-class = "domain.mailStatus.relay.status ? 'fa fa-check-circle text-success' : 'fa fa-exclamation-triangle text-danger'" > < / i >
< a href = "" data-toggle = "collapse" data-parent = "#accordion" data-target = "#collapse_outbound_smtp" >
{{ domain.mailConfig.relay.provider === 'cloudron-smtp' ? ('email.smtpStatus.outboudDirect' | tr) : ('email.smtpStatus.outboudRelay' | tr) }}
< / a >
< button class = "btn btn-xs btn-default" ng-click = "refreshStatus()" ng-disabled = "refreshBusy" ng-show = "!domain.mailStatus.relay.status" > < i class = "fa fa-sync-alt" ng-class = "{ 'fa-pulse': refreshBusy }" > < / i > < / button >
< / p >
< div id = "collapse_outbound_smtp" class = "panel-collapse collapse" >
< div class = "panel-body" >
< p > < b > {{ domain.mailStatus.relay.value }} < / b > < / p >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2018-01-22 13:01:38 -08:00
< / div >
2021-11-19 10:12:39 +01:00
< / div >
2018-01-22 13:01:38 -08:00
2021-11-19 10:12:39 +01:00
< div class = "row" ng-show = "domain.mailConfig.relay.provider === 'cloudron-smtp'" >
< div class = "col-xs-12" >
< p class = "text-muted" >
< i ng-hide = "refreshBusy" ng-class = "domain.mailStatus.rbl.status ? 'fa fa-check-circle text-success' : 'fa fa-exclamation-triangle text-danger'" > < / i >
< a href = "" data-toggle = "collapse" data-parent = "#accordion" data-target = "#collapse_rbl" > {{ 'email.smtpStatus.blacklistCheck' | tr }}< / a >
< button class = "btn btn-xs btn-default" ng-click = "refreshStatus()" ng-disabled = "refreshBusy" ng-show = "!domain.mailStatus.rbl.status" > < i class = "fa fa-sync-alt" ng-class = "{ 'fa-pulse': refreshBusy }" > < / i > < / button >
< / p >
< div id = "collapse_rbl" class = "panel-collapse collapse" >
< div class = "panel-body" >
< div ng-show = "domain.mailStatus.rbl.servers.length" ng-bind-html = "'email.smtpStatus.blacklisted' | tr:{ ip: domain.mailStatus.rbl.ip }" > < / div >
< div ng-hide = "domain.mailStatus.rbl.servers.length" ng-bind-html = "'email.smtpStatus.notBlacklisted' | tr:{ ip: domain.mailStatus.rbl.ip }" > < / div >
< div ng-repeat = "server in domain.mailStatus.rbl.servers" >
< a ng-href = "{{server.site}}" target = "_blank" > {{ server.name }}< / a >
2018-05-23 22:00:48 -07:00
< / div >
< / div >
2018-04-09 15:08:05 +02:00
< / div >
2018-01-22 13:01:38 -08:00
< / div >
2018-05-23 22:00:48 -07:00
< / div >
2018-01-22 13:01:38 -08:00
< / div >
< / div >
2021-11-19 10:12:39 +01:00
< / div >
< / uib-tab >
2018-05-23 22:00:48 -07:00
< / uib-tabset >
2018-01-22 13:01:38 -08:00
< / div >