Отправка почты средствами Oracle
declare
-- Объявляем переменные
mailhost VARCHAR2(64) := '127.0.0.1';
sender VARCHAR2(64) := 'login@mail.com'; -- От кого
recipient VARCHAR2(32000) := 'user@mail.com'; --Кому
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.command(mail_conn, 'AUTH LOGIN');
utl_smtp.command(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(sender))));
utl_smtp.command(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('password'))));
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;