Skip to content

Commit 6a520e1

Browse files
authored
Merge pull request simple-login#816 from simple-login/feature/include-sender-in-header
Feature/include sender in header
2 parents d4867dc + 6c8d431 commit 6a520e1

File tree

5 files changed

+69
-1
lines changed

5 files changed

+69
-1
lines changed

app/dashboard/views/setting.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,15 @@ def setting():
315315
return redirect(url_for("dashboard.setting"))
316316
Session.commit()
317317
flash("Your preference has been updated", "success")
318+
elif request.form.get("form-name") == "sender-header":
319+
choose = request.form.get("enable")
320+
if choose == "on":
321+
current_user.include_header_email_header = True
322+
else:
323+
current_user.include_header_email_header = False
324+
Session.commit()
325+
flash("Your preference has been updated", "success")
326+
return redirect(url_for("dashboard.setting"))
318327
elif request.form.get("form-name") == "export-data":
319328
return redirect(url_for("api.export_data"))
320329
elif request.form.get("form-name") == "export-alias":

app/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,11 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle):
450450
server_default=BlockBehaviourEnum.return_2xx.name,
451451
)
452452

453+
# to keep existing behavior, the server default is TRUE whereas for new user, the default value is FALSE
454+
include_header_email_header = sa.Column(
455+
sa.Boolean, default=False, nullable=False, server_default="1"
456+
)
457+
453458
@property
454459
def directory_quota(self):
455460
return min(

email_handler.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,8 @@ def forward_email_to_mailbox(
801801
add_or_replace_header(msg, headers.SL_DIRECTION, "Forward")
802802

803803
msg[headers.SL_EMAIL_LOG_ID] = str(email_log.id)
804-
msg[headers.SL_ENVELOPE_FROM] = envelope.mail_from
804+
if user.include_header_email_header:
805+
msg[headers.SL_ENVELOPE_FROM] = envelope.mail_from
805806
# when an alias isn't in the To: header, there's no way for users to know what alias has received the email
806807
msg[headers.SL_ENVELOPE_TO] = alias.email
807808

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""empty message
2+
3+
Revision ID: 4729b7096d12
4+
Revises: 9282e982bc05
5+
Create Date: 2022-02-25 12:11:10.991810
6+
7+
"""
8+
import sqlalchemy_utils
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = '4729b7096d12'
15+
down_revision = '9282e982bc05'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.add_column('users', sa.Column('include_header_email_header', sa.Boolean(), server_default='1', nullable=False))
23+
# ### end Alembic commands ###
24+
25+
26+
def downgrade():
27+
# ### commands auto generated by Alembic - please adjust! ###
28+
op.drop_column('users', 'include_header_email_header')
29+
# ### end Alembic commands ###

templates/dashboard/setting.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,30 @@
520520
</div>
521521
</div>
522522

523+
<div class="card" id="sender-header">
524+
<div class="card-body">
525+
<div class="card-title">Include original sender in email headers
526+
</div>
527+
<div class="mb-3">
528+
SimpleLogin forwards emails to your mailbox from the <b>reverse-alias</b> and not from the <b>original</b> sender address. <br>
529+
If this option is enabled, the original sender addresses is stored in the email header <b>X-SimpleLogin-Envelope-From</b>.
530+
You can choose to display this header in your email client. <br>
531+
As email headers aren't encrypted, your mailbox service can know the sender address via this header.
532+
</div>
533+
<form method="post" action="#sender-header">
534+
<input type="hidden" name="form-name" value="sender-header">
535+
536+
<div class="form-check">
537+
<input type="checkbox" id="include-sender-header" name="enable"
538+
{% if current_user.include_header_email_header %} checked {% endif %} class="form-check-input">
539+
<label for="include-sender-header">Include sender address in email headers</label>
540+
</div>
541+
542+
<button type="submit" class="btn btn-outline-primary">Update</button>
543+
</form>
544+
</div>
545+
</div>
546+
523547
<div class="card">
524548
<div class="card-body">
525549
<div class="card-title">Alias Import</div>

0 commit comments

Comments
 (0)