# -*- coding: utf8 -*-
'''
Sends one email with attachment to each student on a list

Prepare a data file (plain text) with the format:
file1, email1, text1
file2, email2, text2
file3, email3, text3
...

Overwrite the configuration vars below and run this script.
email1 will receive an email with file1 attached, and text1
will replace the format chars %s inside the generic body text
(see example below).
'''

import smtplib
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.encoders import encode_base64
from getpass import getpass

#####################################
############ Datos ##################

your_email = 'your_email@server'
#You can use special chars (é,ñ...) in the body and subject
#The body has a field %s, to be replaced by the the third
#field in the data file
subject='Your assignment corrected'
body ='''Please find your corrected assignment attached.

Your grade is: %s
'''

#path to attached files (ends in /)
attachments_prefix = 'path/to/sws_files/'
#data file
data_file = 'path/to/data.txt'

############# Servidor ##################

smtpserver = 'your.smtp.server'
smtpport = 465
AUTHREQUIRED = 1 # if you need to use SMTP AUTH set to 1
smtpuser = 'you_username_here'  # for SMTP AUTH, set SMTP username here
#password is entered at prompt, for increased security.

##########################################
##########################################

#Abrir el fichero de datos
fich=open(data_file)
data=fich.read()
fich.close()

#conectar al servidor
smtppass = getpass('email password, please:')
server = smtplib.SMTP_SSL(smtpserver, smtpport)
print server.ehlo()

if AUTHREQUIRED:
    print server.login(smtpuser, smtppass)

for linea in data.splitlines():
    linea = linea.replace(' ','')
    try:
        ruta,email,nota = linea.split(',')
    except:
        continue
    print
    print ruta,email,nota

    #MIME multipart message
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['To'] = email
    msg['From'] = mi_email
    part2 = MIMEText(body%nota, 'plain', 'utf8')
    msg.attach(part2)

    #Attachment
    if ruta:
        file = attachments_prefix + ruta
        part = MIMEBase('application', "octet-stream")
        part.set_payload(open(file,"rb").read())
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % ruta)
        encode_base64(part)
        msg.attach(part)
    
    #Send email
    try:
        smtpresult = server.sendmail(your_email, email, msg.as_string())
        print 'ok'
    except:
        print 'Error sending message to: %s'%email   

server.close()