Merge pull request #380 from TheLastProject/feature/export_import_alias

Export and import mailbox info with alias
This commit is contained in:
Son Nguyen Kim 2021-03-10 17:05:49 +01:00 committed by GitHub
commit 6b79dbdd5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 6 deletions

View File

@ -53,9 +53,10 @@ def export_aliases():
"""
user = g.user
data = [["alias", "note", "enabled"]]
data = [["alias", "note", "enabled", "mailboxes"]]
for alias in Alias.filter_by(user_id=user.id).all(): # type: Alias
data.append([alias.email, alias.note, alias.enabled])
mailboxes = " ".join([mailbox.email for mailbox in alias.mailboxes])
data.append([alias.email, alias.note, alias.enabled, mailboxes])
si = StringIO()
cw = csv.writer(si)

View File

@ -10,6 +10,7 @@
<h1 class="h3">Alias Batch Import</h1>
<div class="alert alert-primary">
Only aliases created with <b>your verified domains</b> can be imported.<br>
If mailboxes are set for an alias, they will only be linked if they already exist.<br>
Please make sure to use the csv template file.
</div>

View File

@ -31,6 +31,8 @@ from app.models import (
DeletedAlias,
DomainDeletedAlias,
CustomDomain,
Mailbox,
AliasMailbox,
)
from server import create_app
@ -152,17 +154,42 @@ def handle_batch_import(batch_import: BatchImport):
LOG.d("alias already used %s", full_alias)
continue
mailboxes = []
if "mailboxes" in row:
for mailbox_email in row["mailboxes"].split():
mailbox_email = sanitize_email(mailbox_email)
mailbox = Mailbox.get_by(email=mailbox_email)
if not mailbox or not mailbox.verified or mailbox.user_id != user.id:
LOG.d("mailbox %s can't be used %s", mailbox, user)
continue
mailboxes.append(mailbox.id)
if len(mailboxes) == 0:
mailboxes = [user.default_mailbox_id]
alias = Alias.create(
user_id=user.id,
email=full_alias,
note=note,
mailbox_id=user.default_mailbox_id,
mailbox_id=mailboxes[0],
custom_domain_id=custom_domain.id,
batch_import_id=batch_import.id,
)
db.session.commit()
db.session.flush()
LOG.d("Create %s", alias)
for i in range(1, len(mailboxes)):
alias_mailbox = AliasMailbox.create(
alias_id=alias.id,
mailbox_id=mailboxes[i],
)
db.session.commit()
LOG.d("Create %s", alias_mailbox)
if __name__ == "__main__":
while True:

View File

@ -1,3 +1,3 @@
"alias","note"
"ebay@my-domain.com","Used on eBay"
"facebook@my-domain.com","Used on Facebook, Instagram."
"alias","note","mailboxes"
"ebay@my-domain.com","Used on eBay","destination@my-destionation-domain.com"
"facebook@my-domain.com","Used on Facebook, Instagram.","destination1@my-destionation-domain.com destination2@my-destination-domain.com"
1 alias note mailboxes
2 ebay@my-domain.com Used on eBay destination@my-destionation-domain.com
3 facebook@my-domain.com Used on Facebook, Instagram. destination1@my-destionation-domain.com destination2@my-destination-domain.com