Отправка E-Mail'ов через функцию в PostgreSQL

По рабочей необходимости потребовалось реализовать отправку электронных сообщений простым вызовом функции базы данных. В наличии есть сервер PostgreSQL 9.1 и Debian 7 (Wheezy).

Для начала нам понадобится поддержка языка Python в PostgreSQL:

sudo apt-get install postgresql python3 postgresql-plpython3-9.1

Авторизуемся из под под пользователя postgres:

sudo -u postgres psql

Создадим язык для работы функции

CREATE LANGUAGE plpython3u;

Теперь сделаем функцию

CREATE OR REPLACE FUNCTION send_email(_from text, _password text, smtp text, port integer, bcc text, receiver text, subject text, send_message text)
  RETURNS text AS
$BODY$
import smtplib
from smtplib import SMTPException
message = ("From: %snTo: %snBcc: %snMIME-Version: 1.0nContent-type: text/htmlnSubject: %snn %s" % (_from,receiver,bcc,subject,send_message))
try:
  smtpObj = smtplib.SMTP(smtp,port)
  smtpObj.starttls()
  smtpObj.login(_from, _password)
  smtpObj.sendmail(_from,receiver,message.encode('utf-8'))
  print ('Successfully sent email')
except SMTPException:
  print ('Error: unable to send email')
return message
$BODY$
  LANGUAGE plpython3u VOLATILE
  COST 100;
ALTER FUNCTION send_email(text, text, text, integer, text, text, text, text)
  OWNER TO "ticketSystem";
COMMENT ON FUNCTION send_email(text, text, text, integer, text, text, text, text) IS 'Отправка сообщений через функцию в базе данных.';