Prettify alias log

This commit is contained in:
Son NK 2020-02-22 21:09:07 +07:00
parent f468a21b14
commit f80de382fe
4 changed files with 27 additions and 18 deletions

View File

@ -108,25 +108,32 @@
{% for log in logs %}
<div class="col-12">
<div class="my-2 p-2 card border-light">
<div class="font-weight-bold">{{ log.when | dt }}</div>
<div>
<span class="mr-2">{{ log.website_from or log.website_email }}</span>
<div class="font-weight-bold">{{ log.when | dt }}
{% if log.bounced %} ⚠️ {% endif %}
</div>
<span>
<div>
{% if log.bounced %}
<span class="mr-2">{{ log.website_from or log.website_email }}</span>
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}" class="arrow">
<span class="ml-2">{{ log.alias }}</span>
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}" class="arrow">
<span class="ml-2">{{ log.mailbox }}</span>
{% else %}
<span class="mr-2">{{ log.website_from or log.website_email }}</span>
<span>
{% if log.is_reply %}
<img src="{{ url_for('static', filename='arrows/reply-arrow.svg') }}" class="arrow">
{% elif log.blocked %}
<img src="{{ url_for('static', filename='arrows/blocked-arrow.svg') }}" class="arrow">
{% elif log.bounced %}
<span class="text-danger"> --- Refused (or bounced) ---> </span>
{% else %}
<img src="{{ url_for('static', filename='arrows/forward-arrow.svg') }}" class="arrow">
{% endif %}
</span>
<span class="ml-2">
{{ log.alias }}
</span>
<span class="ml-2">{{ log.alias }}</span>
{% endif %}
</div>
</div>
</div>

View File

@ -16,6 +16,7 @@ class AliasLog:
is_reply: bool
blocked: bool
bounced: bool
mailbox: str
def __init__(self, **kwargs):
for k, v in kwargs.items():
@ -62,6 +63,7 @@ def alias_log(alias_id, page_id):
def get_alias_log(gen_email: GenEmail, page_id=0):
logs: [AliasLog] = []
mailbox = gen_email.mailbox_email()
q = (
db.session.query(ForwardEmail, ForwardEmailLog)
@ -81,6 +83,7 @@ def get_alias_log(gen_email: GenEmail, page_id=0):
is_reply=fel.is_reply,
blocked=fel.blocked,
bounced=fel.bounced,
mailbox=mailbox
)
logs.append(al)
logs = sorted(logs, key=lambda l: l.when, reverse=True)

View File

@ -513,6 +513,12 @@ class GenEmail(db.Model, ModelMixin):
random_email = generate_email(scheme=scheme, in_hex=in_hex)
return GenEmail.create(user_id=user_id, email=random_email)
def mailbox_email(self):
if self.mailbox_id:
return self.mailbox.email
else:
return self.user.email
def __repr__(self):
return f"<GenEmail {self.id} {self.email}>"

View File

@ -250,11 +250,7 @@ def handle_forward(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> str:
LOG.d("alias %s cannot be created on-the-fly, return 510", alias)
return "510 Email not exist"
if gen_email.mailbox_id:
mailbox_email = gen_email.mailbox.email
else:
mailbox_email = gen_email.user.email
mailbox_email = gen_email.mailbox_email()
forward_email = get_or_create_forward_email(msg["From"], gen_email)
forward_log = ForwardEmailLog.create(forward_id=forward_email.id)
@ -337,10 +333,7 @@ def handle_reply(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> str:
gen_email = forward_email.gen_email
user = gen_email.user
if gen_email.mailbox_id:
mailbox_email = gen_email.mailbox.email
else:
mailbox_email = gen_email.user.email
mailbox_email = gen_email.mailbox_email()
# bounce email initiated by Postfix
# can happen in case emails cannot be delivered to user-email