Initial commit
This commit is contained in:
commit
df6a09b81e
|
@ -0,0 +1,2 @@
|
|||
config.py
|
||||
__pycache__/
|
|
@ -0,0 +1 @@
|
|||
Lazy scripts I made for scheduling emails to be sent at specific times
|
|
@ -0,0 +1,5 @@
|
|||
HOSTNAME = 'localhost'
|
||||
PORT = 587
|
||||
EMAIL = 'example@hostname.com'
|
||||
LOGIN = 'example'
|
||||
PASSWORD = 'strong_password'
|
|
@ -0,0 +1,45 @@
|
|||
#!/bin/python3.9
|
||||
import config, re, smtplib, os
|
||||
from datetime import datetime
|
||||
from email.message import EmailMessage
|
||||
from pathlib import Path
|
||||
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
smtp = smtplib.SMTP(config.HOSTNAME, port=config.PORT)
|
||||
|
||||
smtp.ehlo()
|
||||
smtp.starttls()
|
||||
smtp.ehlo()
|
||||
|
||||
smtp.login(config.LOGIN, config.PASSWORD)
|
||||
|
||||
for mail in Path('scheduled').glob('*.mail'):
|
||||
with mail.open('r') as file:
|
||||
msg = file.read()
|
||||
|
||||
scheduled = re.findall(r'Scheduled to \(UTC\): (.*)\n', msg)[0]
|
||||
scheduled = datetime.fromisoformat(scheduled)
|
||||
|
||||
if scheduled <= datetime.now():
|
||||
to_address = re.findall(r'To: (.*)\n', msg)[0]
|
||||
subject = re.findall(r'Subject: (.*)\n', msg)[0]
|
||||
|
||||
body = ''
|
||||
reading_body = False
|
||||
for line in msg.splitlines():
|
||||
if reading_body:
|
||||
body += f'{line}\n'
|
||||
elif line == '---- Body ----':
|
||||
reading_body = True
|
||||
|
||||
msg = EmailMessage()
|
||||
msg.set_content(body)
|
||||
msg['Subject'] = subject
|
||||
msg['From'] = config.EMAIL
|
||||
msg['To'] = to_address
|
||||
|
||||
smtp.send_message(msg)
|
||||
mail.unlink()
|
||||
|
||||
smtp.quit()
|
|
@ -0,0 +1,39 @@
|
|||
#!/bin/python3.9
|
||||
import os, tempfile, subprocess, re, sys
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
EDITOR = os.environ.get('EDITOR', 'vim')
|
||||
|
||||
os.makedirs('scheduled', exist_ok=True)
|
||||
|
||||
tomorrow = datetime.utcnow() + timedelta(days=1)
|
||||
tomorrow = tomorrow.replace(microsecond=0, second=0, minute=int(tomorrow.minute/15))
|
||||
initial_msg = f'To: \nSubject: \nScheduled to (UTC): {tomorrow.isoformat()}\n---- Body ----'
|
||||
|
||||
with tempfile.NamedTemporaryFile() as file:
|
||||
file.write(bytes(initial_msg, encoding='utf-8'))
|
||||
file.flush()
|
||||
|
||||
subprocess.call([EDITOR, file.name])
|
||||
|
||||
file.seek(0)
|
||||
msg = file.read().decode()
|
||||
|
||||
|
||||
to = re.findall(r'To: (.*)\n', msg)[0]
|
||||
subject = re.findall(r'Subject: (.*)\n', msg)[0]
|
||||
|
||||
if not to or not subject:
|
||||
print('ERROR: recipient or subject empty')
|
||||
exit(1)
|
||||
|
||||
filename = f'scheduled/{to}:{subject}.mail'
|
||||
|
||||
if os.path.exists(filename):
|
||||
print('ERROR: an email for this recipient with the same subject is already scheduled')
|
||||
exit(1)
|
||||
|
||||
with open(filename, 'w') as file:
|
||||
file.write(msg)
|
Loading…
Reference in New Issue