#!/usr/bin/python

import sys
from smtplib import SMTP
from itertools import chain
from errno import ECONNREFUSED
from mimetypes import guess_type
from subprocess import Popen, PIPE
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from socket import error as SocketError
from email.mime.multipart import MIMEMultipart
from os.path import abspath, basename, expanduser
import getpass

# Define ID
id_eudyptula = '' #Enter your eudyptula id here.

# Define email addresses to use
#addr_to   = 'little@eudyptula-challenge.org'
addr_from = 'mkatiyar@gmail.com'

# Define SMTP email server details
smtp_server = SMTP("smtp.gmail.com",587)
smtp_user   = 'mkatiyar@gmail.com'
print "Password for",smtp_user 
smtp_pass   = getpass.getpass()


def get_mimetype(filename):
    content_type, encoding = guess_type(filename)
    if content_type is None or encoding is not None:
        content_type = "application/octet-stream"
    return content_type.split("/", 1)


def mimify_file(filename):
    filename = abspath(expanduser(filename))
    basefilename = basename(filename)

    msg = MIMEBase(*get_mimetype(filename))
    msg.set_payload(open(filename, "r").read())
    msg.add_header("Content-Disposition", "attachment", filename=basefilename)
    #encode_base64(msg)
    return msg

def send_email(addr_to, subject, text, files):
    # Prepare Message
    msg = MIMEMultipart()
    msg.preamble = subject
    msg.add_header("From", addr_from)
    msg.add_header("Subject", id_eudyptula + ' ' + subject)
    msg.add_header("To", addr_to)

    # Attach the main text
    msg.attach(MIMEText(text))

    # Attach any files
    [msg.attach(mimify_file(filename)) for filename in files]

    # Contact local SMTP server and send Message
    try:
        smtp_server.ehlo()
        smtp_server.starttls()
        smtp_server.ehlo()
        smtp_server.login(smtp_user, smtp_pass)
        smtp_server.sendmail(addr_from, addr_to, msg.as_string())
        smtp_server.quit()
    except SocketError as e:
        print(e)

def compose_mail():
	addr_to = raw_input('To: ')
	subject = raw_input('Subject: ')
	attachments = raw_input('Attachments :')
	print 'Message Body :'
	body = sys.stdin.read()
	send_email(addr_to, subject, body, attachments.split())

if __name__ == "__main__":
	compose_mail()
