Отправка писем из Postgres с python3

Отправка писем из Postgres с python3

Ставим расширение

sudo apt-get install postgresql-plpython3-9.5 -y

В базе

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: %s\nTo: %s\nBcc: %s\nMIME-Version: 1.0\nContent-type: text/html\nSubject: %s\n\n %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 "postgres";
COMMENT ON FUNCTION send_email(text, text, text, integer, text, text, text, text) IS 'Отправка сообщений через функцию в базе данных.';

Теперь отправляем письмо из базы

select send_email('admin@itc-life.ru','XXPasswordXX','smtp.gmail.com',587,'Sending E-Mail From PostgreSQL','adresser@mydomain.com','Hi,\n How do you do ..', '777');

Profit

2 thoughts on “Отправка писем из Postgres с python3

  1. Надо понимать, что в высоконагруженном проекте такой подход чреват исчерпанием ресурсов сервера, на котором работает Постгрес. Если при отправке писем есть желание что-то сохранить в БД (т.е. нужны модифицирующие транзакции), то такое решение вообще не масштабируется (нельзя выполнять на hot standby серверах).

    Тем не менее, для небольших и средних проектов это отличное решение, ускоряюзее разработку и вполне себе жизнеспособное. Спасибо за краткий и понятный пример.

  2. Пожалуйста, да хорошо применять через haproxy+pgbouncer на standby серверах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.