Записки жертвы высоких технологий

    Здравствуйте! Мой блог посвящен в большей своей части моей профессиональной деятельности на поприще использования технологий ORACLE для разработки баз данных OLTP и OLAP хранилищ данных. В заметках я периодически размещаю разнообразные SQL, PL/SQL и Java скрипты написанные мной и не только мной, ссылки на интересные источники в сети либо другую полезную информацию, которая каким либо образом касается моей работы с замечательными продуктами компании ORACLE.
    Вы можете связаться со мной по контактному емейлу, если у вас есть какие-либо вопросы, связанные с разработкой баз данных на основе продуктов ORACLE, буду рад помочь вам, если это будет в моих силах.

3 окт. 2009 г.

Отправка уведомлений по почте (plain text)

Для давнишнего проекта нужно было отсылать технические уведомления по почте. Помню, нашел какой то стандартный простейший пример на сайте ORACLE, попробовал. Вроде бы все проходит, а кодировка косячная. Немножко изменил код - все заработало как надо. Здесь привожу тестовый исходник, который правильно заработал после правки. Единственный минус этого примера - то, что письма можно слать только в plain text'е. Эта проблема впоследствии тоже была решена, но это уже совсем другая история.
declare  -- Объявляем переменные   mailhost VARCHAR2(64) := 'smtp.server.name.at.domain.name';   sender VARCHAR2(64) := 'sender@domain.name';   recipient VARCHAR2(32000) := 'recipient@domain.name';   subject VARCHAR2(254) := 'Тема письма';   message VARCHAR2(32000) := 'Привет, я - отправленное письмо';   mail_conn utl_smtp.connection; -- Отправка заголовков procedure out_header(   p_Header IN VARCHAR2,   p_Data IN VARCHAR2 ) is begin   utl_smtp.write_raw_data(mail_conn, utl_raw.CONVERT(utl_raw.cast_to_raw(p_Header || ': ' || p_Data), 'RUSSIAN_CIS.CL8MSWIN1251', 'RUSSIAN_CIS.CL8MSWIN1251'));   utl_smtp.write_data(mail_conn, utl_tcp.crlf); end; -- Отправка данных procedure out_data(   p_Data IN VARCHAR2 ) is begin   utl_smtp.write_raw_data(mail_conn, utl_raw.CONVERT(utl_raw.cast_to_raw(p_Data), 'RUSSIAN_CIS.CL8KOI8R', 'RUSSIAN_CIS.CL8MSWIN1251'));   utl_smtp.write_data(mail_conn, utl_tcp.crlf); end; begin   -- соединяемся, шлем информацию о соединении   mail_conn := utl_smtp.open_connection(mailhost, 25);   utl_smtp.helo(mail_conn, mailhost);   utl_smtp.mail(mail_conn, sender );   utl_smtp.rcpt(mail_conn, recipient);   -- начинаем отправлять заголовок   utl_smtp.open_data(mail_conn);   out_header('MIME-Version', '1.0');   out_header('Content-Type', 'text/plain;');   out_header('From', sender);   out_header('To', recipient);   out_header( 'Subject', subject || utl_tcp.crlf);   -- Шлем данные (plain text)   out_data (message );   -- Закрываем соединение   utl_smtp.close_data(mail_conn);   utl_smtp.quit(mail_conn); end;

Комментариев нет: