# -*- coding: utf-8 -*- """ Created on Thu Jan 9 00:09:12 2020 @author: sky """ import smtplib from string import Template from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import email.mime.application MY_ADDRESS = 'venti@binary-kitchen.de' PASSWORD = 'FILL ME' pdf_dir = 'pdfs/' host_ = 'mail.binary-kitchen.de' port_ = 587 dry_run = True # do not send mail, but set everything up def get_contacts(filename): """ Return two lists names, emails containing names and email addresses read from a file specified by filename. """ names = [] pdfs = [] emails = [] with open(filename, mode='r', encoding='utf-8') as contacts_file: for a_contact in contacts_file: names.append(a_contact.split(";")[0]) pdfs.append(a_contact.split(";")[1]) emails.append((a_contact.split(";")[2].strip())) return names, pdfs, emails def read_template(filename): """ Returns a Template object comprising the contents of the file specified by filename. """ with open(filename, 'r', encoding='utf-8') as template_file: template_file_content = template_file.read() return Template(template_file_content) def main(): names, pdfs, emails = get_contacts('addresslist.txt') # read contacts message_template = read_template('message.txt') # set up the SMTP server s = smtplib.SMTP(host=host_, port=port_) s.starttls() s.login(MY_ADDRESS, PASSWORD) # For each contact, send the email: for name, pdf, email_ in zip(names, pdfs, emails): msg = MIMEMultipart() # create a message # add in the actual person name to the message template message = message_template.substitute(PERSON_NAME=name.title()) # Prints out the message body for our sake # print(message) # setup the parameters of the message msg['From']=MY_ADDRESS msg['To']=email_ msg['Subject']="Mitgliedsbeitrags- und Spendenquittung Binary Kitchen 2019" # add in the message body msg.attach(MIMEText(message, 'plain')) # PDF attachment filename=pdf_dir + pdf try: fp=open(filename,'rb') att = email.mime.application.MIMEApplication(fp.read(),_subtype="pdf") fp.close() att.add_header('Content-Disposition','attachment',filename=filename) msg.attach(att) # send the message via the server set up earlier. if dry_run == False: try: s.send_message(msg) except: print("Could not send to",name, pdf, email_) else: print("Simulating...sending",name, pdf, email_) except FileNotFoundError: print(filename, 'File does not exist. Mail was not send') del msg # Terminate the SMTP session and close the connection s.quit() if __name__ == '__main__': main()