procedure SendHTMLWithLogo(pSender      in varchar2,
                           pRecipient   in varchar2,
                           pMailHost    in varchar2,
                           pPort        in number := 25,
                           pCcRecipient in varchar2 := null,
                           pSubject     in varchar2 := null,
                           pMessage     in varchar2 := null) is
  conn     utl_smtp.connection;
  mesgBody varchar2(32000);
  MAX_BASE64_LINE_WIDTH constant pls_integer := 76 / 4 * 3;
  data      raw(200);
  len       pls_integer;
  i         pls_integer := 0;
  logo      blob;
  logo_size pls_integer;
begin
  conn := UTL_smtp.open_connection(pMailHost, pPort);
  UTL_smtp.ehlo(conn, 'test');
  UTL_smtp.open_data(conn);
  -- header 
  UTL_smtp.write_data(conn, 'From: ' || pSender || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'To: ' || pRecipient || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Subject: ' || pSubject || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'MIME-Version: 1.0' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Content-Type: multipart/related; boundary="stemo-boundary-42"' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'X-Mailer: Mailer by Stemo Database team' || UTL_tcp.CRLF);
  -- end of header
  -- започва текстовата част 
  UTL_smtp.write_data(conn, UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, '--stemo-boundary-42' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Content-Type: text/html; charset=windows-1251' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, UTL_tcp.CRLF);
  mesgBody := replace(pMessage, CHR(10), CHR(13) || CHR(10));
  mesgBody := replace(mesgBody, CHR(13) || CHR(13) || CHR(10), CHR(13) || CHR(10));
  mesgBody := utl_raw.cast_to_raw(mesgBody);
  UTL_smtp.write_raw_data(conn, mesgBody);
  UTL_smtp.write_data(conn, UTL_tcp.CRLF);
  -- end of текстовата част
-- започва атачмънта 
  UTL_smtp.write_data(conn, '--stemo-boundary-42' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Content-ID: <logo@test>' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Content-Type: image/gif' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, 'Content-Transfer-Encoding: base64' || UTL_tcp.CRLF);
  UTL_smtp.write_data(conn, UTL_tcp.CRLF);
  -- да прочетем логото  
  select bLogo, dbms_lob.getlength(bLogo)
    into logo, logo_size
    from logo_table;
  dbms_lob.open(logo, DBMS_LOB.LOB_READONLY);
  -- трябва да разцепим атачмънта на части дълги по MAX_BASE64_LINE_WIDTH 
  i := 0;
  while (i < logo_size)
  loop
    len := MAX_BASE64_LINE_WIDTH; -- колко искаме да получим (max) 
    DBMS_LOB.read(logo, len, i, data);
    utl_smtp.write_raw_data(conn, utl_encode.base64_encode(data));
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    i := i + len;
  end loop;
  DBMS_LOB.close(logo);
  utl_smtp.write_data(conn, utl_tcp.CRLF);
  UTL_smtp.write_data(conn, '--stemo-boundary-42--' || UTL_tcp.CRLF);
  -- end of aтачмънт 
  UTL_smtp.close_data(conn);
  UTL_smtp.quit(conn);
end SendHTMLWithLogo;
