Quarantine
diff --git a/app/dashboard/views/setting.py b/app/dashboard/views/setting.py
index 9b95d807..4379300b 100644
--- a/app/dashboard/views/setting.py
+++ b/app/dashboard/views/setting.py
@@ -155,6 +155,15 @@ def setting():
db.session.commit()
flash("Your preference has been updated", "success")
return redirect(url_for("dashboard.setting"))
+ elif request.form.get("form-name") == "change-sender-format":
+ sender_format = int(request.form.get("sender-format"))
+ if sender_format == 0:
+ current_user.use_via_format_for_sender = False
+ else:
+ current_user.use_via_format_for_sender = True
+ db.session.commit()
+ flash("Your sender format preference has been updated", "success")
+ return redirect(url_for("dashboard.setting"))
elif request.form.get("form-name") == "export-data":
data = {
diff --git a/app/email_utils.py b/app/email_utils.py
index 7f2403e1..aec4de69 100644
--- a/app/email_utils.py
+++ b/app/email_utils.py
@@ -365,16 +365,22 @@ def get_orig_message_from_bounce(msg: Message) -> Message:
return part
-def new_addr(old_addr, new_email) -> str:
+def new_addr(old_addr, new_email, user: User) -> str:
"""replace First Last by
first@example.com by SimpleLogin
`new_email` is a special reply address
"""
name, old_email = parseaddr(old_addr)
- new_name = f"{old_email} via SimpleLogin"
- new_addr = formataddr((new_name, new_email)).strip()
+ if user.use_via_format_for_sender:
+ new_name = f"{old_email} via SimpleLogin"
+ else:
+ name = name or ""
+ new_name = (
+ name + (" - " if name else "") + old_email.replace("@", " at ")
+ ).strip()
+ new_addr = formataddr((new_name, new_email)).strip()
return new_addr.strip()
diff --git a/app/models.py b/app/models.py
index 7999b28d..126bfad0 100644
--- a/app/models.py
+++ b/app/models.py
@@ -148,6 +148,12 @@ class User(db.Model, ModelMixin, UserMixin):
profile_picture = db.relationship(File, foreign_keys=[profile_picture_id])
+ # Use the "via" format for sender address, i.e. "name@example.com via SimpleLogin"
+ # If False, use the format "Name - name at example.com"
+ use_via_format_for_sender = db.Column(
+ db.Boolean, default=True, nullable=False, server_default="1"
+ )
+
@classmethod
def create(cls, email, name, password=None, **kwargs):
user: User = super(User, cls).create(email=email, name=name, **kwargs)
diff --git a/email_handler.py b/email_handler.py
index 0c739661..aa0b3dea 100644
--- a/email_handler.py
+++ b/email_handler.py
@@ -290,7 +290,9 @@ def replace_header_when_forward(msg: Message, alias: Alias, header: str):
)
db.session.commit()
- new_addrs.append(new_addr(contact.website_from, contact.reply_email))
+ new_addrs.append(
+ new_addr(contact.website_from, contact.reply_email, alias.user)
+ )
need_replace = True
if need_replace:
@@ -438,7 +440,7 @@ def handle_forward(envelope, smtp: SMTP, msg: Message, rcpt_to: str) -> (bool, s
# replace the email part in from: header
contact_from_header = msg["From"]
contact_name, contact_email = parseaddr(contact_from_header)
- new_from_header = new_addr(contact_from_header, contact.reply_email)
+ new_from_header = new_addr(contact_from_header, contact.reply_email, user)
add_or_replace_header(msg, "From", new_from_header)
LOG.d("new_from_header:%s, old header %s", new_from_header, contact_from_header)
diff --git a/migrations/versions/2020_032822_224fd8963462_.py b/migrations/versions/2020_032822_224fd8963462_.py
new file mode 100644
index 00000000..68cc18ca
--- /dev/null
+++ b/migrations/versions/2020_032822_224fd8963462_.py
@@ -0,0 +1,29 @@
+"""empty message
+
+Revision ID: 224fd8963462
+Revises: 67c61eead8d2
+Create Date: 2020-03-28 22:30:19.428692
+
+"""
+import sqlalchemy_utils
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '224fd8963462'
+down_revision = '67c61eead8d2'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column('users', sa.Column('use_via_format_for_sender', sa.Boolean(), server_default='1', nullable=False))
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column('users', 'use_via_format_for_sender')
+ # ### end Alembic commands ###