Skip to content

Instantly share code, notes, and snippets.

@chrislkeller
Created June 18, 2021 20:25
Show Gist options
  • Save chrislkeller/ae1620fde40fecaa39c6bb20711a14f5 to your computer and use it in GitHub Desktop.
Save chrislkeller/ae1620fde40fecaa39c6bb20711a14f5 to your computer and use it in GitHub Desktop.

Revisions

  1. chrislkeller created this gist Jun 18, 2021.
    40 changes: 40 additions & 0 deletions send_email_to_contacts.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    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'] = '[email protected]'
    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(
    '[email protected]', r['email_address'], msg.as_string()
    )
    mailserver.quit()

    if __name__ == '__main__':
    handle()