#! /bin/python
# -*- coding:UTF-8 -*-

# autor : Julien Millet
# CDAISI 2011-2012

import os
import smtplib
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
import mimetypes, posixpath
from email import Utils

destinatario = ""
remitente = ""
asunto = ""
fecha = ""
mensaje = ""
servidor = ""
archivoHTML = ""
archivo = ""



def setInformacion():
	print "\n"
	servidor = raw_input("-> servidor SMTP : ")
	destinatario = raw_input("-> destinatario : ")
	remitente = raw_input("-> remitente: ")
	asunto = raw_input("-> asunto : ")
	#mensaje = raw_input("-> mensaje : ")
	fecha = raw_input("-> fecha : ")
	return servidor, destinatario, remitente, asunto, mensaje, fecha	


def initInformacion():
	destinatario = ""
	remitente = ""
	asunto = ""
	fecha = ""
	mensaje = ""
	servidor = ""
	archivoHTML = ""
	archivo = ""


def simple():
	infos = setInformacion()
	mensaje = raw_input("-> mensaje : ")	

	# creación del mail
	mail = MIMEText(mensaje)
	mail['From'] = infos[2]
	mail['Subject'] = infos[3]
	mail['To'] = infos[1]
	mail['Date'] = infos[5]
	mail['mensaje-ID'] = Utils.make_msgid()

	serv = smtplib.SMTP(infos[0])
	print "configuración del servidor smtp"
	
	serv.sendmail(infos[2], infos[1], mail.as_string())
	print "el mensaje ha sido enviado"
	serv.quit()


def simpleHTML():
	#initInformacion()
	infos = setInformacion()
	archivoHTML = open(raw_input("-> Ruta de la página HTML : "), "r").read()
	
	print archivoHTML	

	# creación de un objeto multipart
        emailmultipart = MIMEMultipart()
        # añadimos las cabeceras para el mail principal
        emailmultipart['From'] = infos[2]
        emailmultipart['To'] = infos[1]
        emailmultipart['Subject'] = infos[3]
        # creamos un mensaje simple en HTML
        emailtext = MIMEText(archivoHTML, 'html')
        # añadimos el mail a nuestro multipart
        emailmultipart.attach(emailtext)

        # enviamos el mail
        servidor = smtplib.SMTP(infos[0])
        servidor.sendmail(infos[2], infos[1], emailmultipart.as_string())
        servidor.quit()


def doubleHTML():
	liste_archivos = []
	initInformacion()
        infos = setInformacion()
        archivoHTML = open(raw_input("-> Ruta de la página HTML : "), "r").read()
	nbarchivo = raw_input("-> Cuantos elementos a enviar: ")
	for i in range(int(nbarchivo)):
		liste_archivos.append(raw_input("\tarchivo " + str(i) + " : "))
	#archivo = raw_input("-> Ruta del archivo a enviar: ")

        # creation de un objeto multiparte
        emailmultipart = MIMEMultipart()
        # añadimos las cabeceras para el mail principal
        emailmultipart['From'] = infos[2]
        emailmultipart['To'] = infos[1]
        emailmultipart['Subject'] = infos[3]
        # creamos un mensaje simple en HTML
        emailtext = MIMEText(archivoHTML, 'html')
        # añadimos este mail a nuestro multipart
        emailmultipart.attach(emailtext)

	for l in liste_archivos:
		part = MIMEBase('application', "octet-stream")
		print l
		part.set_payload(open(l, "rb").read())
		#Encoders.encode_base(part)
		part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(l))
		
	emailmultipart.attach(part)	

        # enviamos el mail
	print "conexión al servidor de mail"
        servidor = smtplib.SMTP(infos[0])
	print "configuración de mail"
        servidor.sendmail(infos[2], infos[1], emailmultipart.as_string())
        print "mensaje enviado"
	servidor.quit()

def bombing():
	liste_archivos = []
        #initInformacion()
        infos = setInformacion()
	mensaje = raw_input("-> mensaje : ")
        nbarchivo = raw_input("-> Cuantos elementos a enviar: ")
        for i in range(int(nbarchivo)):
                liste_archivos.append(raw_input("\tarchivo " + str(i) + " : "))
        
        # creación de un objeto multipart
        emailmultipart = MIMEMultipart()
        # añadimos las cabeceras (headers) para el mail principal
        emailmultipart['From'] = infos[2]
        emailmultipart['To'] = infos[1]
        emailmultipart['Subject'] = infos[3]
        # creamos un mensaje simple en HTML
        emailtext = MIMEText(mensaje, 'html')
        # añadimos este mail a nuestro multipart
        emailmultipart.attach(emailtext)

        for l in liste_archivos:
                part = MIMEBase('application', "octet-stream")
                print l
                part.set_payload(open(l, "rb").read())
                #Encoders.encode_base(part)
                part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(l))

        emailmultipart.attach(part)
	
	num = raw_input("-> Número de mail a enviar: ")

	 # enviamos el mail
        print "conexión al servidor de mail"
        servidor = smtplib.SMTP(infos[0])
        print "configuración del mail"
	for i in range(int(num)):
        	servidor.sendmail(infos[2], infos[1], emailmultipart.as_string())
        print "mensaje enviado"
        servidor.quit()



def menu():
	os.system("clear")
	print "**************************************"
	print "*           MAILER ANONIMO           *"
	print "*            MAIL BOMBING            *"
	print "*         ------------------         *"
	print "*           Eni Edition              *"
	print "**************************************"
	print ""
	print "[+] 1 - Enviar a un simple mail anónimo"
	print "[+] 2 - Enviar un mail anónimo en HTML"
	print "[+] 3 - Enviar un mail anónimo en HTML con anexo"
	print "[+] 4 - Mail Bombing"
	print "---------------------------------------------------------"
	opcion = int(raw_input("opcion > "))
	

	if (opcion == 1):
		simple()
	elif (opcion == 2):
		simpleHTML()
	elif (opcion == 3):
		doubleHTML()
	elif (opcion == 4):
		bombing()
		menu()
	else:
		menu()	
	




if __name__ == "__main__":
	menu()
