diff --git a/.gitignore b/.gitignore index 833a6b9..11358ad 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ vars.py message.html .DS_Store *.pyc -venv \ No newline at end of file diff --git a/README.md b/README.md index d5d4039..f101fb3 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,16 @@ Easily send mails via SMTP and python -## Installation -To install the requirements, run the following command -``` -python -m pip install -r requirements.txt -``` - -## Usage - -### Setup +## Setup 1. Copy `vars.py.example` to `vars.py` 2. Setup `vars.py` with your credentials and config -3. Adapt `message.html` and save your contact list to `contacts.csv` +3. Adapt `message.htmt` and save your contact list to `contacts.csv` -### Send mail -Just run -```sh -python mail.py -``` +## Usage +```python mail.py``` ## Templating -You can use the keys from your `csv` directly, prepending a `$` sign (case sensitive!). For example: +You can use the keys from your `csv` directly, prepending a `$` sign. For example: ``` Hello $name, your value is $value! ``` @@ -34,14 +23,4 @@ Hello h4xx0r, your value is 1337! With a `contacts.csv` looking like: | name | value | |--------|-------| -| h4xx0r | 1337 | - -## Options -### Sending behavior -Some mail servers will block the requests, if too many are sent too fast. You can use the variables to add delays: -- `WAIT_EVERY` the amount of mails sent at once -- `DELAY_SEC` the amount of seconds to wait between sending the next batch - -### Other options -- `LOGLEVEL` the logging level, set to `'DEBUG'` for most output -- `DRY_RUN` if set to `True`, the mails wont get sent, but the output is generated as if they would be sent. Good for testing and best to use with `LOGLEVEL = 'DEBUG'` \ No newline at end of file +| h4xx0r | 1337 | \ No newline at end of file diff --git a/mail.py b/mail.py index bfbbd45..052e633 100644 --- a/mail.py +++ b/mail.py @@ -1,9 +1,10 @@ -import logging import smtplib import time + +from string import Template + from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText -from string import Template import pandas as pd @@ -16,8 +17,6 @@ def get_contacts(filename): read from a file specified by filename. """ - logging.debug(f'Loading contacts from {filename}...') - return pd.read_csv(filename) @@ -33,10 +32,6 @@ def read_template(filename): def main(): - logging.basicConfig(level=LOGLEVEL, format='%(asctime)s - %(levelname)s - %(message)s') - - logging.info('Starting pymail') - contacts = get_contacts('contacts.csv') message_template = read_template('message.html') @@ -44,13 +39,10 @@ def main(): s = smtplib.SMTP(HOST, PORT) s.starttls() 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 i in contacts.index: - logging.info(f"Sending email {i+1} of {len(contacts.index)}\n") + print(f"Sending email {i+1}\n") msg = MIMEMultipart() # create a message # add in the actual person name to the message template @@ -58,7 +50,7 @@ def main(): message = message_template.substitute(contact_dict) # Prints out the message body for our sake - logging.debug(f"{message}\n") + print(f"{message}\n") # setup the parameters of the message msg['From'] = MY_ADDRESS @@ -68,20 +60,16 @@ def main(): # add in the message body msg.attach(MIMEText(message, 'html')) - if not DRY_RUN: - # send the message via the server set up earlier. - s.send_message(msg) + # send the message via the server set up earlier. + s.send_message(msg) del msg - # Wait for DELAY_SEC seconds every WAIT_EVERY-th message if (i + 1) % WAIT_EVERY == 0: time.sleep(DELAY_SEC) # Terminate the SMTP session and close the connection s.quit() - logging.info('Done!') - if __name__ == '__main__': main() diff --git a/message.html b/message.html deleted file mode 100644 index a8cca27..0000000 --- a/message.html +++ /dev/null @@ -1,5 +0,0 @@ - - -

Hello $name, your value is $value!

- - \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1411a4a..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -pandas \ No newline at end of file diff --git a/vars.py.example b/vars.py.example index f1c6554..bbd94a3 100644 --- a/vars.py.example +++ b/vars.py.example @@ -1,5 +1,5 @@ SUBJECT = '' -MAIL_COLUMN = '' +EMAIL_COLUMN = '' MY_ADDRESS = 'example@domain.tld' PASSWORD = 'p4ssw0rd' @@ -7,7 +7,4 @@ HOST = 'mail.domain.tld' PORT = 587 WAIT_EVERY = 5 -DELAY_SEC = 0 - -LOGLEVEL = 'INFO' -DRY_RUN = True \ No newline at end of file +DELAY_SEC = 0 \ No newline at end of file