Enviar correos electrónicos desde PostgreSQL con Python

miércoles, mayo 07, 2014
Banner PostgreSQL
Es posible enviar correos electrónicos desde PostgreSQL de diferentes maneras (aquí les muestro otra forma), en este caso voy a explicarlo con el uso de Python, que es la manera que hasta ahora me ha resultado más práctico.

Características del servidor de pruebas:
  • Debian Squeeze
  • PostgreSQL 8.4

Pasos de instalación:

1. Descargar e instalar el paquete plpython. Para instalarlo ejecute:
dpkg - i libpython2.6.deb
2. Descargar e instalar la librería plpython-8.4 de PostgreSQL. Para instalarla ejecute:
dpkg - i postgresql-plpython-8.4.deb
3. Instalar el lenguaje plpythonu en la base de datos de la cual se desea enviar los correos:
CREATE LANGUAGE plpythonu;
4. A partir de este punto ya podemos crear el procedimiento almacenado para envío de correos como sigue en el ejemplo:
CREATE OR REPLACE FUNCTION pypgmail 
(
 IN iservidor character varying,      -- Servidor de envío de correo
 IN ipuerto integer,                  -- Puerto de envío de correo
 IN iemisor character varying,        -- Correo del emisor
 IN idestinatario character varying,  -- Correo del destinatario
 IN iclave character varying,         -- Clave de autenticación del emisor
 IN iasunto character varying,        -- Asunto del mensaje
 IN imensaje text                     -- Mensaje a enviar
)
RETURNS integer AS
$BODY$

# Importamos smtplib
import smtplib
 
# Importamos los módulos necesarios
from email.mime.text import MIMEText
 
# Creamos el mensaje
msg = MIMEText(imensaje,'html')
 
# Conexión con el server
msg['Subject'] = iasunto
msg['From'] = iemisor
msg['To'] = idestinatario
 
# Autenticamos
mailServer = smtplib.SMTP(iservidor,587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(iemisor,iclave)
 
# Enviamos
mailServer.sendmail(iemisor, idestinatario, msg.as_string())
 
# Cerramos conexión
mailServer.close()

return (1)

$BODY$ LANGUAGE plpythonu;
7. Listo, para probar el correcto funcionamiento ejecutar el siguiente query:
SELECT * FROM pypgmail('servidor@tudominio.com',587,'correo_emisor@tudominio.com',
'correo_destino@sudominio.com','clave','Asunto del mensaje','Cuerpo del correo.');
Advertencias:
  • La instalación de lenguajes sin restricciones en la base de datos aunado a una mala configuración de seguridad del servidor de base de datos puede traer malas consecuencias. Tomar sus previsiones.

También te puede interesar

Cuando navego por los sitios web, mi parte favorita es leer los comentarios. Es por eso que tus comentarios son un complemento valioso para mis entradas. Cualquier duda o aporte no dejes de escribirlo, en breve lo estaré publicando. ¡Gracias!


4 comentarios

  1. Estimada chica
    Hay una coma de vas cuando creas la función

    CREATE OR REPLACE FUNCTION pypgmail
    (
    IN iservidor character varying, -- Servidor de envío de correo
    IN ipuerto integer, -- Puerto de envío de correo
    IN iemisor character varying, -- Correo del emisor
    IN idestinatario character varying, -- Correo del destinatario
    IN iclave character varying, -- Clave de autenticación del emisor
    IN iasunto character varying, -- Asunto del mensaje
    IN imensaje text, -- Mensaje a enviar
    )

    ResponderEliminar
  2. Muchas gracias Chica Informática me sirvió mucho.

    ResponderEliminar
  3. Muchas gracias Chica Informática, me sirvió mucho.

    ResponderEliminar

Lo más reciente

¡Bendiciones para mi Venezuela!

¡Bendiciones para mi Venezuela!