import smtplib from email.message import EmailMessage import csv import logging logger = logging.getLogger("root") logging.basicConfig( format="\033[1;36m%(levelname)s: %(filename)s (def %(funcName)s %(lineno)s): \033[1;37m %(message)s", level=logging.DEBUG ) data_file = 'tracking-state-party-delegate-plans.csv' def handle(): mailserver = smtplib.SMTP('smtp.office365.com',587) mailserver.ehlo() mailserver.starttls() mailserver.login('EMAIL ADDRESS', 'EMAIL PASSWORD') with open(data_file) as file: reader = csv.DictReader(file) for r in reader: if r['email_address']: logger.debug('Sending email to {}'.format(r['state'])) msg = EmailMessage() msg['To'] = r['email_address'] msg['From'] = 'chris.keller@latimes.com' msg['Subject'] = "RE: {state} Democratic Party 2020 Delegate Selection Plans".format(state=r['state']) message = "" message += "Afternoon - I\'m working to compile 2020 delegate selection plans from each state Democratic party.\n\n" message += "Could you point me to a link to the delegate selection plan for the {state} Democratic Party on your website, or provide a copy? I'm also interested in getting a sense of when it was approved by the DNC.\n\n".format(state=r['state']) message += "Thanks in advance for any guidance you can provide.\n\n" message += "Chris K\n----\nChris Keller" msg.set_content(message) mailserver.sendmail( 'chris.keller@latimes.com', r['email_address'], msg.as_string() ) mailserver.quit() if __name__ == '__main__': handle()