v1 of email handler, forward and reply phase work!
This commit is contained in:
parent
80babefdb9
commit
a01c94187f
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue