Отправка почтой/email/e-mail/ из базы UNA(из пакета базы или с использованием пакета схемы)

Last modified by Nefedenkova Viktoria on 2023/05/04 20:25

Отправка почты из базы данных Oracle

  • Отправка поты / e-mail из "любой" базы данных Oracle возможна в том случае если на для этой базы данных установлен пакет, UTL_SMTP
    (пакет устанавливается на уровне базы данных - не схемы)
  • Требуется рабочий почтовый сервер, с или без аутентификации, без SSL шифрования соединения.

 На данный момент, как я понял, отправка сообщений с шифрованием в наших базах не поддерживается. Но теоретически возможна.
В примере рассмотрен случай для демонстрации самой возможности, по этому, такие узкие места как аутентификация на почтовом сервере, и шифрование SSL опущены.

Как пример, рассмотрим отправку почты из базы данных berezka@clouddev.
  • В первую очередь надо убедиться что данный пакет установлен

SELECT COUNTstar FROM all_objects WHERE object_name = 'UTL_SMTP' AND object_type = 'PACKAGE';

  • Ожидаемый результат - 1, значит пакет есть, можно пытаться что-то отправить.
    10.jpg
  • Проверить и убедиться что работает почтовый сервер.

telnet example.com 25

11.jpg

  • В случае использования клиента UNA.md, почту можно отправить не сложным кодом прямо из Формы - Просмотр SQL - что по умолчанию присутствует во всех конфигурациях.

DECLARE
mail_conn UTL_SMTP.connection;
host VARCHAR2(255) := 'igareosh.com';
port NUMBER := 25;
BEGIN
mail_conn := UTL_SMTP.open_connection(host, port);
UTL_SMTP.helo(mail_conn, host);
UTL_SMTP.mail(mail_conn, 'ubuntu@igareosh.com');
UTL_SMTP.rcpt(mail_conn, 'iplatonov@unisim-soft.com');
UTL_SMTP.data(mail_conn,
'from: ubuntu@igareosh.com'||UTL_TCP.crlf||'Subject: Test Email Using default Oracle capabilities'||UTL_TCP.crlf||UTL_TCP.crlf||'This is test email about email!');
UTL_SMTP.quit(mail_conn);
END;

  • В скрине виден сам код, выполняемый в клиенте UNA, и результат его выполнения - подключение и отправка почты почтовым сервером, и получение письма Outlook-ом.
     Для мониторинга отправки на почтовом сервере, используется команда:

sudo tail -f /var/log/mail.log

8.jpg

Отправка почты из пакета схемы клиента.

Пакеты сохранены на момент написания и функциональны.
PKG_MAIL berezka@clouddev - ex Nivalli 03.2023

 PKG_MAIL_UTL berezka@clouddev - ex Nivalli 03.2023

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

Пакет со временем улучшался(пакет может отличаться у разных клиентов), были добавлены различные возможности: 

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

 Последняя проверенная версия данных пакетов установлена у клиента Romina используется для ежемесячной рассылки Информации о направленной заработной плате.

Но далее мы рассматриваем промежуточный вариант, на базе березки:
9.jpg

Настройка вводных данных для работы пакета
  • В данном случае, прямо в код, надо ввести данные нашего сервера, порт.

2.jpg

  • Также в случае если мы(почтовый сервер) не используем аутентификацию, эти параметры в пакете надо отключить, потому как с и без аутентификации - разные команды для почтового сервера.

1.jpg

  • В случае использования пакета pkg_mail и pkg_mail_utl, в базе, были сделаны доработки, а именно, добавлены две таблицы:
    • Первая таблица записывает документы пользователя к отправке/формированию писем
    • Вторая используется для хранения сформированных к отправке писем, их статус, адресаты, (в последних версиях еще и ошибок в разрезе каждого письма)

12.jpg

  • Так как данная база не доработана, в частности, не записывает документы или приложения и не генерирует записи писем к отправке, мы, в качестве примера, записываем данные в таблицу сформированных писем к отправке.
    (Если клиенту устанавливается подобный модуль, это будет являться частью доработки по автоматизации.)

INSERT INTO un9mail_msg (nrmsg, subject, sender, nrdoc, dep, status, text, recipients, cc, bcc)
VALUES (4, 'Test email',
 'ubuntu@igareosh.com',
  12345,
   '01',
    '1',
     'Dear Team,
     I am pleased to inform you that our recent implementation of SQL has been a resounding success. The new system has been performing exceptionally well and has greatly improved our data management capabilities.
     With the use of SQL, we have been able to efficiently retrieve and analyze large sets of data, providing us with valuable insights that we can use to make informed business decisions. The ability to quickly query and manipulate data has significantly reduced the time it takes to generate reports and has streamlined our workflow.
     Overall, the adoption of SQL has been a game-changer for us and has vastly improved our data-driven decision-making process. We look forward to continuing to use this powerful tool to drive our business forward.
     Thank you for your attention to this matter.
     Best regards,
     Igor',
 'iplatonov@unisim-soft.com', '', '');

3.jpg

  • В результате, мы наблюдаем наш INSERT в таблице писем к отправке.

4.jpg

  • В качестве результата отправки, его регистрации используется поле status, 1 - не отправлено, 2 - отправлено. В более поздних версиях их больше.

5.jpg

  • В качестве команд к отправке, вызывается пакет pkg_mail_utl в котором содержатся процедуры.

13.jpg

  • Выполнение пакета

6.jpg

  • Регистрация Строки/Письма как отправленых.

14.jpg

Пример настроенного документа рассылки