MAILER - пакет для отправки SMTP сообщений

                    Пакет MAILER предназначен для отправки почтовым сообщением произвольного текста, текстовых и бинарных файлов, текстовых и бинарных объектов, хранящихся в базе данных и подготовленных ранее и сохраненных в установленном формате почтовых сообщений. Для передачи должен использоваться сторонний SMTP-сервер, который не требует авторизацию при соединении с ним. Большинство почтовых серверов требуют, чтобы адрес отправителя существовал реально. Скорость работы СУБД Oracle при отправке почтовых сообщений значительно снижается и скорость самой отправки невелика (по сравнению с почтовыми программами) вне зависимости от канала связи, поэтому для эффективной работы системы целесообразно использовать SMTP-сервер организации, находящийся в одном сегменте сети с сервером Oracle. По этой же причине крайне неэффективна массовая рассылка с указанием одного адресата в полу "To". Для массовой рассылки пакет MAILER преобразует перечень адресов получателей (указывается при вызове пакета через запятую) для сокращения обмена между СУБД и почтовым сервером, перекладывая на него всю рассылку адресатам. Большинство почтовых серверов имеют ограничения на количество адресатов в заголовке, поэтому массовая рассылка может быть прервана по инициативе почтового сервера.

                    Пакет MAILER реализован с указанием PRAGMA SERIALLY_REUSABLE, что позволяет изменять какие-либо параметры в ходе всего сеанса. В теле пакета встроены параметры для передачи сообщений через почтовый сервер MAIL.RU. Пользователь может переопределить все параметры соединения, включая и SMTP-сервер, в любой момент перед обращением к какой-либо процедуре пакета MAILER. Пример такого переопределения параметров приведен в процедуре VIA_LOCAL, которая может быть перезаписана в соответствии с потребностями пользователя. В пакете принято разделение по характеру письма - фиксированный адресат (указанный авторами, может быть перезаписан в процедуре VIA_LOCAL), произвольный адресат, группа адресатов (указывается при вызове соответствующей процедуры пакета).

                    Основные функции и процедуры пакета перечислены с указанием их назначения и характеристик входных параметров. Здесь приведены функции и процедуры, которые используются для формирования сложно-составных сообщений и могут быть использованы для написания произвольных внешних процедур для отправки сообщений, структура которых не учтена в пакете MAILER. Скрипты, необходимые для инсталляции пакета MAILER, приведены здесь , при этом тело пакета обработано утилитой WRAP. Для получения исходного текста пакета следует обратиться к авторам safeguardian@yandex.ru . Исходный текст будет выслан бесплатно после уточнения ряда вопросов с заказчиком.

 

####################################################################################################
Основные процедуры пакета MAILER

####################################################################################################
---- ПЕРЕГРУЖАЕМЫЙ ПАКЕТ
-- параметры могут изменяться из внешних процедур
-- и сохраняются в течение всего сеанса подключения клиента
-- Начальные параметры устанавливаются в процедуре SET_PARAMETER
-- и могут быть изменены в любое время сеанса
####################################################################################################
--Универсальный пакет со встроенной кодировкой на smtp.mail.ru
####################################################################################################
-- Для применения всеми юзерами надо дать следующие привилегии
-- GRANT READ (, WRITE) ON DIRECTORY SYS.MYDIRECT TO PUBLIC; где SYS.MYDIRECT - директория, откуда читаются файлы
-- или дать привилегию CREATE ANY DIRECTORY
-- CREATE PUBLIC SYNONIM mailer FOR mailer.mailer;
-- GRANT EXECUTE ON MAILER to PUBLIC;


--******************************************************************************
-- Следующие параметры перегружаются в SET_PARAMETER, и могут быть установлены в VIA_LOCAL
--******************************************************************************

g_mailhost VARCHAR2(255); -- SMTP-сервер провайдера
g_port NUMBER; -- порт SMTP-сервера
g_mailer VARCHAR2(255); -- майлер для поста
g_name_sender VARCHAR2(255); -- наименование БД отправителя
g_sender VARCHAR2(255); -- from
g_organ VARCHAR2(255) := null;-- организация
g_adress VARCHAR2(255); -- to для постоянных сообщений
g_reply VARCHAR2(255); -- reply to
--g_adr_group VARCHAR2(255); -- наименование группы для массовой рассылки

g_lang VARCHAR2(2); -- язык сообщения для почтовой программы

g_cid VARCHAR2(255); -- виртуальный каталог для ссылки на прикрепленные файлы
g_chunk NUMBER; -- размер чунка, которыми пердаются данные на почтовый сервер

g_unix BOOLEAN; -- работа с не-UNIX системы
g_convert BOOLEAN; -- использовать конвертацию
-- eсли FALSE, то указания при вызове p_unix игнорируются
-- и по-русски может не передавать
-- Для клиентов с не UNIX системами
g_kode_ora_win VARCHAR2(255); -- кодировка для текста
g_kode_post_win VARCHAR2(255); -- кодировка для загoловка
-- Для клиентов с UNIX системами
g_kode_ora_unix VARCHAR2(255);
g_kode_post_unix VARCHAR2(255);


######################################################################################################################
-- Установка стартовых параметров - инициализация переменных
######################################################################################################################
PROCEDURE SET_PARAMETER;

######################################################################################################################
-- Установка кодировок для текущей обработки - меняется динамически для CLOB
######################################################################################################################
PROCEDURE SET_KODE
(p_unix IN BOOLEAN DEFAULT FALSE -- кодировка, если TRUE, то переключается в UNIX);

######################################################################################################################
-- Установка отьправителя для отправки постов - фиксированный или из параметров
######################################################################################################################
PROCEDURE SET_SENDER
(p_kak IN BOOLEAN DEFAULT FALSE -- отправитель, если TRUE, то отправивтель - база, иначе - из параметров);

######################################################################################################################
-- Отправка текстового сообщения фиксированному адресату, указанному в параметрах пакета
-- mailer.text_fix('TEXT_FIX','TEXT_FIX rezerve.ru');
######################################################################################################################
PROCEDURE TEXT_FIX
(p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

######################################################################################################################
-- Отправка текстового сообщения одному произвольному адресату - "Геннадий Анатольевич"<manager@maska>
-- mailer.TEXT_TO(l_to,'TEXT_TO','Проверка ТЕКСТ_TO');
######################################################################################################################
PROCEDURE TEXT_TO
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

######################################################################################################################
-- Отправка одного текстового сообщения нескольким адресатам (от 1 до 5 как правило),
-- вообще-то неограниченно, ни читать нельзя
-- руками: строка в кавычках, адреса через запятую
-- mailer.text_unit( p_to => a1, p_subject=>'Массовая рассылка', p_message=>'Рассылка на 10 адресов');
######################################################################################################################
PROCEDURE TEXT_UNIT
(p_to IN LONG, -- to - перечень получателей
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

######################################################################################################################
-- Отправка сообщения HTML фиксированному адресату
-- mailer.HTML_fix('HTML_FIX','HTML_FIX rezerve.ru');
######################################################################################################################
PROCEDURE HTML_FIX
(p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

--######################################################################################################################
-- Отправка сообщения HTML одному произвольному адресату
-- mailer.HTML_TO(l_to,'HTML_TO','Проверка HTML_TO');
######################################################################################################################
PROCEDURE HTML_TO
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

######################################################################################################################
-- Отправка одного сообщения HTML нескольким адресатам (от 1 до 5 как правило),
-- вообще-то неограниченно, ни читать нельзя
-- руками: строка в кавычках, адреса через запятую
-- mailer.HTML_UNIT(a1,'HTML_TO','Проверка HTML_TO');
######################################################################################################################
PROCEDURE HTML_UNIT
(p_to IN LONG, -- to - перечень получателей
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL -- message text);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде текста на фиксированный адрес
-- mailer.CLOB_TEXT_FIX(p_subject => 'clob_text_FIX',
-- p_message => 'Сообщение о проверке clob_text_FIX',
-- p_unix => false,
-- p_text => mailer.OPEN_CLOB(l_dir,'win.txt'));
######################################################################################################################
PROCEDURE CLOB_TEXT_FIX
(p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_text IN CLOB := EMPTY_CLOB -- отправляемый текст
);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде текста на конкретный адрес
-- mailer.CLOB_TEXT_TO(p_to => l_to,
-- p_subject => 'Проверка КЛОБОВ - clob_text_to',
-- p_message => 'Сообщение о проверке CLOB',
-- p_unix => false,
-- p_clob => mailer.OPEN_CLOB(l_dir,'win.txt'));
--######################################################################################################################
PROCEDURE CLOB_TEXT_TO
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_clob IN CLOB := EMPTY_CLOB -- отправляемый текст
);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде текста на группу адресов
-- mailer.CLOB_TEXT_UNIT(p_to => a1,
-- p_subject => 'Проверка КЛОБОВ - clob_text_to',
-- p_message => 'Сообщение о проверке CLOB',
-- p_unix => false,
-- p_text => mailer.OPEN_CLOB(l_dir,'win.txt'));
--######################################################################################################################
PROCEDURE CLOB_TEXT_UNIT
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_text IN CLOB := EMPTY_CLOB -- отправляемый текст
);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде HTML на фиксированный адрес
-- mailer.CLOB_HTML_FIX(p_subject => 'clob_html_fix',
-- p_message => 'Сообщение о проверке clob_html_FIX',
-- p_unix => false,
-- p_html => mailer.OPEN_CLOB(l_dir,'win.txt'));
######################################################################################################################
PROCEDURE CLOB_HTML_FIX
(p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_html IN CLOB := EMPTY_CLOB -- отправляемый текст
);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде HTML на конкретный адрес
-- mailer.CLOB_HTML_TO(p_to => l_to,
-- p_subject => 'Проверка КЛОБОВ - clob_html_to',
-- p_message => 'Сообщение о проверке CLOB - clob_html_to',
-- p_unix => false,
-- p_html => mailer.OPEN_CLOB(l_dir,'win.txt'));
######################################################################################################################
PROCEDURE CLOB_HTML_TO
(p_to IN LONG, -- to
p_subject IN VARCHAR2, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_html IN CLOB := EMPTY_CLOB -- отправляемый текст
);

######################################################################################################################
-- Отправка CLOB с текстовым сообщением в виде HTML на группу адресов
-- mailer.CLOB_HTML_UNIT(p_to => a1,
-- p_subject => 'Проверка КЛОБОВ - clob_html_to',
-- p_message => 'Сообщение о проверке CLOB - clob_html_to',
-- p_unix => false,
-- p_html => mailer.OPEN_CLOB(l_dir,'win.txt'));
######################################################################################################################
PROCEDURE CLOB_HTML_UNIT
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_html IN CLOB := EMPTY_CLOB -- отправляемый текст);

######################################################################################################################
-- Отправка BLOB с сообщением на фиксированный адрес
-- mailer.BLOB_FIX (p_subject => 'blob_FIX test.jpeg',
-- p_message => 'Сообщение о BLOB FIX test.jpeg',
-- p_type => 'application/octet-stream',
-- p_name => l_dir||'/test.jpeg',
-- p_blob => mailer.OPEN_BLOB(l_dir,'test.jpeg'));
--######################################################################################################################
PROCEDURE BLOB_FIX
(p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_type IN VARCHAR2, -- тип сообщения по МИМЕ
p_name IN VARCHAR2, -- полное имя файла для МИМЕ
p_blob IN BLOB :=EMPTY_BLOB -- отправляемый blob
);

######################################################################################################################
-- Отправка BLOB с сообщением на конкретный адрес
-- mailer.BLOB_TO (p_to => l_to,
-- p_subject => 'Проверка BLOB - blob_to test.jpeg',
-- p_message => 'Сообщение о BLOB test.jpeg',
-- p_type => 'application/octet-stream',
-- p_name => l_dir||'/test.jpeg',
-- p_blob => mailer.OPEN_BLOB(l_dir,'test.jpeg'));
--######################################################################################################################
PROCEDURE BLOB_TO
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_type IN VARCHAR2, -- тип сообщения по МИМЕ
p_name IN VARCHAR2, -- полное имя файла для МИМЕ
p_blob IN BLOB := EMPTY_BLOB -- отправляемый blob
);

######################################################################################################################
-- Отправка BLOB с сообщением на группу адресов
-- mailer.BLOB_UNIT (p_to => a1,
-- p_subject => 'Проверка BLOB - blob_to test.jpeg',
-- p_message => 'Сообщение о BLOB test.jpeg',
-- p_type => 'application/octet-stream',
-- p_name => l_dir||'/test.jpeg',
-- p_blob => mailer.OPEN_BLOB(l_dir,'test.jpeg'));
######################################################################################################################
PROCEDURE BLOB_UNIT
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL, -- subject
p_message IN LONG DEFAULT NULL, -- message text
p_type IN VARCHAR2, -- тип сообщения по МИМЕ
p_name IN VARCHAR2, -- полное имя файла для МИМЕ
p_blob IN BLOB :=EMPTY_BLOB -- отправляемый blob
);

--######################################################################################################################
-- Отправка подготовленного поста произвольного содержания на один адрес
-- mailer.MSG_TO(p_to => l_to,
-- p_unix => true,
-- p_clob => mailer.OPEN_CLOB(l_dir,'unix.msg')
-- );
######################################################################################################################
PROCEDURE MSG_TO
(p_to IN LONG, -- to
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_clob IN CLOB := EMPTY_CLOB -- отправляемый blob - исходный тект подготовленного сообщения);

######################################################################################################################
-- Отправка подготовленного поста произвольного содержания на группу адресов
-- mailer.MSG_TO(p_to => l_to,
-- p_unix => false,
-- p_clob => mailer.OPEN_CLOB(l_dir,'win.msg')
-- );
######################################################################################################################
PROCEDURE MSG_UNIT
(p_to IN LONG, -- to
p_unix IN BOOLEAN DEFAULT FALSE, -- кодировка передаваемого CLOB, если TRUE, то включается UNIX
p_clob IN CLOB := EMPTY_CLOB -- отправляемый blob - исходный тект подготовленного сообщения
);


 

######################################################################################################################
-- ВСЕ СЛЕДУЮЩИЕ ПРОГРАММЫ МОГУТ БЫТЬ ВКЛЮЧЕНЫ В НАБОРЫ ДЛЯ СОСТАВЛЕНИЯ ПОСТОВ
PROCEDURE R_A_Z_D_E_L;
#####################################################################################################################
 

######################################################################################################################
-- Определение параметров сессии для отправления в теле поста фиксированному адресату
######################################################################################################################
FUNCTION INITIATOR
(p_kak boolean) RETURN LONG;

######################################################################################################################
-- Перекодировка blob в 64 бит - самостоятельно не использовать
######################################################################################################################
PROCEDURE KODE_BLOB
(p_blob IN BLOB := EMPTY_BLOB -- отправляемый blob);

######################################################################################################################
-- Открытие файла с текстовыми данными
######################################################################################################################
FUNCTION OPEN_CLOB
(p_dir IN VARCHAR2, -- directory в БД
p_file IN VARCHAR2 -- файл, который надо открыть
) RETURN CLOB;

######################################################################################################################
-- Открытие файла с произвольными данными
######################################################################################################################
FUNCTION OPEN_BLOB
(p_dir IN VARCHAR2, -- directory в БД
p_file IN VARCHAR2 -- файл, который надо открыть
) RETURN BLOB;

######################################################################################################################
-- Конвертация текстового сообщения в HTML-вид
######################################################################################################################
PROCEDURE TEXT_AS_HTML
(p_message IN LONG DEFAULT NULL, -- message text
p_kak IN BOOLEAN DEFAULT FALSE -- TRUE - добавить INITIATOR);

######################################################################################################################
-- Запись начала письма для любого вида
######################################################################################################################
PROCEDURE INI_BOUND
(p_type IN VARCHAR2, -- тип сообщения
P_bound IN VARCHAR2 -- тип boundary);

######################################################################################################################
-- Запись границы разделов сообщения для читаемого вида
######################################################################################################################
PROCEDURE START_BOUND
(p_type IN VARCHAR2, -- тип сообщения
P_bound IN VARCHAR2 -- тип boundary);

######################################################################################################################
-- Запись в заголовок без boundary
######################################################################################################################
PROCEDURE NO_BOUND
(p_type IN VARCHAR2 -- тип сообщения);

######################################################################################################################
-- Запись границы разделов сообщения для нечитаемого вида с перекодировкой в 64 бит
######################################################################################################################
PROCEDURE APP_BOUND
(p_type IN VARCHAR2, -- тип сообщения
p_name IN VARCHAR2, -- имя файла
P_bound IN VARCHAR2 -- тип boundary);

######################################################################################################################
-- Запись окончания раздела
######################################################################################################################
PROCEDURE STOP_BOUND
(p_bound IN VARCHAR2 -- тип boundary);

######################################################################################################################
-- Формирование перечня адресатов для всех типов сообщений, кроме заранее подготовленных
######################################################################################################################
FUNCTION POST_RCPT -- формирует перечень RCPT для сервера и возвращает строку адресатов
(p_recipients IN LONG -- адресаты
) RETURN LONG;

######################################################################################################################
-- Формирование перечня адресатов для всех типов сообщений, кроме заранее подготовленных
######################################################################################################################
FUNCTION POST_CONN -- открывает соединение, возвращает TRUE в случае успеха
(p_to IN LONG
) RETURN LONG;

######################################################################################################################
-- Формирование заголовка для всех типов сообщений, кроме заранее подготовленных
######################################################################################################################
FUNCTION POST_HEADER
(p_to IN LONG, -- to
p_subject IN VARCHAR2 DEFAULT NULL -- subject
) RETURN boolean ;

######################################################################################################################
-- Формирование CLOBa в тело письма
######################################################################################################################
PROCEDURE POST_CLOB
(p_clob IN CLOB := EMPTY_CLOB, -- отправляемый текст
p_unix IN BOOLEAN default FALSE -- кодировка CLOB, по умолчанию - WIN);

######################################################################################################################
-- Завершение соединения при всех условиях. Если коннект с сервером установлен, то отправка сообщения
######################################################################################################################
PROCEDURE POST_SEND;

######################################################################################################################
-- Если надо включить сообщение об ошибке, то заменить NULL на raise_application_error
######################################################################################################################
PROCEDURE ON_SEND_ERROR;

######################################################################################################################
-- Возврат определенного знака из списка
######################################################################################################################
FUNCTION LT(lz in number) return varchar2;

######################################################################################################################
-- Процедуры для записи информации в тело сообщения
-- если на english - writeData
-- если русский - writeDataAsRaw
-- если конвертация - используется код для конвертации
######################################################################################################################
PROCEDURE writeData( p_text IN VARCHAR2);
PROCEDURE writeDataAsRaw( p_text IN VARCHAR2);

 

Сайт создан в системе uCoz