#!/usr/bin/env python
"""
Module to send email messages

https://www.tutorialspoint.com/python/python_sending_email.htm
"""
import getpass
import smtplib

# default global configs

username = getpass.getuser()
domain = 'server.com'
SMTP_server = 'localhost'
sender = {
'name': "Sender Name Here",
'address': username + '@' + domain
}

receivers = [
    {
        'name': "Reciever Name Here",
        'address': username + '@' + domain
    }
]

# NOTE: must start with 'Subject:'
subject = 'Subject: Subject line goes here'

message_body = """
Message body goes here
"""

def create_header_line(user_data, to_or_from = "From"):
    """
    Make the email header lines that look like this:


    From: From Person <from@fromdomain.com>
    To: To Person <to@todomain.com>
    """
    header_string = "{to_or_from}: {user_name} <{user_email}>".format(
        to_or_from = to_or_from,
        user_name = user_data['name'],
        user_email = user_data['address']
        )
    return(header_string)

def create_message(sender = sender, receivers = receivers, subject = subject, message_body = message_body):
    """
    Make the email message contents
    """
    from_line = create_header_line(user_data = sender, to_or_from = "From")
    to_line = create_header_line(user_data = receivers[0], to_or_from = "To") # TODO: need to deal with a list of email addresses here
    subject_line = subject # TODO: required to start with 'Subject: '; need to just prepend that here
    message_str = """{from_line}
{to_line}
{subject_line}
{message_body}
""".format(
    from_line = from_line,
    to_line = to_line,
    subject_line = subject_line,
    message_body = message_body
    )
    return(message_str)

def send_email(sender, receivers_list, message):
    """
    Send the email
    """
    try:
       smtpObj = smtplib.SMTP(SMTP_server)
       smtpObj.sendmail(sender, receivers_list, message)
    except: # SMTPException
       raise


if __name__ == '__main__':
    try:
        send_email(
            sender = sender['address'],
            receivers_list = [ r['address'] for r in receivers ],
            message = create_message())
        print("Successfully sent email:")
        print(create_message())
    except:
        print("Error: unable to send email")
        raise