#!/usr/bin/env python

import sys
import smtplib

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

def send_email_account(remote_server, remote_port, username, password, email_from, email_to, subject, body):
    if (remote_server == "smtp.gmail.com"):
        send_email_gmail(username, password, email_from, email_to, subject, body)
    else:
        # connect to remote mail server and forward message on
        server = smtplib.SMTP(remote_server, remote_port)

        msg = MIMEMultipart()
        msg['From'] = email_from
        msg['To'] = email_to
        msg['Subject'] = subject
        msg.attach(MIMEText(body, 'plain'))

        smtp_sendmail_return = ""
        try:
            server.login(username, password)
            smtp_sendmail_return = server.sendmail(email_from, email_to, msg.as_string())
        except Exception, e:
            print 'SMTP Exception:\n' + str( e) + '\n' + str( smtp_sendmail_return)
        finally:
            server.quit()

def send_email_gmail(username, password, email_from, email_to, subject, body):
    # connect to remote mail server and forward message on
    server = smtplib.SMTP("smtp.gmail.com", 587)
    message = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" % (email_from, email_to, subject, body)

    smtp_sendmail_return = ""
    try:
        server.ehlo()
        server.starttls()
        server.login(username,password)
        smtp_sendmail_return = server.sendmail(email_from, email_to, message)
    except Exception, e:
        print 'SMTP Exception:\n' + str( e) + '\n' + str( smtp_sendmail_return)
    finally:
        server.quit()

def loademails(filename):
    with open(filename, 'r') as f:
        return f.read().splitlines()

def loadbody(filename):
    with open(filename, 'r') as f:
        return f.read()

if __name__ == "__main__":
    def usage():
        print "%s <email server> <server port> <login name> <login password> <from emailaddress> <subject> <to emailaddress file> <email body file>" % (sys.argv[0])
    if (len(sys.argv) <> 9):
        usage()
        sys.exit(0)

    server = sys.argv[1]
    port = sys.argv[2]
    username = sys.argv[3]
    password = sys.argv[4]
    fromemail = sys.argv[5]
    subject = sys.argv[6]
    emailfile = sys.argv[7]
    bodyfile = sys.argv[8]

    body = loadbody(bodyfile)

    for toemail in loademails(emailfile):
        send_email_account(server, port, username, password, fromemail, toemail, subject, body)