v1 of email handler, forward and reply phase work!

This commit is contained in:
Son NK 2019-11-08 11:05:34 +01:00
parent 80babefdb9
commit a01c94187f
1 changed files with 10 additions and 10 deletions

View File

@ -1,18 +1,18 @@
""" """
Handle the email *forward* and *reply*. phase There are 3 actors: Handle the email *forward* and *reply*. phase. There are 3 actors:
- website: who sends emails to alias@sl.co address - website: who sends emails to alias@sl.co address
- SL email handler (this script) - SL email handler (this script)
- user personal email - user personal email: to be protected. Should never leak to website.
This script makes sure that in the forward phase, the email that is forwarded to user personal email has the following This script makes sure that in the forward phase, the email that is forwarded to user personal email has the following
envelope and header fields: envelope and header fields:
Envelope: Envelope:
mail from: srs@sl.co # managed by SRS mail from: srs@sl.co # managed by SRS
rcpt to: @real rcpt to: @personal_email
Header: Header:
From: @website From: @website
To: alias@sl.co To: alias@sl.co # so user knows this email is sent to alias
Reply-to: special@sl.co # magic here Reply-to: special@sl.co # magic HERE
And in the reply phase: And in the reply phase:
Envelope: Envelope:
@ -20,7 +20,7 @@ Envelope:
rcpt to: @website rcpt to: @website
Header: Header:
From: alias@sl.co # magic here From: alias@sl.co # so for website the email comes from alias. magic HERE
To: @website To: @website
The special@sl.co allows to hide user personal email when user clicks "Reply" to the forwarded email. The special@sl.co allows to hide user personal email when user clicks "Reply" to the forwarded email.
@ -80,7 +80,7 @@ class MailHandler:
# LOG.debug(message_data) # LOG.debug(message_data)
# host IP, setup via Docker network # host IP, setup via Docker network
client = SMTP("1.1.1.1", 25) smtp = SMTP("1.1.1.1", 25)
msg = Parser(policy=default).parsestr(message_data) msg = Parser(policy=default).parsestr(message_data)
if not envelope.rcpt_tos[0].startswith("reply+"): # Forward case if not envelope.rcpt_tos[0].startswith("reply+"): # Forward case
@ -123,7 +123,7 @@ class MailHandler:
envelope.rcpt_options, envelope.rcpt_options,
) )
client.send_message( smtp.send_message(
msg, msg,
from_addr=envelope.mail_from, from_addr=envelope.mail_from,
to_addrs=[gen_email.user.email], # user personal email to_addrs=[gen_email.user.email], # user personal email
@ -153,7 +153,7 @@ class MailHandler:
envelope.rcpt_options, envelope.rcpt_options,
) )
client.send_message( smtp.send_message(
msg, msg,
from_addr=alias, from_addr=alias,
to_addrs=[forward_email.website_email], to_addrs=[forward_email.website_email],
@ -168,7 +168,7 @@ if __name__ == "__main__":
controller = Controller(MailHandler(), hostname="0.0.0.0", port=20381) controller = Controller(MailHandler(), hostname="0.0.0.0", port=20381)
controller.start() controller.start()
print(">>", controller.hostname, controller.port) LOG.d("Start mail controller %s %s", controller.hostname, controller.port)
while True: while True:
time.sleep(10) time.sleep(10)