jueves, 27 de marzo de 2014

Python - Postgres función para envío de mails

CREATE OR REPLACE FUNCTION py_sendmail()
  RETURNS trigger AS
$BODY$
    import smtplib
    from email.MIMEMultipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.MIMEImage import MIMEImage


    # parte 1ra.
    sql = 'SELECT  campo1, campo2  FROM table'

    sql += 'WHERE  id = '
    sql +=  str(TD['new']['id'])

    mensaje = plpy.execute(sql)
    for msg in evento:
        txt_mensaje += 'texto del mail']+'\n'
        txt_mensaje += 'Dato recuperado de la tabla: ' + str(msg['campo1']) +'\n'


    # parte 2da.
    usuarios = plpy.execute('select nombre, email from users ')
    for usuario in usuarios:
          msg = MIMEText(txt_mensaje)
          msg['Subject'] = 'Prueba'
          msg['From'] = 'Juancito Pinto <juancitopinto@gmail.com>'
          msg['To'] = str(usuario['email'])
        smtpserver = smtplib.SMTP('smtp.gmail.com',587)
        smtpserver.ehlo()
        smtpserver.starttls()
        smtpserver.ehlo()
        smtpserver.login('juancitopinto@gmail.com','pwd_de_juancitopinto')
         smtpserver.sendmail('juancitopinto@gmail.com',str(usuario['email']),msg.as_string())
        smtpserver.close()

   
$BODY$
  LANGUAGE plpython2u VOLATILE


Descripción:

La función descrita esta previsto ser ejecutada por un trigger (cada vez que se adicione un registro por ejemplo).

En la primera parte realiza una consulta a una "tabla" para luego enviar el restultado por mail (Ejm. campo1).

En la segunda parte realiza la consulta a la tabla "users" obteniendo las direcciones de correo para luego enviar el mail correspondiente a todos los usarios existentes en users. Utiliza el servidor SMTP de gmail.

Algo para considerar es que normalmente se recuperan datos de diferentes tipos: enteros, date, time,... etc. de la base de datos, los cuales debén ser previamente convertidos a String para componer una cadena en el mensaje a envíar; una opción si la base de datos es Postgres realizar la conversión con funciones de Postgres Ejm:

SELECT to_char(hora_type, \'HH24:MI:SS\') as hora_string from tabla    

mas referencias: http://www.postgresql.org/docs/9.3/static/functions-formatting.html

No hay comentarios.:

Publicar un comentario