Add logging and more options

This commit is contained in:
Jannis Portmann 2023-04-23 13:28:51 +02:00
parent bbe48d2c38
commit 4f4fc2b609
2 changed files with 23 additions and 8 deletions

26
mail.py
View file

@ -1,10 +1,9 @@
import logging
import smtplib import smtplib
import time import time
from string import Template
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText from email.mime.text import MIMEText
from string import Template
import pandas as pd import pandas as pd
@ -17,6 +16,8 @@ def get_contacts(filename):
read from a file specified by filename. read from a file specified by filename.
""" """
logging.debug(f'Loading contacts from {filename}...')
return pd.read_csv(filename) return pd.read_csv(filename)
@ -32,6 +33,10 @@ def read_template(filename):
def main(): def main():
logging.basicConfig(level=LOGLEVEL, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('Starting pymail')
contacts = get_contacts('contacts.csv') contacts = get_contacts('contacts.csv')
message_template = read_template('message.html') message_template = read_template('message.html')
@ -39,10 +44,13 @@ def main():
s = smtplib.SMTP(HOST, PORT) s = smtplib.SMTP(HOST, PORT)
s.starttls() s.starttls()
s.login(MY_ADDRESS, PASSWORD) s.login(MY_ADDRESS, PASSWORD)
logging.debug('Mail server is set up.')
logging.info(f'Starting to send mails to {len(contacts.index)} recipients, this might take a while...')
# For each contact, send the email: # For each contact, send the email:
for i in contacts.index: for i in contacts.index:
print(f"Sending email {i+1}\n") logging.info(f"Sending email {i+1} of {len(contacts.index)}\n")
msg = MIMEMultipart() # create a message msg = MIMEMultipart() # create a message
# add in the actual person name to the message template # add in the actual person name to the message template
@ -50,7 +58,7 @@ def main():
message = message_template.substitute(contact_dict) message = message_template.substitute(contact_dict)
# Prints out the message body for our sake # Prints out the message body for our sake
print(f"{message}\n") logging.debug(f"{message}\n")
# setup the parameters of the message # setup the parameters of the message
msg['From'] = MY_ADDRESS msg['From'] = MY_ADDRESS
@ -60,16 +68,20 @@ def main():
# add in the message body # add in the message body
msg.attach(MIMEText(message, 'html')) msg.attach(MIMEText(message, 'html'))
# send the message via the server set up earlier. if not DRY_RUN:
s.send_message(msg) # send the message via the server set up earlier.
s.send_message(msg)
del msg del msg
# Wait for DELAY_SEC seconds every WAIT_EVERY-th message
if (i + 1) % WAIT_EVERY == 0: if (i + 1) % WAIT_EVERY == 0:
time.sleep(DELAY_SEC) time.sleep(DELAY_SEC)
# Terminate the SMTP session and close the connection # Terminate the SMTP session and close the connection
s.quit() s.quit()
logging.info('Done!')
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View file

@ -7,4 +7,7 @@ HOST = 'mail.domain.tld'
PORT = 587 PORT = 587
WAIT_EVERY = 5 WAIT_EVERY = 5
DELAY_SEC = 0 DELAY_SEC = 0
LOGLEVEL = 'INFO'
DRY_RUN = True