2023-10-09 21:07:55 -05:00
|
|
|
from proton import ProtonWebmail
|
2023-10-11 23:00:26 -05:00
|
|
|
from common import ToSend
|
|
|
|
from secrets import proton, gmail, mailserv
|
2023-10-09 21:07:55 -05:00
|
|
|
|
2023-10-11 23:00:26 -05:00
|
|
|
import smtplib, ssl
|
|
|
|
import imaplib
|
|
|
|
from email.mime.text import MIMEText
|
|
|
|
from email.mime.multipart import MIMEMultipart
|
|
|
|
import email
|
|
|
|
from email.header import decode_header
|
|
|
|
|
|
|
|
port = 465
|
|
|
|
password = mailserv.managedpassword
|
|
|
|
ctx = ssl.create_default_context()
|
|
|
|
|
|
|
|
imap = imaplib.IMAP4_SSL(mailserv.hostname)
|
|
|
|
imap.login(mailserv.managedusername, mailserv.managedpassword)
|
|
|
|
|
|
|
|
# Initialize an array to store the dictionaries of message details
|
|
|
|
unread_messages = []
|
|
|
|
# Select the current mailbox
|
|
|
|
# List all available mailboxes
|
|
|
|
result, mailbox_data = imap.list()
|
|
|
|
# Iterate through the list of mailboxes
|
|
|
|
for mailbox_info in mailbox_data:
|
|
|
|
# Parse the mailbox name from the list response
|
|
|
|
mailbox_name = mailbox_info.decode().split('"')[-1].lstrip()
|
|
|
|
|
|
|
|
# Select the current mailbox
|
|
|
|
status, _ = imap.select(mailbox_name)
|
|
|
|
if status == "NO":
|
|
|
|
continue
|
|
|
|
|
|
|
|
# Search for all unread messages in the current mailbox
|
|
|
|
result, data = imap.search(None, "ALL")
|
|
|
|
|
|
|
|
for imap_id in data[0].split():
|
|
|
|
result, message_data = imap.fetch(imap_id, '(RFC822)')
|
|
|
|
raw_email = message_data[0][1]
|
|
|
|
email_message = email.message_from_bytes(raw_email)
|
|
|
|
subject, encoding = decode_header(email_message['Subject'])[0]
|
|
|
|
subject = subject.decode(encoding) if encoding else subject
|
|
|
|
body = email_message.get_payload()
|
|
|
|
|
|
|
|
try:
|
|
|
|
in_response_to_id = int(
|
|
|
|
subject \
|
|
|
|
.split("kb_ident_")[-1] \
|
|
|
|
.replace(")", "")
|
|
|
|
)
|
|
|
|
except (IndexError, ValueError) as e:
|
|
|
|
imap.store(imap_id, '+FLAGS', '\\Deleted')
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
unread_messages.append(ToSend(
|
|
|
|
in_response_to_id,
|
|
|
|
email_message.get_payload(),
|
|
|
|
))
|
|
|
|
|
|
|
|
imap.store(imap_id, '+FLAGS', '\\Deleted')
|
|
|
|
|
|
|
|
|
|
|
|
imap.expunge()
|
|
|
|
imap.logout()
|
|
|
|
|
|
|
|
proton_mail = ProtonWebmail(proton.username, proton.password)
|
|
|
|
proton_mail.to_send = unread_messages
|
|
|
|
proton_mail.get()
|
|
|
|
with smtplib.SMTP_SSL("mail." + mailserv.hostname, port, context=ctx) as server:
|
|
|
|
server.login(mailserv.managedusername, password)
|
|
|
|
for message in proton_mail.seen_messages:
|
|
|
|
if not message.acted_upon:
|
|
|
|
mime_message = MIMEMultipart("alternative")
|
|
|
|
html = MIMEText(message.maintext, "html")
|
|
|
|
mime_message["Subject"] = "{} (from {}, kb_ident_{})".format(message.subject, message.sender, str(message.id))
|
|
|
|
mime_message["From"] = mailserv.managedusername
|
|
|
|
mime_message["To"] = mailserv.targetusername
|
|
|
|
mime_message.attach(html)
|
|
|
|
server.sendmail(mailserv.managedusername, mailserv.targetusername, mime_message.as_string())
|
|
|
|
message.acted_upon = True
|
|
|
|
proton_mail.write_data()
|